10
10
11
11
from typing import cast
12
12
13
- from coverage .plugin import CodeRegion
13
+ from coverage .types import CodeRegion
14
14
15
15
16
16
@dataclasses .dataclass
@@ -29,10 +29,7 @@ class RegionFinder(ast.NodeVisitor):
29
29
30
30
"""
31
31
def __init__ (self ) -> None :
32
- self .regions : dict [str , list [CodeRegion ]] = {
33
- "function" : [],
34
- "class" : [],
35
- }
32
+ self .regions : list [CodeRegion ] = []
36
33
self .context : list [Context ] = []
37
34
38
35
def parse_source (self , source : str ) -> None :
@@ -55,8 +52,13 @@ def visit_FunctionDef(self, node: ast.FunctionDef) -> None:
55
52
ancestor .lines -= lines
56
53
break
57
54
self .context .append (Context (node .name , "function" , lines ))
58
- self .regions ["function" ].append (
59
- CodeRegion (name = self .fq_node_name (), start = node .lineno , lines = lines )
55
+ self .regions .append (
56
+ CodeRegion (
57
+ kind = "function" ,
58
+ name = self .fq_node_name (),
59
+ start = node .lineno ,
60
+ lines = lines ,
61
+ )
60
62
)
61
63
self .generic_visit (node )
62
64
self .context .pop ()
@@ -70,8 +72,13 @@ def visit_ClassDef(self, node: ast.ClassDef) -> None:
70
72
# finds.
71
73
lines : set [int ] = set ()
72
74
self .context .append (Context (node .name , "class" , lines ))
73
- self .regions ["class" ].append (
74
- CodeRegion (name = self .fq_node_name (), start = node .lineno , lines = lines )
75
+ self .regions .append (
76
+ CodeRegion (
77
+ kind = "class" ,
78
+ name = self .fq_node_name (),
79
+ start = node .lineno ,
80
+ lines = lines ,
81
+ )
75
82
)
76
83
self .generic_visit (node )
77
84
self .context .pop ()
@@ -81,9 +88,11 @@ def visit_ClassDef(self, node: ast.ClassDef) -> None:
81
88
ancestor .lines -= lines
82
89
83
90
84
- def code_regions (source : str ) -> dict [ str , list [CodeRegion ] ]:
91
+ def code_regions (source : str ) -> list [CodeRegion ]:
85
92
"""Find function and class regions in source code.
86
93
94
+ TODO: Fix this description.
95
+
87
96
Takes the program `source`, and returns a dict: the keys are "function" and
88
97
"class". Each has a value which is a dict: the keys are fully qualified
89
98
names, the values are sets of line numbers included in that region::
0 commit comments