Skip to content

Commit fcfed07

Browse files
committed
Simplified the code for adding definitions
Signed-off-by: Ole Herman Schumacher Elgesem <ole@northern.tech>
1 parent f4688c6 commit fcfed07

1 file changed

Lines changed: 25 additions & 44 deletions

File tree

src/cfengine_cli/lint.py

Lines changed: 25 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)