@@ -291,51 +291,41 @@ def end_file(self) -> None:
291291 self .walking = False
292292 self .policy_file = None
293293
294- def add_bundle (self , name : str , node : Node ) -> None :
295- """This is called during discovery wherever a bundle is defined.
296-
297- For example:
298- bundle agent my_bundle {}
294+ def _add_definition (self , name : str , node : Node , definitions : dict ) -> None :
295+ """Add a definition (bundle or body) to the given dictionary.
299296
300- We create a dictionary where the key is the qualified name,
301- and the value is a list of all the definitions. This is because the
302- same qualified name can appear multiple times (e.g. inside macro
303- if/else branches). Each definition records the file, line number,
304- and parameter list.
297+ The value for each qualified name is a list of definitions, since
298+ the same name can appear multiple times (e.g. inside macro if/else
299+ branches). Each definition records the file, line, and parameter
300+ list.
305301 """
306302 name = _qualify (name , self .namespace )
307303 assert self .policy_file
308- line = node .range .start_point [0 ] + 1
304+ n = node .next_named_sibling
305+ if n and n .type == "parameter_list" :
306+ _ , * args , _ = n .children
307+ parameters = list (filter ("," .__ne__ , iter (_text (x ) for x in args )))
308+ else :
309+ parameters = []
309310 definition = {
310311 "filename" : self .policy_file .filename ,
311- "line" : line ,
312+ "line" : node .range .start_point [0 ] + 1 ,
313+ "parameters" : parameters ,
312314 }
313- if name not in self .bundles :
314- self .bundles [name ] = []
315- self .bundles [name ].append (definition )
315+ if name not in definitions :
316+ definitions [name ] = []
317+ definitions [name ].append (definition )
318+
319+ def add_bundle (self , name : str , node : Node ) -> None :
320+ """This is called during discovery wherever a bundle is defined."""
321+ self ._add_definition (name , node , self .bundles )
316322
317323 def add_body (self , name : str , node : Node ) -> None :
318324 """This is called during discovery wherever a body is defined.
319325
320- For example:
321- body contain my_body {}
322-
323- Control bundles are a special case, so would not be called for:
324- body file control {}
325-
326- Similar to add_bundles, we record a list of definitions, since
327- each body can be defined multiple times (inside different macros).
326+ Control bodies are a special case and should not be passed here.
328327 """
329- name = _qualify (name , self .namespace )
330- assert self .policy_file
331- line = node .range .start_point [0 ] + 1
332- definition = {
333- "filename" : self .policy_file .filename ,
334- "line" : line ,
335- }
336- if name not in self .bodies :
337- self .bodies [name ] = []
338- self .bodies [name ].append (definition )
328+ self ._add_definition (name , node , self .bodies )
339329
340330 def add_promise_type (self , name : str ) -> None :
341331 """This is called during discovery wherever a custom promise type is
@@ -497,27 +487,18 @@ def _discover_node(node: Node, state: State) -> int:
497487 if name == "control" :
498488 return 0 # No need to define control blocks
499489 state .add_body (name , node )
500- qualified_name = _qualify (name , state .namespace )
501- if (n := node .next_named_sibling ) and n .type == "parameter_list" :
502- _ , * args , _ = n .children
503- args = list (filter ("," .__ne__ , iter (_text (x ) for x in args )))
504- state .bodies [qualified_name ][- 1 ]["parameters" ] = args
505490 return 0
506491
507492 # Define bundles:
508493 if node .type == "bundle_block_name" :
509494 name = _text (node )
510- qualified_name = _qualify (name , state .namespace )
511495 state .add_bundle (name , node )
512- if (n := node .next_named_sibling ) and n .type == "parameter_list" :
513- _ , * args , _ = n .children
514- args = list (filter ("," .__ne__ , iter (_text (x ) for x in args )))
515- state .bundles [qualified_name ][- 1 ]["parameters" ] = args
516496 return 0
517497
518498 # Define custom promise types:
519499 if node .type == "promise_block_name" :
520- state .add_promise_type (_text (node ))
500+ name = _text (node )
501+ state .add_promise_type (name )
521502 return 0
522503
523504 return 0
0 commit comments