melexis/sphinx-traceability-extension

View on GitHub
mlx/traceability/traceable_collection.py

Summary

Maintainability
A
1 hr
Test Coverage

Cyclomatic complexity is too high in method self_test. (17)
Open

    def self_test(self, notification_item_id, docname=None):
        '''
        Perform self test on collection content

        Args:

Cyclomatic Complexity

Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

Construct Effect on CC Reasoning
if +1 An if statement is a single decision.
elif +1 The elif statement adds another decision.
else +0 The else statement does not cause a new decision. The decision is at the if.
for +1 There is a decision at the start of the loop.
while +1 There is a decision at the while statement.
except +1 Each except branch adds a new conditional path of execution.
finally +0 The finally block is unconditionally executed.
with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
assert +1 The assert statement internally roughly equals a conditional statement.
Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

Source: http://radon.readthedocs.org/en/latest/intro.html

Cyclomatic complexity is too high in method get_items. (11)
Open

    def get_items(self, regex, attributes=None, sortattributes=None, reverse=False, sort=True):
        '''
        Get all items that match a given regular expression

        Placeholders are excluded

Cyclomatic Complexity

Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

Construct Effect on CC Reasoning
if +1 An if statement is a single decision.
elif +1 The elif statement adds another decision.
else +0 The else statement does not cause a new decision. The decision is at the if.
for +1 There is a decision at the start of the loop.
while +1 There is a decision at the while statement.
except +1 Each except branch adds a new conditional path of execution.
finally +0 The finally block is unconditionally executed.
with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
assert +1 The assert statement internally roughly equals a conditional statement.
Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

Source: http://radon.readthedocs.org/en/latest/intro.html

Avoid deeply nested control flow statements.
Open

                        if target_of_target in item.yield_targets(rev_relation):
                            errors.append(TraceabilityException(
                                "Circular relationship found: {src} {rel} {tgt} {rel} {nested} {rel} {src}"
                                .format(src=itemid, rel=relation, tgt=tgt, nested=target_of_target),
                                item.docname))
Severity: Major
Found in mlx/traceability/traceable_collection.py - About 45 mins to fix

    Avoid too many return statements within this function.
    Open

            return self.items[source_id].is_related(relations, target_id)
    Severity: Major
    Found in mlx/traceability/traceable_collection.py - About 30 mins to fix

      Refactor this function to reduce its Cognitive Complexity from 36 to the 15 allowed.
      Open

          def self_test(self, notification_item_id, docname=None):

      Cognitive Complexity is a measure of how hard the control flow of a function is to understand. Functions with high Cognitive Complexity will be difficult to maintain.

      See

      Too many branches (13/12)
      Confirmed

          def self_test(self, notification_item_id, docname=None):

      Used when a function or method has too many branches, making it hard to follow.

      Using open without explicitly specifying an encoding
      Open

              with open(fname, 'w') as outfile:

      It is better to specify an encoding when opening documents. Using the system default implicitly can create problems on other operating systems. See https://peps.python.org/pep-0597/

      Formatting a regular string which could be a f-string
      Open

                  raise TraceabilityException('Relation {name} not known'.format(name=relation), source.docname)

      Used when we detect a string that is being formatted with format() or % which could potentially be a f-string. The use of f-strings is preferred. Requires Python 3.6 and py-version >= 3.6.

      Formatting a regular string which could be a f-string
      Open

                              errors.append(TraceabilityException("No automatic reverse relation: {source} {relation} "

      Used when we detect a string that is being formatted with format() or % which could potentially be a f-string. The use of f-strings is preferred. Requires Python 3.6 and py-version >= 3.6.

      Consider iterating with .items()
      Open

              for itemid in self.items:

      Emitted when iterating over the keys of a dictionary and accessing the value by index lookup. Both the key and value can be accessed by iterating using the .items() method of the dictionary instead.

      Formatting a regular string which could be a f-string
      Open

                      raise TraceabilityException('duplicating {itemid}'.format(itemid=item.identifier), item.docname)

      Used when we detect a string that is being formatted with format() or % which could potentially be a f-string. The use of f-strings is preferred. Requires Python 3.6 and py-version >= 3.6.

      Formatting a regular string which could be a f-string
      Open

                  retval += '\t{forward}: {reverse}\n'.format(forward=relation, reverse=reverse)

      Used when we detect a string that is being formatted with format() or % which could potentially be a f-string. The use of f-strings is preferred. Requires Python 3.6 and py-version >= 3.6.

      There are no issues that match your filters.

      Category
      Status