Curly braces can be omitted from a one-line block, such as with an ``++if++`` statement or ``++for++`` loop, but doing so can be misleading and induce bugs.


This rule raises an issue when the whitespacing of the lines after a one line block indicates an intent to include those lines in the block, but the omission of curly braces means the lines will be unconditionally executed once.


Note that this rule considers tab characters to be equivalent to 1 space. If you mix spaces and tabs you will sometimes see issues in code which looks fine in your editor but is confusing when you change the size of tabs.

== Noncompliant Code Example

----
if (condition)
  firstActionInBlock();
  secondAction();  // Noncompliant; executed unconditionally
thirdAction();

if (condition) firstActionInBlock(); secondAction();  // Noncompliant; secondAction executed unconditionally

if (condition) firstActionInBlock();  // Noncompliant
  secondAction();  // Executed unconditionally

if (condition); secondAction();  // Noncompliant; secondAction executed unconditionally

let str = undefined;
for (let i = 0; i < array.length; i++) 
  str = array[i];
  doTheThing(str);  // Noncompliant; executed only on last array element
----

== Compliant Solution

----
if (condition) {
  firstActionInBlock();
  secondAction();
}
thirdAction();

let str = undefined;
for (let i = 0; i < array.length; i++) {
  str = array[i];
  doTheThing(str);
}
----

== See

* http://cwe.mitre.org/data/definitions/483.html[MITRE, CWE-483] - Incorrect Block Delimitation

ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
