87 lines
2.4 KiB
Plaintext
87 lines
2.4 KiB
Plaintext
Conditional expressions which are always `true` or `false` can lead to https://en.wikipedia.org/wiki/Unreachable_code[unreachable code].
|
|
To fix this issue, either update the condition or remove the unreachable code.
|
|
|
|
== Why is this an issue?
|
|
|
|
Unreachable code is never executed, so it has no effect on the behaviour of the program.
|
|
If it is not executed because it no longer serves a purpose, then it adds unnecessary complexity.
|
|
Otherwise, it indicates that there is a logical error in the condition.
|
|
|
|
=== What is the potential impact?
|
|
|
|
Unreachable code affects maintainability.
|
|
It is harder for programmers to read, understand and modify the code when some parts are unreachable.
|
|
If the code should be reachable instead, then the program may not always behave as intended.
|
|
|
|
=== Exceptions
|
|
|
|
This rule will not raise an issue when
|
|
|
|
* The condition to reach the dead code is a boolean literal.
|
|
* The unreachable code is a simple statement, such as `pass`.
|
|
|
|
== How to fix it
|
|
|
|
You should first decide whether the unreachable code is useful.
|
|
If it is, then you should understand why the condition that leads to it is always false, and correct logical errors.
|
|
Otherwise, the code should be removed along with the condition.
|
|
|
|
=== Code examples
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,python,diff-id=1,diff-type=noncompliant]
|
|
----
|
|
def foo(a, b):
|
|
flag = True
|
|
|
|
if (a and not a): # Noncompliant
|
|
doSomething() # Never executed
|
|
|
|
if (flag): # Noncompliant
|
|
return "Result 1"
|
|
return "Result 2" # Never executed
|
|
----
|
|
|
|
==== Compliant solution
|
|
|
|
[source,python,diff-id=1,diff-type=compliant]
|
|
----
|
|
def foo(a, b):
|
|
if (a and not b):
|
|
doSomething()
|
|
|
|
return "Result 1"
|
|
----
|
|
|
|
=== How does this work?
|
|
|
|
The first condition is always false.
|
|
In this case, we decide that the call to `doSomething` is useful.
|
|
The problem is then a bug in the condition; for example, using `a` instead of `b`.
|
|
|
|
The second condition is always true.
|
|
Here, we decided that the second return statement is not useful anymore.
|
|
There may have been code manipulating the variable `flag` that was previously removed.
|
|
We can remove the unreachable code, the condition and the variable.
|
|
|
|
include::../see.adoc[]
|
|
|
|
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[]
|