11import re
2- from typing import List , Generator
2+ from typing import List , Generator , Tuple
33
44from griffe import Docstring , Function , Parameters , Parameter , Parser
55
@@ -132,29 +132,30 @@ def parse_signature(line: str) -> VbaSignatureInfo:
132132
133133def find_procedures (code : str ) -> Generator [VbaProcedureInfo , None , None ]:
134134 lines = code .splitlines ()
135- procedure = None
135+
136+ procedure : Tuple [VbaSignatureInfo , int ] | None = None
137+ """
138+ The signature and first line number of the procedure currently being parsed,
139+ or None when scanning for the start of the next procedure.
140+ """
136141
137142 for i , line in enumerate (lines ):
138143 if procedure is None :
139144 # Looking for signature. Ignore everything until we find one.
140145 if not is_signature (line ):
141146 continue
142147
143- procedure = {
144- "signature" : parse_signature (line ),
145- "first_line" : i + 1 ,
146- }
148+ procedure = parse_signature (line ), i + 1
147149 continue
148150
149151 if is_end (line ):
150152 # Found the end of a procedure.
151- procedure ["last_line" ] = i + 1
153+ signature , first_line = procedure
154+ last_line = i + 1
152155
153156 # The docstring consists of the comment lines directly after the signature.
154157 docstring_lines = []
155- procedure_source = lines [
156- procedure ["first_line" ] - 1 : procedure ["last_line" ] - 1
157- ]
158+ procedure_source = lines [first_line - 1 : last_line - 1 ]
158159 for source_line in procedure_source [1 :]:
159160 if not is_comment (source_line ):
160161 break
@@ -167,29 +168,29 @@ def find_procedures(code: str) -> Generator[VbaProcedureInfo, None, None]:
167168 value = docstring_value ,
168169 parser = Parser .google ,
169170 parser_options = {},
170- lineno = procedure [ " first_line" ] + 1 ,
171+ lineno = first_line + 1 ,
171172 parent = Function (
172- name = procedure [ " signature" ] .name ,
173+ name = signature .name ,
173174 parameters = Parameters (
174175 * (
175176 Parameter (
176177 name = arg .name ,
177178 annotation = arg .arg_type ,
178179 default = arg .default ,
179180 )
180- for arg in procedure [ " signature" ] .args
181+ for arg in signature .args
181182 )
182183 ),
183- returns = procedure [ " signature" ] .return_type ,
184+ returns = signature .return_type ,
184185 ),
185186 )
186187
187188 # Yield it and start over.
188189 yield VbaProcedureInfo (
189- signature = procedure [ " signature" ] ,
190+ signature = signature ,
190191 docstring = docstring ,
191- first_line = procedure [ " first_line" ] ,
192- last_line = procedure [ " last_line" ] ,
192+ first_line = first_line ,
193+ last_line = last_line ,
193194 source = procedure_source ,
194195 )
195196 procedure = None
0 commit comments