Why you should care
This rule applies whenever an if statement is followed by one or more else if statements; the final else if should be followed by an else statement.
The requirement for a final else statement is defensive programming.
The else statement should either take appropriate action or contain a suitable comment as to why no action is taken. This is consistent with the requirement to have a final default clause in a switch statement.
How we detect
CAST Highlight counts one occurrence each time if-else if statements are not ended by else clause, except when all branches of an if-else if end with return, the code that comes after the if implicitly behaves as if it was in an else clause.
Bad Code
if x == 0 { doSomething() } else if x == 1 { doSomethingElse() }
Good Code
if x == 0 { doSomething() } else if x == 1 { doSomethingElse() } else { return errors.New("unsupported int") } if x == 0 { doSomething() return 1 } else if x == 1 { return 2 } else if { return errors.New("unsupported int") }
References
https://stackoverflow.com/questions/35053371/what-is-the-benefit-of-terminating-if-else-if-constructs-with-an-else-clause
https://rules.sonarsource.com/java/RSPEC-126
https://wiki.sei.cmu.edu/confluence/display/java/MSC57-J.+Strive+for+logical+completeness
https://rules.sonarsource.com/java/RSPEC-126
https://wiki.sei.cmu.edu/confluence/display/java/MSC57-J.+Strive+for+logical+completeness
About CAST and Highlight’s Code Insights
Over the last 25 years, CAST has leveraged unique knowledge on software quality measurement by analyzing thousands of applications and billions of lines of code. Based on this experience and community standards on programming best practices, Highlight implements hundreds of code insights across 15+ technologies to calculate health factors of a software.