From a1cb0967150aa9caafa393a10b2e12be9e2431de Mon Sep 17 00:00:00 2001 From: Luis Urrutia Date: Fri, 15 Nov 2024 22:36:52 -0300 Subject: [PATCH 01/18] fix(utils): add defaultOptions to meta --- packages/utils/src/eslint-utils/RuleCreator.ts | 10 +++++++--- packages/utils/src/ts-eslint/Rule.ts | 15 +++++++++++---- .../utils/src/ts-eslint/eslint/ESLintShared.ts | 2 +- .../utils/tests/eslint-utils/RuleCreator.test.ts | 2 ++ 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/packages/utils/src/eslint-utils/RuleCreator.ts b/packages/utils/src/eslint-utils/RuleCreator.ts index 293671649c6e..13ef2243278a 100644 --- a/packages/utils/src/eslint-utils/RuleCreator.ts +++ b/packages/utils/src/eslint-utils/RuleCreator.ts @@ -13,10 +13,11 @@ export type NamedCreateRuleMetaDocs = Omit; export type NamedCreateRuleMeta< MessageIds extends string, + Options extends readonly unknown[], PluginDocs = unknown, > = { docs: PluginDocs & RuleMetaDataDocs; -} & Omit, 'docs'>; +} & Omit, 'docs'>; export interface RuleCreateAndOptions< Options extends readonly unknown[], @@ -34,7 +35,7 @@ export interface RuleWithMeta< MessageIds extends string, Docs = unknown, > extends RuleCreateAndOptions { - meta: RuleMetaData; + meta: RuleMetaData; } export interface RuleWithMetaAndName< @@ -42,7 +43,7 @@ export interface RuleWithMetaAndName< MessageIds extends string, Docs = unknown, > extends RuleCreateAndOptions { - meta: NamedCreateRuleMeta; + meta: NamedCreateRuleMeta; name: string; } @@ -61,6 +62,7 @@ export function RuleCreator( Options extends readonly unknown[], MessageIds extends string, >({ + defaultOptions, meta, name, ...rule @@ -68,8 +70,10 @@ export function RuleCreator( RuleWithMetaAndName >): RuleModule { return createRule({ + defaultOptions, meta: { ...meta, + defaultOptions, docs: { ...meta.docs, url: urlCreator(name), diff --git a/packages/utils/src/ts-eslint/Rule.ts b/packages/utils/src/ts-eslint/Rule.ts index a48e4c0faf00..b067cca12401 100644 --- a/packages/utils/src/ts-eslint/Rule.ts +++ b/packages/utils/src/ts-eslint/Rule.ts @@ -27,7 +27,11 @@ export interface RuleMetaDataDocs { url?: string; } -export interface RuleMetaData { +export interface RuleMetaData< + MessageIds extends string, + Options extends readonly unknown[], + PluginDocs = unknown, +> { /** * True if the rule is deprecated, false otherwise */ @@ -65,12 +69,15 @@ export interface RuleMetaData { * - `"layout"` means the rule cares primarily about whitespace, semicolons, commas, and parentheses, all the parts of the program that determine how the code looks rather than how it executes. These rules work on parts of the code that aren’t specified in the AST. */ type: 'layout' | 'problem' | 'suggestion'; + + defaultOptions?: Options; } export interface RuleMetaDataWithDocs< MessageIds extends string, + Options extends readonly unknown[], PluginDocs = unknown, -> extends RuleMetaData { +> extends RuleMetaData { /** * Documentation for the rule */ @@ -655,7 +662,7 @@ export interface RuleModule< /** * Metadata about the rule */ - meta: RuleMetaData; + meta: RuleMetaData; } export type AnyRuleModule = RuleModule; @@ -670,7 +677,7 @@ export interface RuleModuleWithMetaDocs< /** * Metadata about the rule */ - meta: RuleMetaDataWithDocs; + meta: RuleMetaDataWithDocs; } export type AnyRuleModuleWithMetaDocs = RuleModuleWithMetaDocs< diff --git a/packages/utils/src/ts-eslint/eslint/ESLintShared.ts b/packages/utils/src/ts-eslint/eslint/ESLintShared.ts index db6e5b4de20d..ffbe848cc973 100644 --- a/packages/utils/src/ts-eslint/eslint/ESLintShared.ts +++ b/packages/utils/src/ts-eslint/eslint/ESLintShared.ts @@ -27,7 +27,7 @@ export declare class ESLintBase< getRulesMetaForResults( results: LintResult[], - ): Record>>; + ): Record>>; /** * This method checks if a given file is ignored by your configuration. diff --git a/packages/utils/tests/eslint-utils/RuleCreator.test.ts b/packages/utils/tests/eslint-utils/RuleCreator.test.ts index 6b78ece4a1ba..b6aeff3c5360 100644 --- a/packages/utils/tests/eslint-utils/RuleCreator.test.ts +++ b/packages/utils/tests/eslint-utils/RuleCreator.test.ts @@ -18,6 +18,7 @@ describe('RuleCreator', () => { }, defaultOptions: [], meta: { + defaultOptions: [], docs: { description: 'some description', recommended: 'yes', @@ -31,6 +32,7 @@ describe('RuleCreator', () => { name: 'test', }); expect(rule.meta).toEqual({ + defaultOptions: [], docs: { description: 'some description', recommended: 'yes', From 59a55f541568f04b99299d4ab0e0d94270513779 Mon Sep 17 00:00:00 2001 From: Luis Urrutia Date: Sat, 16 Nov 2024 09:02:23 -0300 Subject: [PATCH 02/18] fix(utils): add defaultOptions to rule instead of RuleCreator --- .../src/rules/no-unused-expressions.ts | 17 ++++++++++------- packages/utils/src/eslint-utils/RuleCreator.ts | 11 ++++------- packages/utils/src/ts-eslint/Rule.ts | 13 ++++++++----- .../utils/src/ts-eslint/eslint/ESLintShared.ts | 2 +- .../tests/eslint-utils/RuleCreator.test.ts | 2 -- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-unused-expressions.ts b/packages/eslint-plugin/src/rules/no-unused-expressions.ts index 894e1e435033..8c28b5cfb8d8 100644 --- a/packages/eslint-plugin/src/rules/no-unused-expressions.ts +++ b/packages/eslint-plugin/src/rules/no-unused-expressions.ts @@ -13,10 +13,19 @@ const baseRule = getESLintCoreRule('no-unused-expressions'); type MessageIds = InferMessageIdsTypeFromRule; type Options = InferOptionsTypeFromRule; +const defaultOptions: Options = [ + { + allowShortCircuit: false, + allowTaggedTemplates: false, + allowTernary: false, + }, +]; + export default createRule({ name: 'no-unused-expressions', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Disallow unused expressions', extendsBaseRule: true, @@ -26,13 +35,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions: [ - { - allowShortCircuit: false, - allowTaggedTemplates: false, - allowTernary: false, - }, - ], + defaultOptions, create(context, [{ allowShortCircuit = false, allowTernary = false }]) { const rules = baseRule.create(context); diff --git a/packages/utils/src/eslint-utils/RuleCreator.ts b/packages/utils/src/eslint-utils/RuleCreator.ts index 13ef2243278a..cd06aee6231f 100644 --- a/packages/utils/src/eslint-utils/RuleCreator.ts +++ b/packages/utils/src/eslint-utils/RuleCreator.ts @@ -13,11 +13,11 @@ export type NamedCreateRuleMetaDocs = Omit; export type NamedCreateRuleMeta< MessageIds extends string, - Options extends readonly unknown[], PluginDocs = unknown, + Options extends readonly unknown[] = [], > = { docs: PluginDocs & RuleMetaDataDocs; -} & Omit, 'docs'>; +} & Omit, 'docs'>; export interface RuleCreateAndOptions< Options extends readonly unknown[], @@ -35,7 +35,7 @@ export interface RuleWithMeta< MessageIds extends string, Docs = unknown, > extends RuleCreateAndOptions { - meta: RuleMetaData; + meta: RuleMetaData; } export interface RuleWithMetaAndName< @@ -43,7 +43,7 @@ export interface RuleWithMetaAndName< MessageIds extends string, Docs = unknown, > extends RuleCreateAndOptions { - meta: NamedCreateRuleMeta; + meta: NamedCreateRuleMeta; name: string; } @@ -62,7 +62,6 @@ export function RuleCreator( Options extends readonly unknown[], MessageIds extends string, >({ - defaultOptions, meta, name, ...rule @@ -70,10 +69,8 @@ export function RuleCreator( RuleWithMetaAndName >): RuleModule { return createRule({ - defaultOptions, meta: { ...meta, - defaultOptions, docs: { ...meta.docs, url: urlCreator(name), diff --git a/packages/utils/src/ts-eslint/Rule.ts b/packages/utils/src/ts-eslint/Rule.ts index b067cca12401..3db6cc970cad 100644 --- a/packages/utils/src/ts-eslint/Rule.ts +++ b/packages/utils/src/ts-eslint/Rule.ts @@ -29,8 +29,8 @@ export interface RuleMetaDataDocs { export interface RuleMetaData< MessageIds extends string, - Options extends readonly unknown[], PluginDocs = unknown, + Options extends readonly unknown[] = [], > { /** * True if the rule is deprecated, false otherwise @@ -70,14 +70,17 @@ export interface RuleMetaData< */ type: 'layout' | 'problem' | 'suggestion'; + /** + * Default options the rule will be run with + */ defaultOptions?: Options; } export interface RuleMetaDataWithDocs< MessageIds extends string, - Options extends readonly unknown[], PluginDocs = unknown, -> extends RuleMetaData { + Options extends readonly unknown[] = [], +> extends RuleMetaData { /** * Documentation for the rule */ @@ -662,7 +665,7 @@ export interface RuleModule< /** * Metadata about the rule */ - meta: RuleMetaData; + meta: RuleMetaData; } export type AnyRuleModule = RuleModule; @@ -677,7 +680,7 @@ export interface RuleModuleWithMetaDocs< /** * Metadata about the rule */ - meta: RuleMetaDataWithDocs; + meta: RuleMetaDataWithDocs; } export type AnyRuleModuleWithMetaDocs = RuleModuleWithMetaDocs< diff --git a/packages/utils/src/ts-eslint/eslint/ESLintShared.ts b/packages/utils/src/ts-eslint/eslint/ESLintShared.ts index ffbe848cc973..db6e5b4de20d 100644 --- a/packages/utils/src/ts-eslint/eslint/ESLintShared.ts +++ b/packages/utils/src/ts-eslint/eslint/ESLintShared.ts @@ -27,7 +27,7 @@ export declare class ESLintBase< getRulesMetaForResults( results: LintResult[], - ): Record>>; + ): Record>>; /** * This method checks if a given file is ignored by your configuration. diff --git a/packages/utils/tests/eslint-utils/RuleCreator.test.ts b/packages/utils/tests/eslint-utils/RuleCreator.test.ts index b6aeff3c5360..6b78ece4a1ba 100644 --- a/packages/utils/tests/eslint-utils/RuleCreator.test.ts +++ b/packages/utils/tests/eslint-utils/RuleCreator.test.ts @@ -18,7 +18,6 @@ describe('RuleCreator', () => { }, defaultOptions: [], meta: { - defaultOptions: [], docs: { description: 'some description', recommended: 'yes', @@ -32,7 +31,6 @@ describe('RuleCreator', () => { name: 'test', }); expect(rule.meta).toEqual({ - defaultOptions: [], docs: { description: 'some description', recommended: 'yes', From d5a9b163cd0582c3f0af58556a862c2812191b08 Mon Sep 17 00:00:00 2001 From: Luis Urrutia Date: Sat, 16 Nov 2024 09:16:44 -0300 Subject: [PATCH 03/18] fix(utils): add defaultOptions jsdocs --- packages/utils/src/ts-eslint/Rule.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/utils/src/ts-eslint/Rule.ts b/packages/utils/src/ts-eslint/Rule.ts index 3db6cc970cad..3b281090606b 100644 --- a/packages/utils/src/ts-eslint/Rule.ts +++ b/packages/utils/src/ts-eslint/Rule.ts @@ -71,7 +71,11 @@ export interface RuleMetaData< type: 'layout' | 'problem' | 'suggestion'; /** - * Default options the rule will be run with + * Specifies default options for the rule. If present, any user-provided options in their config will be merged on top of them recursively. + * This merging will be applied directly to `context.options`. + * If you want backwards-compatible support for earlier ESLint version; consider using the top-level `defaultOptions` instead. + * + * since ESLint 9.15.0 */ defaultOptions?: Options; } From 49bac3ffddc59ebc59511010d1f441cb3f60d598 Mon Sep 17 00:00:00 2001 From: Luis Urrutia Date: Sat, 16 Nov 2024 11:50:30 -0300 Subject: [PATCH 04/18] refactor: add defaultOptions to affected eslint rules --- .../src/rules/consistent-return.ts | 4 ++- .../eslint-plugin/src/rules/dot-notation.ts | 21 ++++++++------ .../src/rules/init-declarations.ts | 5 +++- .../eslint-plugin/src/rules/max-params.ts | 5 +++- .../src/rules/no-dupe-class-members.ts | 5 +++- .../src/rules/no-empty-function.ts | 13 +++++---- .../src/rules/no-invalid-this.ts | 5 +++- .../eslint-plugin/src/rules/no-loop-func.ts | 5 +++- .../src/rules/no-loss-of-precision.ts | 5 +++- .../src/rules/no-magic-numbers.ts | 27 +++++++++-------- .../src/rules/no-restricted-imports.ts | 5 +++- .../src/rules/no-useless-constructor.ts | 5 +++- .../src/rules/prefer-destructuring.ts | 29 ++++++++++--------- 13 files changed, 86 insertions(+), 48 deletions(-) diff --git a/packages/eslint-plugin/src/rules/consistent-return.ts b/packages/eslint-plugin/src/rules/consistent-return.ts index 44bd653a56e0..2c18a3cb979f 100644 --- a/packages/eslint-plugin/src/rules/consistent-return.ts +++ b/packages/eslint-plugin/src/rules/consistent-return.ts @@ -21,10 +21,12 @@ type FunctionNode = | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression; +const defaultOptions: Options = [{ treatUndefinedAsUnspecified: false }]; export default createRule({ name: 'consistent-return', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Require `return` statements to either always or never specify values', @@ -35,7 +37,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions: [{ treatUndefinedAsUnspecified: false }], + defaultOptions, create(context, [options]) { const services = getParserServices(context); const checker = services.program.getTypeChecker(); diff --git a/packages/eslint-plugin/src/rules/dot-notation.ts b/packages/eslint-plugin/src/rules/dot-notation.ts index ae0dd908f6f1..7b6bd9c9eb56 100644 --- a/packages/eslint-plugin/src/rules/dot-notation.ts +++ b/packages/eslint-plugin/src/rules/dot-notation.ts @@ -17,10 +17,21 @@ const baseRule = getESLintCoreRule('dot-notation'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = [ + { + allowIndexSignaturePropertyAccess: false, + allowKeywords: true, + allowPattern: '', + allowPrivateClassPropertyAccess: false, + allowProtectedClassPropertyAccess: false, + }, +]; + export default createRule({ name: 'dot-notation', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Enforce dot notation whenever possible', extendsBaseRule: true, @@ -67,15 +78,7 @@ export default createRule({ }, ], }, - defaultOptions: [ - { - allowIndexSignaturePropertyAccess: false, - allowKeywords: true, - allowPattern: '', - allowPrivateClassPropertyAccess: false, - allowProtectedClassPropertyAccess: false, - }, - ], + defaultOptions, create(context, [options]) { const rules = baseRule.create(context); const services = getParserServices(context); diff --git a/packages/eslint-plugin/src/rules/init-declarations.ts b/packages/eslint-plugin/src/rules/init-declarations.ts index 18629283c451..1e1fb021547a 100644 --- a/packages/eslint-plugin/src/rules/init-declarations.ts +++ b/packages/eslint-plugin/src/rules/init-declarations.ts @@ -15,10 +15,13 @@ const baseRule = getESLintCoreRule('init-declarations'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = ['always']; + export default createRule({ name: 'init-declarations', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Require or disallow initialization in variable declarations', @@ -28,7 +31,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions: ['always'], + defaultOptions, create(context, [mode]) { // Make a custom context to adjust the loc of reports where the base // rule's behavior is a bit too aggressive with TS-specific syntax (namely, diff --git a/packages/eslint-plugin/src/rules/max-params.ts b/packages/eslint-plugin/src/rules/max-params.ts index fe566bff824a..159078b5270c 100644 --- a/packages/eslint-plugin/src/rules/max-params.ts +++ b/packages/eslint-plugin/src/rules/max-params.ts @@ -22,10 +22,13 @@ const baseRule = getESLintCoreRule('max-params'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = [{ countVoidThis: false, max: 3 }]; + export default createRule({ name: 'max-params', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Enforce a maximum number of parameters in function definitions', @@ -58,7 +61,7 @@ export default createRule({ }, ], }, - defaultOptions: [{ countVoidThis: false, max: 3 }], + defaultOptions, create(context, [{ countVoidThis }]) { const baseRules = baseRule.create(context); diff --git a/packages/eslint-plugin/src/rules/no-dupe-class-members.ts b/packages/eslint-plugin/src/rules/no-dupe-class-members.ts index 60f51d317ae8..fcc88aae8908 100644 --- a/packages/eslint-plugin/src/rules/no-dupe-class-members.ts +++ b/packages/eslint-plugin/src/rules/no-dupe-class-members.ts @@ -15,10 +15,13 @@ const baseRule = getESLintCoreRule('no-dupe-class-members'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = []; + export default createRule({ name: 'no-dupe-class-members', meta: { type: 'problem', + defaultOptions, docs: { description: 'Disallow duplicate class members', extendsBaseRule: true, @@ -27,7 +30,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions: [], + defaultOptions, create(context) { const rules = baseRule.create(context); diff --git a/packages/eslint-plugin/src/rules/no-empty-function.ts b/packages/eslint-plugin/src/rules/no-empty-function.ts index ba5371fba3ef..ac51f32692a2 100644 --- a/packages/eslint-plugin/src/rules/no-empty-function.ts +++ b/packages/eslint-plugin/src/rules/no-empty-function.ts @@ -16,6 +16,12 @@ const baseRule = getESLintCoreRule('no-empty-function'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = [ + { + allow: [], + }, +]; + const schema = deepMerge( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- https://github.com/microsoft/TypeScript/issues/17002 Array.isArray(baseRule.meta.schema) @@ -54,6 +60,7 @@ export default createRule({ name: 'no-empty-function', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Disallow empty functions', extendsBaseRule: true, @@ -63,11 +70,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: [schema], }, - defaultOptions: [ - { - allow: [], - }, - ], + defaultOptions, create(context, [{ allow = [] }]) { const rules = baseRule.create(context); diff --git a/packages/eslint-plugin/src/rules/no-invalid-this.ts b/packages/eslint-plugin/src/rules/no-invalid-this.ts index db6b9489d98c..5552a3519e0f 100644 --- a/packages/eslint-plugin/src/rules/no-invalid-this.ts +++ b/packages/eslint-plugin/src/rules/no-invalid-this.ts @@ -15,10 +15,13 @@ const baseRule = getESLintCoreRule('no-invalid-this'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = [{ capIsConstructor: true }]; + export default createRule({ name: 'no-invalid-this', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Disallow `this` keywords outside of classes or class-like objects', @@ -28,7 +31,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions: [{ capIsConstructor: true }], + defaultOptions, create(context) { const rules = baseRule.create(context); diff --git a/packages/eslint-plugin/src/rules/no-loop-func.ts b/packages/eslint-plugin/src/rules/no-loop-func.ts index 244128db63e3..342c9fde7557 100644 --- a/packages/eslint-plugin/src/rules/no-loop-func.ts +++ b/packages/eslint-plugin/src/rules/no-loop-func.ts @@ -15,10 +15,13 @@ const baseRule = getESLintCoreRule('no-loop-func'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = []; + export default createRule({ name: 'no-loop-func', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Disallow function declarations that contain unsafe references inside loop statements', @@ -28,7 +31,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: [], }, - defaultOptions: [], + defaultOptions, create(context) { const SKIPPED_IIFE_NODES = new Set< | TSESTree.ArrowFunctionExpression diff --git a/packages/eslint-plugin/src/rules/no-loss-of-precision.ts b/packages/eslint-plugin/src/rules/no-loss-of-precision.ts index b3659ddd68bd..37c5545ca896 100644 --- a/packages/eslint-plugin/src/rules/no-loss-of-precision.ts +++ b/packages/eslint-plugin/src/rules/no-loss-of-precision.ts @@ -11,10 +11,13 @@ const baseRule = getESLintCoreRule('no-loss-of-precision'); type Options = InferOptionsTypeFromRule>; type MessageIds = InferMessageIdsTypeFromRule>; +const defaultOptions: Options = []; + export default createRule({ name: 'no-loss-of-precision', meta: { type: 'problem', + defaultOptions, deprecated: true, docs: { description: 'Disallow literal numbers that lose precision', @@ -24,7 +27,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: [], }, - defaultOptions: [], + defaultOptions, create(context) { return baseRule.create(context); }, diff --git a/packages/eslint-plugin/src/rules/no-magic-numbers.ts b/packages/eslint-plugin/src/rules/no-magic-numbers.ts index 75c79f852444..b5d4bc073752 100644 --- a/packages/eslint-plugin/src/rules/no-magic-numbers.ts +++ b/packages/eslint-plugin/src/rules/no-magic-numbers.ts @@ -16,6 +16,19 @@ const baseRule = getESLintCoreRule('no-magic-numbers'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = [ + { + detectObjects: false, + enforceConst: false, + ignore: [], + ignoreArrayIndexes: false, + ignoreEnums: false, + ignoreNumericLiteralTypes: false, + ignoreReadonlyClassProperties: false, + ignoreTypeIndexes: false, + }, +]; + // Extend base schema with additional property to ignore TS numeric literal types const schema = deepMerge( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- https://github.com/microsoft/TypeScript/issues/17002 @@ -49,6 +62,7 @@ export default createRule({ name: 'no-magic-numbers', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Disallow magic numbers', extendsBaseRule: true, @@ -56,18 +70,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: [schema], }, - defaultOptions: [ - { - detectObjects: false, - enforceConst: false, - ignore: [], - ignoreArrayIndexes: false, - ignoreEnums: false, - ignoreNumericLiteralTypes: false, - ignoreReadonlyClassProperties: false, - ignoreTypeIndexes: false, - }, - ], + defaultOptions, create(context, [options]) { const rules = baseRule.create(context); diff --git a/packages/eslint-plugin/src/rules/no-restricted-imports.ts b/packages/eslint-plugin/src/rules/no-restricted-imports.ts index 78ad01f3f864..d946deb94e3e 100644 --- a/packages/eslint-plugin/src/rules/no-restricted-imports.ts +++ b/packages/eslint-plugin/src/rules/no-restricted-imports.ts @@ -27,6 +27,8 @@ const baseRule = getESLintCoreRule('no-restricted-imports'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = []; + // In some versions of eslint, the base rule has a completely incompatible schema // This helper function is to safely try to get parts of the schema. If it's not // possible, we'll fallback to less strict checks. @@ -233,6 +235,7 @@ export default createRule({ name: 'no-restricted-imports', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Disallow specified modules when loaded by `import`', extendsBaseRule: true, @@ -241,7 +244,7 @@ export default createRule({ messages: baseRule.meta.messages, schema, }, - defaultOptions: [], + defaultOptions, create(context) { const rules = baseRule.create(context); const { options } = context; diff --git a/packages/eslint-plugin/src/rules/no-useless-constructor.ts b/packages/eslint-plugin/src/rules/no-useless-constructor.ts index 9c45ec6534b0..eaf3eed480dc 100644 --- a/packages/eslint-plugin/src/rules/no-useless-constructor.ts +++ b/packages/eslint-plugin/src/rules/no-useless-constructor.ts @@ -15,6 +15,8 @@ const baseRule = getESLintCoreRule('no-useless-constructor'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = []; + /** * Check if method with accessibility is not useless */ @@ -47,6 +49,7 @@ export default createRule({ name: 'no-useless-constructor', meta: { type: 'problem', + defaultOptions, docs: { description: 'Disallow unnecessary constructors', extendsBaseRule: true, @@ -56,7 +59,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions: [], + defaultOptions, create(context) { const rules = baseRule.create(context); return { diff --git a/packages/eslint-plugin/src/rules/prefer-destructuring.ts b/packages/eslint-plugin/src/rules/prefer-destructuring.ts index 1ad1a749492a..958d0228b658 100644 --- a/packages/eslint-plugin/src/rules/prefer-destructuring.ts +++ b/packages/eslint-plugin/src/rules/prefer-destructuring.ts @@ -23,6 +23,20 @@ type Options = [BaseOptions[0], EnforcementOptions]; type MessageIds = InferMessageIdsTypeFromRule; +const defaultOptions: Options = [ + { + AssignmentExpression: { + array: true, + object: true, + }, + VariableDeclarator: { + array: true, + object: true, + }, + }, + {}, +]; + const destructuringTypeConfig: JSONSchema4 = { type: 'object', additionalProperties: false, @@ -71,6 +85,7 @@ export default createRule({ name: 'prefer-destructuring', meta: { type: 'suggestion', + defaultOptions, docs: { description: 'Require destructuring from arrays and/or objects', extendsBaseRule: true, @@ -81,19 +96,7 @@ export default createRule({ messages: baseRule.meta.messages, schema, }, - defaultOptions: [ - { - AssignmentExpression: { - array: true, - object: true, - }, - VariableDeclarator: { - array: true, - object: true, - }, - }, - {}, - ], + defaultOptions, create(context, [enabledTypes, options]) { const { enforceForDeclarationWithTypeAnnotation = false, From 3eca8be8ffb0361935bfd09cb4d55b25918a1719 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:35:01 -0800 Subject: [PATCH 05/18] Update init-declarations.ts --- packages/eslint-plugin/src/rules/init-declarations.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/init-declarations.ts b/packages/eslint-plugin/src/rules/init-declarations.ts index 1e1fb021547a..18629283c451 100644 --- a/packages/eslint-plugin/src/rules/init-declarations.ts +++ b/packages/eslint-plugin/src/rules/init-declarations.ts @@ -15,13 +15,10 @@ const baseRule = getESLintCoreRule('init-declarations'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = ['always']; - export default createRule({ name: 'init-declarations', meta: { type: 'suggestion', - defaultOptions, docs: { description: 'Require or disallow initialization in variable declarations', @@ -31,7 +28,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions, + defaultOptions: ['always'], create(context, [mode]) { // Make a custom context to adjust the loc of reports where the base // rule's behavior is a bit too aggressive with TS-specific syntax (namely, From 76b40beb8aab497b0c330323e1e60265e2f76581 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:35:26 -0800 Subject: [PATCH 06/18] Update max-params.ts --- packages/eslint-plugin/src/rules/max-params.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/max-params.ts b/packages/eslint-plugin/src/rules/max-params.ts index 159078b5270c..fe566bff824a 100644 --- a/packages/eslint-plugin/src/rules/max-params.ts +++ b/packages/eslint-plugin/src/rules/max-params.ts @@ -22,13 +22,10 @@ const baseRule = getESLintCoreRule('max-params'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = [{ countVoidThis: false, max: 3 }]; - export default createRule({ name: 'max-params', meta: { type: 'suggestion', - defaultOptions, docs: { description: 'Enforce a maximum number of parameters in function definitions', @@ -61,7 +58,7 @@ export default createRule({ }, ], }, - defaultOptions, + defaultOptions: [{ countVoidThis: false, max: 3 }], create(context, [{ countVoidThis }]) { const baseRules = baseRule.create(context); From da044329a4f82953e8ec8b0802b3925425d0dd0b Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:36:24 -0800 Subject: [PATCH 07/18] Update no-dupe-class-members.ts --- packages/eslint-plugin/src/rules/no-dupe-class-members.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-dupe-class-members.ts b/packages/eslint-plugin/src/rules/no-dupe-class-members.ts index fcc88aae8908..fe4a50c861d6 100644 --- a/packages/eslint-plugin/src/rules/no-dupe-class-members.ts +++ b/packages/eslint-plugin/src/rules/no-dupe-class-members.ts @@ -15,13 +15,11 @@ const baseRule = getESLintCoreRule('no-dupe-class-members'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = []; - export default createRule({ name: 'no-dupe-class-members', meta: { type: 'problem', - defaultOptions, + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow duplicate class members', extendsBaseRule: true, @@ -30,7 +28,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions, + defaultOptions: [], create(context) { const rules = baseRule.create(context); From 097e978500ee9fa7a483b71ac5f54a0449415fc5 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:36:52 -0800 Subject: [PATCH 08/18] Update init-declarations.ts --- packages/eslint-plugin/src/rules/init-declarations.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/src/rules/init-declarations.ts b/packages/eslint-plugin/src/rules/init-declarations.ts index 18629283c451..16b3f87e713c 100644 --- a/packages/eslint-plugin/src/rules/init-declarations.ts +++ b/packages/eslint-plugin/src/rules/init-declarations.ts @@ -19,6 +19,7 @@ export default createRule({ name: 'init-declarations', meta: { type: 'suggestion', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Require or disallow initialization in variable declarations', From 8bda23ce62850548ba649bdc2b8628caeeffe85f Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:37:00 -0800 Subject: [PATCH 09/18] Update max-params.ts --- packages/eslint-plugin/src/rules/max-params.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/src/rules/max-params.ts b/packages/eslint-plugin/src/rules/max-params.ts index fe566bff824a..acd02f052d15 100644 --- a/packages/eslint-plugin/src/rules/max-params.ts +++ b/packages/eslint-plugin/src/rules/max-params.ts @@ -26,6 +26,7 @@ export default createRule({ name: 'max-params', meta: { type: 'suggestion', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Enforce a maximum number of parameters in function definitions', From 40acfda7ed8a0c170a1b03c2e3165ca13b5c5841 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:37:50 -0800 Subject: [PATCH 10/18] Update no-loop-func.ts --- packages/eslint-plugin/src/rules/no-loop-func.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-loop-func.ts b/packages/eslint-plugin/src/rules/no-loop-func.ts index 342c9fde7557..0a5fde3dc173 100644 --- a/packages/eslint-plugin/src/rules/no-loop-func.ts +++ b/packages/eslint-plugin/src/rules/no-loop-func.ts @@ -15,13 +15,11 @@ const baseRule = getESLintCoreRule('no-loop-func'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = []; - export default createRule({ name: 'no-loop-func', meta: { type: 'suggestion', - defaultOptions, + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow function declarations that contain unsafe references inside loop statements', @@ -31,7 +29,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: [], }, - defaultOptions, + defaultOptions: [], create(context) { const SKIPPED_IIFE_NODES = new Set< | TSESTree.ArrowFunctionExpression From d1eb53e62c72f02d50957564bcea6752551cb531 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:38:05 -0800 Subject: [PATCH 11/18] Update no-loss-of-precision.ts --- packages/eslint-plugin/src/rules/no-loss-of-precision.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-loss-of-precision.ts b/packages/eslint-plugin/src/rules/no-loss-of-precision.ts index 37c5545ca896..1fad4ba75799 100644 --- a/packages/eslint-plugin/src/rules/no-loss-of-precision.ts +++ b/packages/eslint-plugin/src/rules/no-loss-of-precision.ts @@ -11,13 +11,11 @@ const baseRule = getESLintCoreRule('no-loss-of-precision'); type Options = InferOptionsTypeFromRule>; type MessageIds = InferMessageIdsTypeFromRule>; -const defaultOptions: Options = []; - export default createRule({ name: 'no-loss-of-precision', meta: { type: 'problem', - defaultOptions, + // defaultOptions, -- base rule does not use defaultOptions deprecated: true, docs: { description: 'Disallow literal numbers that lose precision', @@ -27,7 +25,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: [], }, - defaultOptions, + defaultOptions: [], create(context) { return baseRule.create(context); }, From 6ec4f7820cce2b657093e1c9b8ace5fdf3c750e8 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:38:52 -0800 Subject: [PATCH 12/18] Update no-magic-numbers.ts --- .../src/rules/no-magic-numbers.ts | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-magic-numbers.ts b/packages/eslint-plugin/src/rules/no-magic-numbers.ts index b5d4bc073752..20a5625fad81 100644 --- a/packages/eslint-plugin/src/rules/no-magic-numbers.ts +++ b/packages/eslint-plugin/src/rules/no-magic-numbers.ts @@ -16,19 +16,6 @@ const baseRule = getESLintCoreRule('no-magic-numbers'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = [ - { - detectObjects: false, - enforceConst: false, - ignore: [], - ignoreArrayIndexes: false, - ignoreEnums: false, - ignoreNumericLiteralTypes: false, - ignoreReadonlyClassProperties: false, - ignoreTypeIndexes: false, - }, -]; - // Extend base schema with additional property to ignore TS numeric literal types const schema = deepMerge( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- https://github.com/microsoft/TypeScript/issues/17002 @@ -62,7 +49,7 @@ export default createRule({ name: 'no-magic-numbers', meta: { type: 'suggestion', - defaultOptions, + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow magic numbers', extendsBaseRule: true, @@ -70,7 +57,18 @@ export default createRule({ messages: baseRule.meta.messages, schema: [schema], }, - defaultOptions, + defaultOptions: [ + { + detectObjects: false, + enforceConst: false, + ignore: [], + ignoreArrayIndexes: false, + ignoreEnums: false, + ignoreNumericLiteralTypes: false, + ignoreReadonlyClassProperties: false, + ignoreTypeIndexes: false, + }, + ], create(context, [options]) { const rules = baseRule.create(context); From 2da4fc4363ec982bcc94f9b24ae230c5cb890bb8 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sun, 17 Nov 2024 14:09:19 +1030 Subject: [PATCH 13/18] Discard changes to packages/eslint-plugin/src/rules/no-restricted-imports.ts --- packages/eslint-plugin/src/rules/no-restricted-imports.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-restricted-imports.ts b/packages/eslint-plugin/src/rules/no-restricted-imports.ts index d946deb94e3e..78ad01f3f864 100644 --- a/packages/eslint-plugin/src/rules/no-restricted-imports.ts +++ b/packages/eslint-plugin/src/rules/no-restricted-imports.ts @@ -27,8 +27,6 @@ const baseRule = getESLintCoreRule('no-restricted-imports'); export type Options = InferOptionsTypeFromRule; export type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = []; - // In some versions of eslint, the base rule has a completely incompatible schema // This helper function is to safely try to get parts of the schema. If it's not // possible, we'll fallback to less strict checks. @@ -235,7 +233,6 @@ export default createRule({ name: 'no-restricted-imports', meta: { type: 'suggestion', - defaultOptions, docs: { description: 'Disallow specified modules when loaded by `import`', extendsBaseRule: true, @@ -244,7 +241,7 @@ export default createRule({ messages: baseRule.meta.messages, schema, }, - defaultOptions, + defaultOptions: [], create(context) { const rules = baseRule.create(context); const { options } = context; From 54cd570feeb1e68399e109f8b80d2c2c37a6d6c1 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:39:32 -0800 Subject: [PATCH 14/18] Update no-restricted-imports.ts --- packages/eslint-plugin/src/rules/no-restricted-imports.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/src/rules/no-restricted-imports.ts b/packages/eslint-plugin/src/rules/no-restricted-imports.ts index 78ad01f3f864..e8550856c2c2 100644 --- a/packages/eslint-plugin/src/rules/no-restricted-imports.ts +++ b/packages/eslint-plugin/src/rules/no-restricted-imports.ts @@ -233,6 +233,7 @@ export default createRule({ name: 'no-restricted-imports', meta: { type: 'suggestion', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow specified modules when loaded by `import`', extendsBaseRule: true, From 28cc05b579fdf2412680644463e635436fa61be8 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sun, 17 Nov 2024 14:10:07 +1030 Subject: [PATCH 15/18] Discard changes to packages/eslint-plugin/src/rules/no-useless-constructor.ts --- packages/eslint-plugin/src/rules/no-useless-constructor.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-useless-constructor.ts b/packages/eslint-plugin/src/rules/no-useless-constructor.ts index eaf3eed480dc..9c45ec6534b0 100644 --- a/packages/eslint-plugin/src/rules/no-useless-constructor.ts +++ b/packages/eslint-plugin/src/rules/no-useless-constructor.ts @@ -15,8 +15,6 @@ const baseRule = getESLintCoreRule('no-useless-constructor'); type Options = InferOptionsTypeFromRule; type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = []; - /** * Check if method with accessibility is not useless */ @@ -49,7 +47,6 @@ export default createRule({ name: 'no-useless-constructor', meta: { type: 'problem', - defaultOptions, docs: { description: 'Disallow unnecessary constructors', extendsBaseRule: true, @@ -59,7 +56,7 @@ export default createRule({ messages: baseRule.meta.messages, schema: baseRule.meta.schema, }, - defaultOptions, + defaultOptions: [], create(context) { const rules = baseRule.create(context); return { From c88a353fc67281a0b01b59628c5b6b140c61fe47 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:40:17 -0800 Subject: [PATCH 16/18] Update no-useless-constructor.ts --- packages/eslint-plugin/src/rules/no-useless-constructor.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/src/rules/no-useless-constructor.ts b/packages/eslint-plugin/src/rules/no-useless-constructor.ts index 9c45ec6534b0..a91525ab742c 100644 --- a/packages/eslint-plugin/src/rules/no-useless-constructor.ts +++ b/packages/eslint-plugin/src/rules/no-useless-constructor.ts @@ -47,6 +47,7 @@ export default createRule({ name: 'no-useless-constructor', meta: { type: 'problem', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow unnecessary constructors', extendsBaseRule: true, From adc19f42d90c1dacb2d937abf48dea15d5df0129 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sun, 17 Nov 2024 14:10:32 +1030 Subject: [PATCH 17/18] Discard changes to packages/eslint-plugin/src/rules/prefer-destructuring.ts --- .../src/rules/prefer-destructuring.ts | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/eslint-plugin/src/rules/prefer-destructuring.ts b/packages/eslint-plugin/src/rules/prefer-destructuring.ts index 958d0228b658..1ad1a749492a 100644 --- a/packages/eslint-plugin/src/rules/prefer-destructuring.ts +++ b/packages/eslint-plugin/src/rules/prefer-destructuring.ts @@ -23,20 +23,6 @@ type Options = [BaseOptions[0], EnforcementOptions]; type MessageIds = InferMessageIdsTypeFromRule; -const defaultOptions: Options = [ - { - AssignmentExpression: { - array: true, - object: true, - }, - VariableDeclarator: { - array: true, - object: true, - }, - }, - {}, -]; - const destructuringTypeConfig: JSONSchema4 = { type: 'object', additionalProperties: false, @@ -85,7 +71,6 @@ export default createRule({ name: 'prefer-destructuring', meta: { type: 'suggestion', - defaultOptions, docs: { description: 'Require destructuring from arrays and/or objects', extendsBaseRule: true, @@ -96,7 +81,19 @@ export default createRule({ messages: baseRule.meta.messages, schema, }, - defaultOptions, + defaultOptions: [ + { + AssignmentExpression: { + array: true, + object: true, + }, + VariableDeclarator: { + array: true, + object: true, + }, + }, + {}, + ], create(context, [enabledTypes, options]) { const { enforceForDeclarationWithTypeAnnotation = false, From 0537ef637442ccecf9ad57ba2a484dde959b7b2c Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sat, 16 Nov 2024 19:40:41 -0800 Subject: [PATCH 18/18] Update prefer-destructuring.ts --- packages/eslint-plugin/src/rules/prefer-destructuring.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/src/rules/prefer-destructuring.ts b/packages/eslint-plugin/src/rules/prefer-destructuring.ts index 1ad1a749492a..d09a510a5152 100644 --- a/packages/eslint-plugin/src/rules/prefer-destructuring.ts +++ b/packages/eslint-plugin/src/rules/prefer-destructuring.ts @@ -71,6 +71,7 @@ export default createRule({ name: 'prefer-destructuring', meta: { type: 'suggestion', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Require destructuring from arrays and/or objects', extendsBaseRule: true, 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