From dd57a011e4896abb2ba8a0afec4e21c08e4e1079 Mon Sep 17 00:00:00 2001 From: Lucien Bart Date: Thu, 11 Dec 2025 16:59:47 +0100 Subject: [PATCH] Modify rule S126: Report if without else in assignment in scala --- rules/S126/scala/rule.adoc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/rules/S126/scala/rule.adoc b/rules/S126/scala/rule.adoc index 8c4f976837d..529da5b0e87 100644 --- a/rules/S126/scala/rule.adoc +++ b/rules/S126/scala/rule.adoc @@ -7,6 +7,8 @@ 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 ``++case _++`` clause in a ``++match++``. +In Scala, this rule also applies when an ``++if++`` statement without an ``++else++`` clause appears on the right-hand side of an assignment. Since Scala treats ``++if++`` as an expression that returns a value, omitting the ``++else++`` clause results in the assignment receiving ``++Unit++`` (represented as ``++()++``) when the condition is false, which is typically unintended and can lead to type errors or unexpected behavior. + === Noncompliant code example [source,scala] @@ -15,7 +17,13 @@ if (x == 0) { doSomething } else if (x == 1) { doSomethingElse -} +} +---- +[source,scala] +---- +val result = if (x == 0) { + "zero" +} ---- === Compliant solution @@ -31,6 +39,15 @@ if (x == 0) { } ---- +[source,scala] +---- +val result = if (x == 0) { + "zero" +} else { + "not zero" +} +---- + === Exceptions When all branches of an ``++if++``-``++else if++`` end with ``++return++``, ``++break++`` or ``++throw++``, the code that comes after the ``++if++`` implicitly behaves as if it was in an ``++else++`` clause. This rule will therefore ignore that case.