diff --git a/docs/rules/keyword-spacing.md b/docs/rules/keyword-spacing.md index 0cc952dc91e..8ca6739371c 100644 --- a/docs/rules/keyword-spacing.md +++ b/docs/rules/keyword-spacing.md @@ -243,13 +243,14 @@ if(foo) { ### overrides -Examples of **correct** code for this rule with the `{ "overrides": { "if": { "after": false }, "for": { "after": false }, "while": { "after": false } } }` option: +Examples of **correct** code for this rule with the `{ "overrides": { "if": { "after": false }, "for": { "after": false }, "while": { "after": false }, "static": { "after": false } } }` option: ```js /*eslint keyword-spacing: ["error", { "overrides": { "if": { "after": false }, "for": { "after": false }, - "while": { "after": false } + "while": { "after": false }, + "static": { "after": false } } }]*/ if(foo) { @@ -263,7 +264,13 @@ if(foo) { for(;;); while(true) { - //... + //... +} + +class C { + static{ + //... + } } ``` diff --git a/docs/rules/space-before-blocks.md b/docs/rules/space-before-blocks.md index 83e9b3d6a0b..35a4c16c3ce 100644 --- a/docs/rules/space-before-blocks.md +++ b/docs/rules/space-before-blocks.md @@ -63,6 +63,9 @@ if (a) { c(); } +class C { + static{} /*no error. this is checked by `keyword-spacing` rule.*/ +} function a() {} diff --git a/lib/rules/keyword-spacing.js b/lib/rules/keyword-spacing.js index d860ae0f04b..44222e1a493 100644 --- a/lib/rules/keyword-spacing.js +++ b/lib/rules/keyword-spacing.js @@ -590,6 +590,7 @@ module.exports = { ImportNamespaceSpecifier: checkSpacingForImportNamespaceSpecifier, MethodDefinition: checkSpacingForProperty, PropertyDefinition: checkSpacingForProperty, + StaticBlock: checkSpacingAroundFirstToken, Property: checkSpacingForProperty, // To avoid conflicts with `space-infix-ops`, e.g. `a > this.b` diff --git a/tests/lib/rules/keyword-spacing.js b/tests/lib/rules/keyword-spacing.js index 05e58d7e1ae..35c8a06e43e 100644 --- a/tests/lib/rules/keyword-spacing.js +++ b/tests/lib/rules/keyword-spacing.js @@ -978,6 +978,11 @@ ruleTester.run("keyword-spacing", rule, { { code: "class A { a;static[b]; }", options: [NEITHER], parserOptions: { ecmaVersion: 2022 } }, { code: "class A { a; static #b; }", parserOptions: { ecmaVersion: 2022 } }, { code: "class A { a;static#b; }", options: [NEITHER], parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { a() {} static {} }", parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { a() {}static{} }", options: [NEITHER], parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { a() {} static {} }", options: [override("static", BOTH)], parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { a() {}static{} }", options: [override("static", NEITHER)], parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { a() {}\nstatic\n{} }", options: [NEITHER], parserOptions: { ecmaVersion: 2022 } }, // not conflict with `generator-star-spacing` { code: "class A { static* [a]() {} }", parserOptions: { ecmaVersion: 6 } }, @@ -986,6 +991,10 @@ ruleTester.run("keyword-spacing", rule, { // not conflict with `semi-spacing` { code: "class A { ;static a() {} }", parserOptions: { ecmaVersion: 6 } }, { code: "class A { ; static a() {} }", options: [NEITHER], parserOptions: { ecmaVersion: 6 } }, + { code: "class A { ;static a; }", parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { ; static a ; }", options: [NEITHER], parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { ;static {} }", parserOptions: { ecmaVersion: 2022 } }, + { code: "class A { ; static{} }", options: [NEITHER], parserOptions: { ecmaVersion: 2022 } }, //---------------------------------------------------------------------- // super @@ -3043,6 +3052,59 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 2022 }, errors: unexpectedAfter("static") }, + { + code: "class A { a() {}static{} }", + output: "class A { a() {} static {} }", + parserOptions: { ecmaVersion: 2022 }, + errors: expectedBeforeAndAfter("static") + }, + { + code: "class A { a() {}static{} }", + output: "class A { a() {} static {} }", + options: [override("static", BOTH)], + parserOptions: { ecmaVersion: 2022 }, + errors: expectedBeforeAndAfter("static") + }, + { + code: "class A { a() {}static {} }", + output: "class A { a() {} static {} }", + parserOptions: { ecmaVersion: 2022 }, + errors: expectedBefore("static") + }, + { + code: "class A { a() {} static{} }", + output: "class A { a() {} static {} }", + parserOptions: { ecmaVersion: 2022 }, + errors: expectedAfter("static") + }, + { + code: "class A { a() {} static {} }", + output: "class A { a() {}static{} }", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022 }, + errors: unexpectedBeforeAndAfter("static") + }, + { + code: "class A { a() {} static {} }", + output: "class A { a() {}static{} }", + options: [override("static", NEITHER)], + parserOptions: { ecmaVersion: 2022 }, + errors: unexpectedBeforeAndAfter("static") + }, + { + code: "class A { a() {} static{} }", + output: "class A { a() {}static{} }", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022 }, + errors: unexpectedBefore("static") + }, + { + code: "class A { a() {}static {} }", + output: "class A { a() {}static{} }", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022 }, + errors: unexpectedAfter("static") + }, //---------------------------------------------------------------------- // super diff --git a/tests/lib/rules/semi-spacing.js b/tests/lib/rules/semi-spacing.js index c9cccddd5f1..ffd67854abc 100644 --- a/tests/lib/rules/semi-spacing.js +++ b/tests/lib/rules/semi-spacing.js @@ -483,6 +483,19 @@ ruleTester.run("semi-spacing", rule, { endColumn: 16 } ] + }, + { + code: "class C { foo;static {}}", + output: "class C { foo; static {}}", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ + messageId: "missingWhitespaceAfter", + type: "PropertyDefinition", + line: 1, + column: 14, + endLine: 1, + endColumn: 15 + }] } ] }); diff --git a/tests/lib/rules/space-before-blocks.js b/tests/lib/rules/space-before-blocks.js index 79961dd4d56..49af9611650 100644 --- a/tests/lib/rules/space-before-blocks.js +++ b/tests/lib/rules/space-before-blocks.js @@ -202,7 +202,19 @@ ruleTester.run("space-before-blocks", rule, { { code: "switch(x) { case (9):{ break; } }", options: alwaysArgs }, { code: "switch(x){ case (9): { break; } }", options: neverArgs }, { code: "switch(x) { default:{ break; } }", options: alwaysArgs }, - { code: "switch(x){ default: { break; } }", options: neverArgs } + { code: "switch(x){ default: { break; } }", options: neverArgs }, + + // not conflict with `keyword-spacing` + { + code: "(class{ static{} })", + options: ["always"], + parserOptions: { ecmaVersion: 2022 } + }, + { + code: "(class { static {} })", + options: ["never"], + parserOptions: { ecmaVersion: 2022 } + } ], invalid: [ {