
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.
177 lines
5.2 KiB
Plaintext
177 lines
5.2 KiB
Plaintext
== Why is this an issue?
|
|
|
|
ECMAScript 2015 introduced the ability to extract and assign multiple data points from an object or array simultaneously. This is called "destructuring", and it allows you to condense boilerplate code so you can concentrate on logic.
|
|
|
|
|
|
This rule raises an issue when multiple pieces of data are extracted out of the same object or array and assigned to variables.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,javascript]
|
|
----
|
|
function foo (obj1, obj2, array) {
|
|
var a = obj1.a; // Noncompliant
|
|
var b = obj1.b;
|
|
|
|
var name = obj2.name; // ignored; there's only one extraction-and-assignment
|
|
|
|
var zero = array[0]; // Noncompliant
|
|
var one = array[1];
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,javascript]
|
|
----
|
|
function foo (obj1, obj2, array) {
|
|
var {a, b} = obj1;
|
|
|
|
var {name} = obj2; // this syntax works because var name and property name are the same
|
|
|
|
var [zero, one] = array;
|
|
}
|
|
----
|
|
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Use destructuring syntax for these assignments from "xxx".
|
|
|
|
|
|
=== Highlighting
|
|
|
|
* Primary: first assignment from object/array
|
|
* Secondary: all subsequent assignments from same object/array
|
|
** message: 'Replace this assignment.'
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== on 6 Apr 2016, 13:20:40 Christian wrote:
|
|
Sorry for hijacking this Issue, but I found a small problem with ES2015 destructuring and am not able to create a new issue in this tracker...
|
|
|
|
|
|
The parser currently dies when using destructuring with default values provided. The following sample throws an error in Version 2.11:
|
|
|
|
|
|
|
|
----
|
|
let {
|
|
headlines = [],
|
|
breadCrumb = [],
|
|
[this.myProp]: data=[],
|
|
translations = {}
|
|
} = response.data;
|
|
----
|
|
|
|
Destructuring has the possibility to use default values, as well as custom property names (as in the this.myProp line).
|
|
|
|
|
|
The following error is encountered:
|
|
|
|
|
|
{noformat}
|
|
|
|
ERROR: Error during Sonar runner execution
|
|
|
|
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
|
|
|
|
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91)
|
|
|
|
at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
|
|
|
|
at java.security.AccessController.doPrivileged(Native Method)
|
|
|
|
at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
|
|
|
|
at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
|
|
|
|
at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
|
|
|
|
at org.sonar.runner.api.Runner.execute(Runner.java:90)
|
|
|
|
at org.sonar.runner.Main.executeTask(Main.java:70)
|
|
|
|
at org.sonar.runner.Main.execute(Main.java:59)
|
|
|
|
at org.sonar.runner.Main.main(Main.java:41)
|
|
|
|
Caused by: org.sonar.squidbridge.api.AnalysisException: Unable to analyse file: /var/lib/jenkins/jobs/xyz/workspace/src/Test.js
|
|
|
|
at org.sonar.plugins.javascript.JavaScriptSquidSensor.analyse(JavaScriptSquidSensor.java:195)
|
|
|
|
at org.sonar.plugins.javascript.JavaScriptSquidSensor.analyseFiles(JavaScriptSquidSensor.java:161)
|
|
|
|
at org.sonar.plugins.javascript.JavaScriptSquidSensor.analyse(JavaScriptSquidSensor.java:152)
|
|
|
|
at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:79)
|
|
|
|
at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:70)
|
|
|
|
at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:119)
|
|
|
|
at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:194)
|
|
|
|
at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
|
|
|
|
at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
|
|
|
|
at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:233)
|
|
|
|
at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:228)
|
|
|
|
at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:221)
|
|
|
|
at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
|
|
|
|
at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
|
|
|
|
at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:64)
|
|
|
|
at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:51)
|
|
|
|
at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:125)
|
|
|
|
at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
|
|
|
|
at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
|
|
|
|
at org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:173)
|
|
|
|
at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95)
|
|
|
|
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
|
|
|
|
at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:45)
|
|
|
|
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
|
|
|
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
|
|
|
|
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
|
|
|
at java.lang.reflect.Method.invoke(Method.java:606)
|
|
|
|
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87)
|
|
|
|
{noformat}
|
|
|
|
|
|
|
|
=== on 6 Apr 2016, 13:23:34 Ann Campbell wrote:
|
|
\[~cs] the proper way to raise this is in the SonarQube Google group, not - as you said - to "hijack" an issue.
|
|
|
|
endif::env-github,rspecator-view[]
|