All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.l10n.py.rules.python.S1871.html Maven / Gradle / Ivy

There is a newer version: 4.23.0.17664
Show newest version

Why is this an issue?

When the same code is duplicated in two or more separate branches of a conditional, it can make the code harder to understand, maintain, and can potentially introduce bugs if one instance of the code is changed but others are not.

Having two branches in the same if structure with the same implementation is at best duplicate code, and at worst a coding error.

if 0 <= a < 10:
    do_first()
    do_second()
elif 10 <= a < 20:
    do_the_other_thing()
elif 20 <= a < 50:
    do_first()         # Noncompliant; duplicates first condition
    do_second()

If the same logic is needed for both instances, then the conditions should be combined.

if (0 <= a < 10) or (20 <= a < 50):
    do_first()
    do_second()
elif 10 <= a < 20:
    do_the_other_thing()

Exceptions

Blocks in an if chain that contain a single line of code are ignored.

if 0 <= a < 10:
    do_first()
elif 10 <= a < 20:
    do_the_other_thing()
elif 20 <= a < 50:
    do_first()         # no issue, usually this is done on purpose to increase the readability

But this exception does not apply to if chains without else-s when all branches have the same single line of code. In the case of if chains with else-s rule {rule:python:S3923} raises a bug.

if 0 <= a < 10:
    do_first()
elif 20 <= a < 50:
    do_first()         # Noncompliant, this might have been done on purpose but probably not

Resources

Related rules

  • {rule:python:S3923} - All branches in a conditional structure should not have exactly the same implementation




© 2015 - 2024 Weber Informatics LLC | Privacy Policy