nedbat / django_coverage_plugin

A plugin for coverage.py to measure Django template execution
Apache License 2.0
196 stars 34 forks source link

Add a configuration option to allow block tags to be excluded by regex #93

Open rebkwok opened 6 months ago

rebkwok commented 6 months ago

Thanks for this plugin, which did almost exactly what we needed, apart from one issue, which this PR is an attempt to address.

The issue we had was that our project is using slippers, which means we have component tags in our templates with start/end block tags that don't follow the usual django convention for the end tag ({% end<...> %}). Instead they look something like

{% #card %}
...
{% /card %}

This means that any component end tag on its own line gets marked as uncovered.

This PR adds a config option exclude_blocks which takes a list of regexes, similar to exclude_also in the main coverage config, and allow us to specify patterns to match and exclude the content of block tags. With the following pyproject.toml config, we can now exclude any block tags that start with "/" (ie slippers component end tags).

[tool.coverage.django_coverage_plugin]
template_extensions = "html"
exclude_blocks = [
    "\\/\\w+"
]

I didn't add a similar exclude option for text tags because there's additional complexity there since a text tag can span multiple lines (and I haven't seen issues that suggest it's a feature anyone needs yet)