summaryrefslogtreecommitdiff
path: root/coverage/parser.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2016-01-10 15:33:01 -0500
committerNed Batchelder <ned@nedbatchelder.com>2016-01-10 15:33:01 -0500
commit55ab897f5d822920b3086be4677bd989a3f8b051 (patch)
tree7862d291cdbe4c3477538fb40f1708bdab806a64 /coverage/parser.py
parenta0a90eb342410a6fccf4898ed64135d109577151 (diff)
downloadpython-coveragepy-55ab897f5d822920b3086be4677bd989a3f8b051.tar.gz
Class docstrings are executable.
Diffstat (limited to 'coverage/parser.py')
-rw-r--r--coverage/parser.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/coverage/parser.py b/coverage/parser.py
index 501b76c..307b83e 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -125,6 +125,7 @@ class PythonParser(object):
excluding = False
excluding_decorators = False
prev_toktype = token.INDENT
+ last_name = None
first_line = None
empty = True
first_on_line = True
@@ -146,6 +147,7 @@ class PythonParser(object):
# we need to exclude them. The simplest way is to note the
# lines with the 'class' keyword.
self.raw_classdefs.add(slineno)
+ last_name = ttext
elif toktype == token.OP:
if ttext == ':':
should_exclude = (elineno in self.raw_excluded) or excluding_decorators
@@ -168,7 +170,8 @@ class PythonParser(object):
# (a trick from trace.py in the stdlib.) This works for
# 99.9999% of cases. For the rest (!) see:
# http://stackoverflow.com/questions/1769332/x/1769794#1769794
- self.raw_docstrings.update(range(slineno, elineno+1))
+ if last_name == 'def':
+ self.raw_docstrings.update(range(slineno, elineno+1))
elif toktype == token.NEWLINE:
if first_line is not None and elineno != first_line:
# We're at the end of a line, and we've ended on a
@@ -334,6 +337,7 @@ class AstArcAnalyzer(object):
if int(os.environ.get("COVERAGE_ASTDUMP", 0)): # pragma: debugging
# Dump the AST so that failing tests have helpful output.
print(self.statements)
+ print(self.multiline)
ast_dump(self.root_node)
self.arcs = None
@@ -508,13 +512,13 @@ class AstArcAnalyzer(object):
if dec_start != last:
self.arcs.add((last, dec_start))
last = dec_start
- # The definition line may have been missed, but we should have it in
- # `self.statements`.
- body_start = self.line_for_node(node.body[0])
- for lineno in range(last+1, body_start):
- if lineno in self.statements:
- self.arcs.add((last, lineno))
- last = lineno
+ # The definition line may have been missed, but we should have it in
+ # `self.statements`.
+ body_start = self.line_for_node(node.body[0])
+ for lineno in range(last+1, body_start):
+ if lineno in self.statements:
+ self.arcs.add((last, lineno))
+ last = lineno
# the body is handled in add_arcs_for_code_objects.
return set([last])