From c45d1b2ecef67d8ebef677ddc6ab550d7ea6997b Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 14 Jun 2020 17:45:34 -0400 Subject: [PATCH] [[FIX]] Allow "rest" operator in param dstrctrng Previously, in the context of function parameter lists, JSHint only allowed the "rest" operator to be applied to identifiers. Extend support to destructuring patterns and update the Test262 "expectations" file accordingly. --- src/jshint.js | 3 ++- tests/test262/expectations.txt | 18 ------------------ 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/src/jshint.js b/src/jshint.js index c4b8a3960b..49e7b5540c 100644 --- a/src/jshint.js +++ b/src/jshint.js @@ -3522,6 +3522,8 @@ var JSHINT = (function() { // are added to the param scope var currentParams = []; + pastRest = spreadrest("rest"); + if (_.includes(["{", "["], state.tokens.next.id)) { hasDestructuring = true; tokens = destructuringPattern(context); @@ -3533,7 +3535,6 @@ var JSHINT = (function() { } } } else { - pastRest = spreadrest("rest"); ident = identifier(context); if (ident) { diff --git a/tests/test262/expectations.txt b/tests/test262/expectations.txt index c8836ca755..2aef55d545 100644 --- a/tests/test262/expectations.txt +++ b/tests/test262/expectations.txt @@ -143,10 +143,6 @@ test/language/identifiers/vals-rus-alpha-lower-via-escape-hex.js(default) test/language/identifiers/vals-rus-alpha-lower-via-escape-hex.js(strict mode) test/language/identifiers/vals-rus-alpha-upper-via-escape-hex.js(default) test/language/identifiers/vals-rus-alpha-upper-via-escape-hex.js(strict mode) -test/language/rest-parameters/array-pattern.js(default) -test/language/rest-parameters/array-pattern.js(strict mode) -test/language/rest-parameters/object-pattern.js(default) -test/language/rest-parameters/object-pattern.js(strict mode) test/language/arguments-object/10.6-13-c-1-s.js(strict mode) test/language/arguments-object/10.6-1gs.js(strict mode) test/language/arguments-object/10.6-2gs.js(strict mode) @@ -191,10 +187,6 @@ test/language/expressions/template-literal/invalid-hexidecimal-character-escape- test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js(default) test/language/expressions/template-literal/tv-utf16-escape-sequence.js(default) test/language/expressions/template-literal/tv-utf16-escape-sequence.js(strict mode) -test/language/expressions/function/scope-param-rest-elem-var-close.js(default) -test/language/expressions/function/scope-param-rest-elem-var-open.js(default) -test/language/expressions/generators/scope-param-rest-elem-var-close.js(default) -test/language/expressions/generators/scope-param-rest-elem-var-open.js(default) test/language/expressions/generators/yield-as-function-expression-binding-identifier.js(default) test/language/expressions/generators/yield-as-logical-or-expression.js(default) test/language/expressions/generators/yield-as-logical-or-expression.js(strict mode) @@ -202,10 +194,6 @@ test/language/expressions/generators/yield-star-after-newline.js(default) test/language/expressions/generators/yield-star-after-newline.js(strict mode) test/language/expressions/class/getter-param-dflt.js(default) test/language/expressions/class/getter-param-dflt.js(strict mode) -test/language/expressions/object/scope-gen-meth-param-rest-elem-var-close.js(default) -test/language/expressions/object/scope-gen-meth-param-rest-elem-var-open.js(default) -test/language/expressions/object/scope-meth-param-rest-elem-var-close.js(default) -test/language/expressions/object/scope-meth-param-rest-elem-var-open.js(default) test/language/expressions/object/method-definition/yield-as-expression-with-rhs.js(default) test/language/expressions/object/method-definition/yield-as-expression-with-rhs.js(strict mode) test/language/expressions/object/method-definition/yield-as-expression-without-rhs.js(default) @@ -215,8 +203,6 @@ test/language/expressions/object/method-definition/yield-as-logical-or-expressio test/language/expressions/object/method-definition/yield-as-logical-or-expression.js(strict mode) test/language/expressions/object/method-definition/yield-star-after-newline.js(default) test/language/expressions/object/method-definition/yield-star-after-newline.js(strict mode) -test/language/expressions/arrow-function/scope-param-rest-elem-var-close.js(default) -test/language/expressions/arrow-function/scope-param-rest-elem-var-open.js(default) test/language/expressions/arrow-function/syntax/early-errors/asi-restriction-invalid-parenless-parameters-expression-body.js(default) test/language/expressions/arrow-function/syntax/early-errors/asi-restriction-invalid-parenless-parameters-expression-body.js(strict mode) test/language/expressions/arrow-function/syntax/early-errors/asi-restriction-invalid-parenless-parameters.js(default) @@ -257,8 +243,6 @@ test/language/statements/if/if-stmt-else-decl-strict.js(strict mode) test/language/statements/if/if-stmt-else-fun-strict.js(strict mode) test/language/statements/if/if-stmt-else-gen.js(default) test/language/statements/if/if-stmt-else-gen.js(strict mode) -test/language/statements/generators/scope-param-rest-elem-var-close.js(default) -test/language/statements/generators/scope-param-rest-elem-var-open.js(default) test/language/statements/generators/yield-as-function-expression-binding-identifier.js(default) test/language/statements/generators/yield-as-logical-or-expression.js(default) test/language/statements/generators/yield-as-logical-or-expression.js(strict mode) @@ -275,8 +259,6 @@ test/language/statements/labeled/decl-gen.js(default) test/language/statements/labeled/decl-gen.js(strict mode) test/language/statements/labeled/decl-let.js(default) test/language/statements/labeled/decl-let.js(strict mode) -test/language/statements/function/scope-param-rest-elem-var-close.js(default) -test/language/statements/function/scope-param-rest-elem-var-open.js(default) test/language/statements/return/S12.9_A1_T1.js(default) test/language/statements/return/S12.9_A1_T1.js(strict mode) test/language/statements/return/S12.9_A1_T10.js(default)