Skip to content

Commit 004eea6

Browse files
committed
Fix regex for bare # pragma: no cover
1 parent 1e60732 commit 004eea6

File tree

3 files changed

+34
-14
lines changed

3 files changed

+34
-14
lines changed

coverage_pyver_pragma/__init__.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,21 +153,24 @@ def configure(self, config: Any) -> None:
153153
# print(config.exclude_list)
154154

155155
# Reinstate the general regex, but making sure it isn't followed by a left bracket.
156-
config.exclude_list.append(
157-
make_not_exclude_regex(platform.system(), platform.python_implementation()).pattern
158-
)
156+
config.exclude_list += [
157+
p.pattern for p in make_not_exclude_regexs(platform.system(), platform.python_implementation())
158+
]
159159

160160
# TODO: Python 4.X
161161

162162

163-
def make_not_exclude_regex(
163+
def make_not_exclude_regexs(
164164
current_platform: str,
165165
current_implementation: str,
166-
) -> Pattern:
166+
) -> List[Pattern]:
167167

168-
return re.compile(
169-
fr"{regex_main} (?!\(.*(.{{0,2}}(py|PY|Py)3\d(\+)?|!{current_platform}|!{current_implementation}).*\)).*$"
170-
)
168+
return [
169+
re.compile(
170+
fr"{regex_main} (?!\(.*(.{{0,2}}(py|PY|Py)3\d(\+)?|!{current_platform}|!{current_implementation}).*\)).*$"
171+
),
172+
re.compile(fr"{regex_main}$"),
173+
]
171174

172175

173176
def coverage_init(reg, options):

tests/test_plugin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44

55
# this package
6-
from coverage_pyver_pragma import PyVerPragmaPlugin, make_not_exclude_regex, make_regexes, regex_main
6+
from coverage_pyver_pragma import PyVerPragmaPlugin, make_not_exclude_regexs, make_regexes, regex_main
77

88

99
class MockConfig:
@@ -18,4 +18,4 @@ def test_plugin():
1818

1919
assert mock_config.exclude_list == [
2020
p.pattern for p in make_regexes(sys.version_info, platform.system(), platform.python_implementation())
21-
] + [make_not_exclude_regex(platform.system(), platform.python_implementation()).pattern]
21+
] + [p.pattern for p in make_not_exclude_regexs(platform.system(), platform.python_implementation())]

tests/test_regex.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
import pytest
88

99
# this package
10-
from coverage_pyver_pragma import make_not_exclude_regex, make_regexes
10+
from coverage_pyver_pragma import make_not_exclude_regexs, make_regexes
1111

1212

1313
def test_not_version_regex():
1414

15-
not_version_regex = make_not_exclude_regex("Linux", "CPython").pattern
15+
not_version_regex = make_not_exclude_regexs("Linux", "CPython")[0].pattern
1616
print(not_version_regex)
1717

1818
counter = 1
@@ -37,7 +37,6 @@ def test_not_version_regex():
3737
raise AssertionError(f"[{counter} FAIL: {test_string}]")
3838
counter += 1
3939

40-
# TODO Regex for # pragma: no cover etc with nothing after it
4140
for comment_string in ['#', "# ", "# ", "#\t", "# \t", "# \t ", "#\t "]:
4241
for pragma_string in ["pragma", "PRAGMA"]:
4342
for post_pragma_space in ['', ':', ": ", ":\t", " "]:
@@ -46,7 +45,25 @@ def test_not_version_regex():
4645
for cover_string in ["cover", "COVER"]:
4746
for post_cover_space in [' ']:
4847
# ['', ' ', "\t", " "]: # TODO: This regex is picky about the space here
49-
for post_cover_text in ['', "abcdefg", "hello world"]:
48+
for post_cover_text in ["abcdefg", "hello world"]:
49+
test_string = f"{comment_string}{pragma_string}{post_pragma_space}{no_string}{post_no_space}{cover_string}{post_cover_space}{post_cover_text}"
50+
# print(f"[{counter} TESTING: {test_string}]")
51+
52+
if re.match(not_version_regex, test_string) is None:
53+
raise AssertionError(f"[{counter} FAIL: {test_string}]")
54+
counter += 1
55+
56+
not_version_regex = make_not_exclude_regexs("Linux", "CPython")[1].pattern
57+
print(not_version_regex)
58+
59+
for comment_string in ['#', "# ", "# ", "#\t", "# \t", "# \t ", "#\t "]:
60+
for pragma_string in ["pragma", "PRAGMA"]:
61+
for post_pragma_space in ['', ':', ": ", ":\t", " "]:
62+
for no_string in ["no", "NO"]:
63+
for post_no_space in ['', ' ', "\t", " "]:
64+
for cover_string in ["cover", "COVER"]:
65+
for post_cover_space in ['']:
66+
for post_cover_text in ['']:
5067
test_string = f"{comment_string}{pragma_string}{post_pragma_space}{no_string}{post_no_space}{cover_string}{post_cover_space}{post_cover_text}"
5168
# print(f"[{counter} TESTING: {test_string}]")
5269

0 commit comments

Comments
 (0)