6.2.5.40. Architecture-CycleDetection

Find cycles in the RFG and report them as violations

Required inputs: RFG

This rule identifies cycles in the selected program view.

A cycle in the call graph, for example, bears the risk of infinite recursion at runtime if the termination of the calls is not guaranteed. As a consequence, the entire cycle has to be understood and all conditions must be managed simultaneously as to not induce runtime failure. At the same time, cycles impede understandability of the code for a developer.

If you want to include dynamic calls for function pointers and virtual calls, then manually activate StaticSemanticAnalysis.

This rule does not modify the RFG (use Architecture-CyclesView to generate a Cycles view).

Possible Messages

This rule has no predefined messages.

Options

base_view_name

base_view_name : str = 'Call'

Name of the base view for which cycles should be computed
 

generate_violation_previews

generate_violation_previews : bool = True

Whether to generate images of the cycle violations to be shown in the dashboard. This is an expensive operation and can be skipped to shorten the runtime of this rule.
 

ignored_edge_types

ignored_edge_types : set[str] = set()

Edge type names which should be ignored, e.g. Dynamic_Call
 

pre_excludes

pre_excludes : set[bauhaus.analysis.config.GlobPattern] = set()

Set of globbing patterns of directories/filenames to exclude before the analysis is performed, i.e. no cycle is reported if the only connecting path goes through a node matching at least one pre_exclude entry.
 

preview_edge_limit

preview_edge_limit : int = 1000

Maximum number of edges in a cycle for which a preview image should be generated.
 

preview_node_limit

preview_node_limit : int = 1000

Maximum number of nodes in a cycle for which a preview image should be generated.
 

selfloops

selfloops : bool = False

Whether only directly recursive elements should be reported as well.