From 6e7ade58a398a36a9cd1be1e05b6e8e7d1cae4de Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 23 Nov 2022 10:06:20 -0500 Subject: [PATCH 1/3] fix(eslint-plugin): [keyword-spacing] prevent crash on no options --- packages/eslint-plugin/src/rules/keyword-spacing.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/eslint-plugin/src/rules/keyword-spacing.ts b/packages/eslint-plugin/src/rules/keyword-spacing.ts index 6af42e5c2fb7..32fb2aaeb717 100644 --- a/packages/eslint-plugin/src/rules/keyword-spacing.ts +++ b/packages/eslint-plugin/src/rules/keyword-spacing.ts @@ -25,7 +25,7 @@ export default util.createRule({ }, defaultOptions: [{}], - create(context) { + create(context, [{ after }]) { const sourceCode = context.getSourceCode(); const baseRules = baseRule.create(context); return { @@ -58,7 +58,7 @@ export default util.createRule({ const punctuatorToken = sourceCode.getTokenAfter(typeToken)!; const spacesBetweenTypeAndPunctuator = punctuatorToken.range[0] - typeToken.range[1]; - if (context.options[0].after && spacesBetweenTypeAndPunctuator === 0) { + if (after && spacesBetweenTypeAndPunctuator === 0) { context.report({ loc: punctuatorToken.loc, messageId: 'expectedBefore', @@ -68,7 +68,7 @@ export default util.createRule({ }, }); } - if (!context.options[0].after && spacesBetweenTypeAndPunctuator > 0) { + if (!after && spacesBetweenTypeAndPunctuator > 0) { context.report({ loc: punctuatorToken.loc, messageId: 'unexpectedBefore', From ee43230a87df00ff6ea02ec0de9bde8eb8a28520 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 23 Nov 2022 10:43:14 -0500 Subject: [PATCH 2/3] chore: add internal lint rule to always prefer created options --- .eslintrc.js | 10 ++++++++++ packages/eslint-plugin/src/rules/brace-style.ts | 5 +---- packages/eslint-plugin/src/rules/no-unused-vars.ts | 4 +--- .../eslint-plugin/src/rules/object-curly-spacing.ts | 3 +-- .../src/rules/padding-line-between-statements.ts | 1 + .../eslint-plugin/src/rules/space-before-blocks.ts | 3 +-- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 6dfb0c353629..81f745d38247 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -264,6 +264,16 @@ module.exports = { // specifically for rules - default exports makes the tooling easier 'import/no-default-export': 'off', + + 'no-restricted-syntax': [ + 'error', + { + selector: + 'ExportDefaultDeclaration Property[key.name="create"] MemberExpression[object.name="context"][property.name="options"]', + message: + "Retrieve options from create's second parameter so that defaultOptions are applied.", + }, + ], }, }, // plugin rule tests diff --git a/packages/eslint-plugin/src/rules/brace-style.ts b/packages/eslint-plugin/src/rules/brace-style.ts index c4b052beaddb..4468ac592b0f 100644 --- a/packages/eslint-plugin/src/rules/brace-style.ts +++ b/packages/eslint-plugin/src/rules/brace-style.ts @@ -27,10 +27,7 @@ export default createRule({ schema: baseRule.meta.schema, }, defaultOptions: ['1tbs'], - create(context) { - const [style, { allowSingleLine } = { allowSingleLine: false }] = - context.options; - + create(context, [style, { allowSingleLine } = { allowSingleLine: false }]) { const isAllmanStyle = style === 'allman'; const sourceCode = context.getSourceCode(); const rules = baseRule.create(context); diff --git a/packages/eslint-plugin/src/rules/no-unused-vars.ts b/packages/eslint-plugin/src/rules/no-unused-vars.ts index 5fcde1986676..77da885048d7 100644 --- a/packages/eslint-plugin/src/rules/no-unused-vars.ts +++ b/packages/eslint-plugin/src/rules/no-unused-vars.ts @@ -84,7 +84,7 @@ export default util.createRule({ }, }, defaultOptions: [{}], - create(context) { + create(context, [firstOption]) { const filename = context.getFilename(); const sourceCode = context.getSourceCode(); const MODULE_DECL_CACHE = new Map(); @@ -97,8 +97,6 @@ export default util.createRule({ caughtErrors: 'none', }; - const [firstOption] = context.options; - if (firstOption) { if (typeof firstOption === 'string') { options.vars = firstOption; diff --git a/packages/eslint-plugin/src/rules/object-curly-spacing.ts b/packages/eslint-plugin/src/rules/object-curly-spacing.ts index 5c188bb2c07b..180adf2fb86b 100644 --- a/packages/eslint-plugin/src/rules/object-curly-spacing.ts +++ b/packages/eslint-plugin/src/rules/object-curly-spacing.ts @@ -30,8 +30,7 @@ export default createRule({ }, }, defaultOptions: ['never'], - create(context) { - const [firstOption, secondOption] = context.options; + create(context, [firstOption, secondOption]) { const spaced = firstOption === 'always'; const sourceCode = context.getSourceCode(); diff --git a/packages/eslint-plugin/src/rules/padding-line-between-statements.ts b/packages/eslint-plugin/src/rules/padding-line-between-statements.ts index a3c354ea737b..f9b97096afc8 100644 --- a/packages/eslint-plugin/src/rules/padding-line-between-statements.ts +++ b/packages/eslint-plugin/src/rules/padding-line-between-statements.ts @@ -634,6 +634,7 @@ export default util.createRule({ defaultOptions: [], create(context) { const sourceCode = context.getSourceCode(); + // eslint-disable-next-line no-restricted-syntax -- We need all raw options. const configureList = context.options || []; type Scope = null | { diff --git a/packages/eslint-plugin/src/rules/space-before-blocks.ts b/packages/eslint-plugin/src/rules/space-before-blocks.ts index 569be350cd74..5f16929aa52e 100644 --- a/packages/eslint-plugin/src/rules/space-before-blocks.ts +++ b/packages/eslint-plugin/src/rules/space-before-blocks.ts @@ -29,9 +29,8 @@ export default util.createRule({ }, }, defaultOptions: ['always'], - create(context) { + create(context, [config]) { const rules = baseRule.create(context); - const config = context.options[0]; const sourceCode = context.getSourceCode(); let requireSpace = true; From 9be5793750f4731e298ec2f1ccd046853c973fa2 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 24 Nov 2022 14:13:47 -0500 Subject: [PATCH 3/3] All right base rules, you do you --- packages/eslint-plugin/src/rules/brace-style.ts | 6 +++++- packages/eslint-plugin/src/rules/object-curly-spacing.ts | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/brace-style.ts b/packages/eslint-plugin/src/rules/brace-style.ts index 4468ac592b0f..43d4ba63c3cf 100644 --- a/packages/eslint-plugin/src/rules/brace-style.ts +++ b/packages/eslint-plugin/src/rules/brace-style.ts @@ -27,7 +27,11 @@ export default createRule({ schema: baseRule.meta.schema, }, defaultOptions: ['1tbs'], - create(context, [style, { allowSingleLine } = { allowSingleLine: false }]) { + create(context) { + const [style, { allowSingleLine } = { allowSingleLine: false }] = + // eslint-disable-next-line no-restricted-syntax -- Use raw options for extended rules. + context.options; + const isAllmanStyle = style === 'allman'; const sourceCode = context.getSourceCode(); const rules = baseRule.create(context); diff --git a/packages/eslint-plugin/src/rules/object-curly-spacing.ts b/packages/eslint-plugin/src/rules/object-curly-spacing.ts index 180adf2fb86b..1c1c737c8425 100644 --- a/packages/eslint-plugin/src/rules/object-curly-spacing.ts +++ b/packages/eslint-plugin/src/rules/object-curly-spacing.ts @@ -30,7 +30,9 @@ export default createRule({ }, }, defaultOptions: ['never'], - create(context, [firstOption, secondOption]) { + create(context) { + // eslint-disable-next-line no-restricted-syntax -- Use raw options for extended rules. + const [firstOption, secondOption] = context.options; const spaced = firstOption === 'always'; const sourceCode = context.getSourceCode(); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy