Skip to content

Commit 0f0acd8

Browse files
jugglinmikerwaldron
authored andcommittedJun 16, 2020
[[FIX]] Limit positions for class declarations
JSHint already includes logic to disallow `let` and `const` declarations in certain statement positions. Extend the definition of `class` tokens so that it applies the same restrictions to class declarations.
1 parent c45d1b2 commit 0f0acd8

File tree

2 files changed

+4
-22
lines changed

2 files changed

+4
-22
lines changed
 

‎src/jshint.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -2743,8 +2743,7 @@ var JSHINT = (function() {
27432743
state.syntax["new"].exps = true;
27442744

27452745

2746-
// Class statement
2747-
blockstmt("class", function(context) {
2746+
var classDeclaration = blockstmt("class", function(context) {
27482747
var className, classNameToken;
27492748
var inexport = context & prodParams.export;
27502749

@@ -2782,7 +2781,9 @@ var JSHINT = (function() {
27822781
state.funct["(scope)"].stack();
27832782
classBody(this, context);
27842783
return this;
2785-
}).exps = true;
2784+
});
2785+
classDeclaration.exps = true;
2786+
classDeclaration.declaration = true;
27862787

27872788
/*
27882789
Class expression

‎tests/test262/expectations.txt

-19
Original file line numberDiff line numberDiff line change
@@ -207,24 +207,12 @@ test/language/expressions/arrow-function/syntax/early-errors/asi-restriction-inv
207207
test/language/expressions/arrow-function/syntax/early-errors/asi-restriction-invalid-parenless-parameters-expression-body.js(strict mode)
208208
test/language/expressions/arrow-function/syntax/early-errors/asi-restriction-invalid-parenless-parameters.js(default)
209209
test/language/expressions/arrow-function/syntax/early-errors/asi-restriction-invalid-parenless-parameters.js(strict mode)
210-
test/language/statements/do-while/decl-cls.js(default)
211-
test/language/statements/do-while/decl-cls.js(strict mode)
212-
test/language/statements/for-in/decl-cls.js(default)
213-
test/language/statements/for-in/decl-cls.js(strict mode)
214210
test/language/statements/for-in/head-const-bound-names-fordecl-tdz.js(default)
215211
test/language/statements/for-in/head-const-bound-names-fordecl-tdz.js(strict mode)
216212
test/language/statements/for-in/head-let-bound-names-fordecl-tdz.js(default)
217213
test/language/statements/for-in/head-let-bound-names-fordecl-tdz.js(strict mode)
218214
test/language/statements/for-in/head-lhs-let.js(default)
219-
test/language/statements/for/decl-cls.js(default)
220-
test/language/statements/for/decl-cls.js(strict mode)
221215
test/language/statements/for/head-lhs-let.js(default)
222-
test/language/statements/if/if-cls-else-cls.js(default)
223-
test/language/statements/if/if-cls-else-cls.js(strict mode)
224-
test/language/statements/if/if-cls-else-stmt.js(default)
225-
test/language/statements/if/if-cls-else-stmt.js(strict mode)
226-
test/language/statements/if/if-cls-no-else.js(default)
227-
test/language/statements/if/if-cls-no-else.js(strict mode)
228216
test/language/statements/if/if-decl-else-decl-strict.js(strict mode)
229217
test/language/statements/if/if-decl-else-stmt-strict.js(strict mode)
230218
test/language/statements/if/if-decl-no-else-strict.js(strict mode)
@@ -237,8 +225,6 @@ test/language/statements/if/if-gen-else-stmt.js(default)
237225
test/language/statements/if/if-gen-else-stmt.js(strict mode)
238226
test/language/statements/if/if-gen-no-else.js(default)
239227
test/language/statements/if/if-gen-no-else.js(strict mode)
240-
test/language/statements/if/if-stmt-else-cls.js(default)
241-
test/language/statements/if/if-stmt-else-cls.js(strict mode)
242228
test/language/statements/if/if-stmt-else-decl-strict.js(strict mode)
243229
test/language/statements/if/if-stmt-else-fun-strict.js(strict mode)
244230
test/language/statements/if/if-stmt-else-gen.js(default)
@@ -279,21 +265,16 @@ test/language/statements/return/S12.9_A1_T8.js(default)
279265
test/language/statements/return/S12.9_A1_T8.js(strict mode)
280266
test/language/statements/return/S12.9_A1_T9.js(default)
281267
test/language/statements/return/S12.9_A1_T9.js(strict mode)
282-
test/language/statements/for-of/decl-cls.js(default)
283-
test/language/statements/for-of/decl-cls.js(strict mode)
284268
test/language/statements/for-of/head-const-bound-names-fordecl-tdz.js(default)
285269
test/language/statements/for-of/head-const-bound-names-fordecl-tdz.js(strict mode)
286270
test/language/statements/for-of/head-let-bound-names-fordecl-tdz.js(default)
287271
test/language/statements/for-of/head-let-bound-names-fordecl-tdz.js(strict mode)
288272
test/language/statements/switch/S12.11_A2_T1.js(default)
289273
test/language/statements/switch/S12.11_A2_T1.js(strict mode)
290-
test/language/statements/while/decl-cls.js(default)
291-
test/language/statements/while/decl-cls.js(strict mode)
292274
test/language/statements/try/early-catch-duplicates.js(default)
293275
test/language/statements/try/early-catch-duplicates.js(strict mode)
294276
test/language/statements/try/early-catch-lex.js(default)
295277
test/language/statements/try/early-catch-lex.js(strict mode)
296-
test/language/statements/with/decl-cls.js(default)
297278
test/language/statements/const/block-local-use-before-initialization-in-declaration-statement.js(default)
298279
test/language/statements/const/block-local-use-before-initialization-in-declaration-statement.js(strict mode)
299280
test/language/statements/const/block-local-use-before-initialization-in-prior-statement.js(default)

0 commit comments

Comments
 (0)
Please sign in to comment.