
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
62 lines
1.5 KiB
Plaintext
62 lines
1.5 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Arrays in JavaScript have several methods for filtering, mapping, or folding that require a callback. Not having a return statement in such a callback function is most likely a mistake, because processing of the array uses the return value of the callback. If there is no return, callback will implicitly return ``++undefined++``, which will likely fail.
|
|
|
|
|
|
This rule applies for the following methods of an array:
|
|
|
|
* ``++Array.from++``
|
|
* ``++Array.prototype.every++``
|
|
* ``++Array.prototype.filter++``
|
|
* ``++Array.prototype.find++``
|
|
* ``++Array.prototype.findIndex++``
|
|
* ``++Array.prototype.map++``
|
|
* ``++Array.prototype.reduce++``
|
|
* ``++Array.prototype.reduceRight++``
|
|
* ``++Array.prototype.some++``
|
|
* ``++Array.prototype.sort++``
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,javascript]
|
|
----
|
|
let arr = ["a", "b", "c"];
|
|
let merged = arr.reduce(function(a, b) {
|
|
a.concat(b);
|
|
}); // Noncompliant: No return statement, will result in TypeError
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,javascript]
|
|
----
|
|
let arr = ["a", "b", "c"];
|
|
let merged = arr.reduce(function(a, b) {
|
|
return a.concat(b);
|
|
}); // merged === "abc"
|
|
----
|
|
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Add a "return" statement to this callback.
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== on 9 Feb 2017, 14:54:23 Carlo Bottiglieri wrote:
|
|
Moved to Blocker severity, as the likehood is high, not low.
|
|
|
|
endif::env-github,rspecator-view[]
|