Peter Trifanov d953a8c265
Modify S1121: Migrate to LayC - Assignments should not be made from within sub-expressions
Co-authored-by: Fred Tingaud <frederic.tingaud@sonarsource.com>
2023-10-13 19:17:01 +02:00

62 lines
1.3 KiB
Plaintext

== Why is this an issue?
include::../description.adoc[]
Moreover, using chained assignments in declarations is also dangerous because one may accidentally create global variables. Consider the following code snippet: ``++let x = y = 1;++``. If ``++y++`` is not declared, it will be hoisted as global.
=== Exceptions
The rule does not raise issues for the following patterns:
* chained assignments: ``++a = b = c = 0;++``
* relational assignments: ``++(a = 0) != b++``
* sequential assignments: ``++a = 0, b = 1, c = 2++``
* assignments in lambda body: ``++() => a = 0++``
* conditional assignment idiom: ``++a || (a = 0)++``
* assignments in (do-)while conditions: ``++while (a = 0);++``
== How to fix it
include::../how-to-fix-it.adoc[]
=== Code examples
==== Noncompliant code example
[source,javascript,diff-id=1,diff-type=noncompliant]
----
if (val = value() && check()) { // Noncompliant
// ...
}
----
==== Compliant solution
[source,javascript,diff-id=1,diff-type=compliant]
----
val = value();
if (val && check()) {
// ...
}
----
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[]