summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2021-11-11 06:54:06 -0500
committerNed Batchelder <ned@nedbatchelder.com>2021-11-11 06:54:06 -0500
commit79f9f4575321fafc2ef770e3255f874db3d4b037 (patch)
tree55585f53e63083145add45c9779d3124ec171566
parent0387bbaa5e9ab2ad834311249802695ebb0c34ca (diff)
downloadpython-coveragepy-git-79f9f4575321fafc2ef770e3255f874db3d4b037.tar.gz
refactor: we no longer need to treat 'class' lines specially
Originally, this tokenizing code was paired with bytecode analysis. But now we use AST instead, so class lines don't need to be handled differently.
-rw-r--r--coverage/parser.py15
-rw-r--r--lab/parser.py2
-rw-r--r--tests/test_parser.py6
3 files changed, 3 insertions, 20 deletions
diff --git a/coverage/parser.py b/coverage/parser.py
index b47fd12e..d17d7c9b 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -67,9 +67,6 @@ class PythonParser:
# The raw line numbers of excluded lines of code, as marked by pragmas.
self.raw_excluded = set()
- # The line numbers of class definitions.
- self.raw_classdefs = set()
-
# The line numbers of docstring lines.
self.raw_docstrings = set()
@@ -133,12 +130,6 @@ class PythonParser:
indent += 1
elif toktype == token.DEDENT:
indent -= 1
- elif toktype == token.NAME:
- if ttext == 'class':
- # Class definitions look like branches in the bytecode, so
- # we need to exclude them. The simplest way is to note the
- # lines with the 'class' keyword.
- self.raw_classdefs.add(slineno)
elif toktype == token.OP:
if ttext == ':' and nesting == 0:
should_exclude = (elineno in self.raw_excluded) or excluding_decorators
@@ -301,12 +292,6 @@ class PythonParser:
continue
exit_counts[l1] += 1
- # Class definitions have one extra exit, so remove one for each:
- for l in self.raw_classdefs:
- # Ensure key is there: class definitions can include excluded lines.
- if l in exit_counts:
- exit_counts[l] -= 1
-
return exit_counts
def missing_arc_description(self, start, end, executed_arcs=None):
diff --git a/lab/parser.py b/lab/parser.py
index 19cb94a8..50b43564 100644
--- a/lab/parser.py
+++ b/lab/parser.py
@@ -108,8 +108,6 @@ class ParserMain:
marks[2] = str(exits)
if lineno in pyparser.raw_docstrings:
marks[3] = '"'
- if lineno in pyparser.raw_classdefs:
- marks[3] = 'C'
if lineno in pyparser.raw_excluded:
marks[4] = 'x'
diff --git a/tests/test_parser.py b/tests/test_parser.py
index 303f2b55..538e2500 100644
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -43,7 +43,7 @@ class PythonParserTest(CoverageTest):
pass
""")
assert parser.exit_counts() == {
- 2:1, 3:1, 4:2, 5:1, 7:1, 9:1, 10:1
+ 2:2, 3:1, 4:2, 5:1, 7:1, 9:2, 10:1
}
def test_generator_exit_counts(self):
@@ -89,7 +89,7 @@ class PythonParserTest(CoverageTest):
pass
""")
assert parser.exit_counts() == {
- 1:0, 2:1, 3:1
+ 1:1, 2:1, 3:1
}
def test_missing_branch_to_excluded_code(self):
@@ -457,7 +457,7 @@ class ParserFileTest(CoverageTest):
class Bar:
pass
"""
- counts = { 2:1, 3:1, 4:2, 5:1, 7:1, 9:1, 10:1 }
+ counts = { 2:2, 3:1, 4:2, 5:1, 7:1, 9:2, 10:1 }
name_endings = (("unix", "\n"), ("dos", "\r\n"), ("mac", "\r"))
for fname, newline in name_endings:
fname = fname + ".py"