1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
|
[](https://github.com/asottile/covdefaults/actions/workflows/main.yml)
[](https://results.pre-commit.ci/latest/github/asottile/covdefaults/main)
covdefaults
===========
A coverage plugin to provide sensible default settings
## installation
```bash
pip install covdefaults
```
## usage
to enable the plugin, add `covdefaults` to your coverage plugins
in `.coveragerc`:
```ini
[run]
plugins = covdefaults
```
in `setup.cfg` / `tox.ini`:
```ini
[coverage:run]
plugins = covdefaults
```
in `pyproject.toml`:
```ini
[tool.coverage.run]
plugins = ["covdefaults"]
```
## default settings
### `[coverage:run]`
```ini
branch = True
source = .
omit =
*/__main__.py
*/setup.py
```
### `[coverage:report]`
```ini
show_missing = True
skip_covered = True
fail_under = 100
exclude_lines =
# a more strict default pragma
\# pragma: no cover\b
# allow defensive code
^\s*raise AssertionError\b
^\s*raise NotImplementedError\b
^\s*return NotImplemented\b
^\s*raise$
# typing-related code
^\s*if (False|TYPE_CHECKING):
: \.\.\.(\s*#.*)?$
^ +\.\.\.$
-> ['"]?NoReturn['"]?:
# non-runnable code
if __name__ == ['"]__main__['"]:$
# additional platform related pragmas (see below)
# additional version related pragmas (see below)
partial_branches =
# a more strict default pragma
\# pragma: no cover\b
# out platform pragmas
\# pragma: (nt|posix|cygwin|darwin|linux|msys|win32|cpython|pypy) (no )?cover\b
# our version pragmas
\# pragma: (>=?|<=?|==|!=)\d+\.\d+ cover\b
```
### platform specific `# pragma: no cover`
several `# pragma: no cover` tags will be added automatically based on the
platform and implementation.
these will be in the form of:
```python
# pragma: TAG no cover
```
or
```python
# pragma: TAG cover
```
these tags will be generated by the following values:
- `os.name`
- `nt` (windows)
- `posix` (linux, macOs, cygwin, etc.)
- `sys.platform`
- `cygwin`
- `darwin` (macOs)
- `linux`
- `msys`
- `win32`
- `sys.implementation.name`
- `cpython`
- `pypy`
for every tag which does not match, you can use negation. here's an example:
```python
if sys.platform == 'win32': # pragma: win32 cover
bin_dir = 'Scripts'
else: # pragma: win32 no cover
bin_dir = 'bin'
```
note here that `# pragma: win32 cover` will become a "no cover" for everything
which is not `win32` -- whereas the `# pragma: win32 no cover` will be a
"no cover" only on `win32`.
### version specific `# pragma: no cover`
several `# pragma: no cover` tags will be added automatically based on the
platform and implementation.
these will be in the form of:
```python
# pragma: >=#.# cover
```
where the comparison operator is one of `>`, `>=`, `<`, `<=`, `==`, `!=`
for example:
```python
if sys.version_info >= (3, 9): # pragma: >=3.9 cover
print('3.9+')
else: # pragma: <3.9 cover
print('old')
```
### overriding options
several of the options can be overridden / extended in your coverage
configuration. the examples below assume `.coveragerc` however any of the
files `coverage` supports work as well.
#### `run:omit`
```ini
[run]
omit =
pre_commit/resources/*
```
this will result in the `pre_commit/resources/*` being `omit`ted in addition
to the defaults provided by `covdefaults`.
```ini
[covdefaults]
subtract_omit = */__main__.py
```
this will result in `*/__main__.py` not being `omit`ted (`*/__main__.py` is
among the defaults provided by `covdefaults`).
#### `run:source`
```ini
[run]
source = $PWD
```
covdefaults will not override this value to `.` if it is set manually.
#### `report:exclude_lines`
```ini
[report]
exclude_lines =
^if MYPY:$
```
this will result in lines matching `^if MYPY:$` to additionally be excluded
from coverage in addition to the defaults provided by `covdefaults`.
#### `report:fail_under`
```ini
[report]
fail_under = 90
```
`covdefaults` will not change the value if you provide one for `fail_under`
|