== Why is this an issue?

Destructuring is a convenient way of extracting multiple values from data stored in (possibly nested) objects and arrays. It can make code more concise and expressive by directly extracting values or properties needed from arrays or objects. However, it is possible to define an empty pattern that has no effect, where no variables are bound to the destructured values.


[source,javascript,diff-id=1,diff-type=noncompliant]
----
let {a: {}} = myObj; // Noncompliant: this does not create any variable
function foo({p: []}) { // Noncompliant: this does not define any parameter
  // ...
}
----

When empty curly or square brackets are bound to a pattern with a colon (`:`), like `{ pattern: [] }` or `{ pattern: {} }`, the intent is likely to define a default value. To properly define such a default value, use the assignment operator (`=`) instead.

[source,javascript,diff-id=1,diff-type=compliant]
----
let {a = {}} = myObj;
function foo({p = []}) {
  // ...
}
----

If that is not the intention, complete the destructuring pattern to contain the variables to create.

[source,javascript,diff-id=1,diff-type=compliant]
----
let {a: {b, c}} = myObj;
function foo({p: [a, b, c]}) {
  // ...
}
----

== Resources
=== Documentation

* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment[Destructuring assignment]


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Change this pattern to not be empty.


=== Highlighting

empty destructuring pattern


endif::env-github,rspecator-view[]
