From ee1b54f31fa840e6ec72a313aa4090fdd3e985cd Mon Sep 17 00:00:00 2001 From: "Nicholas C. Zakas" Date: Fri, 20 Aug 2021 04:49:30 -0700 Subject: [PATCH] Fix: keyword-spacing private name compat (refs #14857) (#14946) * Fix: keyword-spacing private name compat (refs #14857) * Update tests/lib/rules/keyword-spacing.js Co-authored-by: Milos Djermanovic Co-authored-by: Milos Djermanovic --- lib/rules/keyword-spacing.js | 20 ++++++++++++++++++-- tests/lib/rules/keyword-spacing.js | 4 ++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/rules/keyword-spacing.js b/lib/rules/keyword-spacing.js index 67054cb8ed0..458d15e1fdb 100644 --- a/lib/rules/keyword-spacing.js +++ b/lib/rules/keyword-spacing.js @@ -403,7 +403,15 @@ module.exports = { */ function checkSpacingForForInStatement(node) { checkSpacingAroundFirstToken(node); - checkSpacingAroundTokenBefore(node.right); + + const inToken = sourceCode.getTokenBefore(node.right, astUtils.isNotOpeningParenToken); + const previousToken = sourceCode.getTokenBefore(inToken); + + if (previousToken.type !== "PrivateIdentifier") { + checkSpacingBefore(inToken); + } + + checkSpacingAfter(inToken); } /** @@ -419,7 +427,15 @@ module.exports = { } else { checkSpacingAroundFirstToken(node); } - checkSpacingAround(sourceCode.getTokenBefore(node.right, astUtils.isNotOpeningParenToken)); + + const ofToken = sourceCode.getTokenBefore(node.right, astUtils.isNotOpeningParenToken); + const previousToken = sourceCode.getTokenBefore(ofToken); + + if (previousToken.type !== "PrivateIdentifier") { + checkSpacingBefore(ofToken); + } + + checkSpacingAfter(ofToken); } /** diff --git a/tests/lib/rules/keyword-spacing.js b/tests/lib/rules/keyword-spacing.js index 821a2b262fd..0dfcae6431c 100644 --- a/tests/lib/rules/keyword-spacing.js +++ b/tests/lib/rules/keyword-spacing.js @@ -379,6 +379,10 @@ ruleTester.run("keyword-spacing", rule, { { code: "", parserOptions: { ecmaVersion: 6, ecmaFeatures: { jsx: true } } }, { code: "", options: [NEITHER], parserOptions: { ecmaVersion: 6, ecmaFeatures: { jsx: true } } }, + // private names + { code: "class C {\n#x;\nfoo() {\nfor (this.#x of bar){}}}", options: [{ before: false }], parserOptions: { ecmaVersion: 2022 } }, + { code: "class C {\n#x;\nfoo() {\nfor (this.#x in bar){}}}", options: [{ before: false }], parserOptions: { ecmaVersion: 2022 } }, + //---------------------------------------------------------------------- // const //----------------------------------------------------------------------