
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
60 lines
1.4 KiB
Plaintext
60 lines
1.4 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Having two branches in the same ``++if++`` structure with the same implementation is at best duplicate code, and at worst a coding error. If the same logic is truly needed for both instances, then they should be combined.
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,python]
|
|
----
|
|
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()
|
|
----
|
|
|
|
=== Exceptions
|
|
|
|
Blocks in an ``++if++`` chain that contain a single line of code are ignored.
|
|
|
|
|
|
[source,python]
|
|
----
|
|
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 case of ``++if++`` chains with ``++else++``-s rule S3923 raises a bug.
|
|
|
|
[source,python]
|
|
----
|
|
if 0 <= a < 10:
|
|
do_first()
|
|
elif 20 <= a < 50:
|
|
do_first() # Noncompliant, this might have been done on purpose but probably not
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::../message.adoc[]
|
|
|
|
include::../highlighting.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::../comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|