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..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', 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', 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..fe4a50c861d6 100644 --- a/packages/eslint-plugin/src/rules/no-dupe-class-members.ts +++ b/packages/eslint-plugin/src/rules/no-dupe-class-members.ts @@ -19,6 +19,7 @@ export default createRule({ name: 'no-dupe-class-members', meta: { type: 'problem', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow duplicate class members', extendsBaseRule: true, 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..0a5fde3dc173 100644 --- a/packages/eslint-plugin/src/rules/no-loop-func.ts +++ b/packages/eslint-plugin/src/rules/no-loop-func.ts @@ -19,6 +19,7 @@ export default createRule({ name: 'no-loop-func', meta: { type: 'suggestion', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow function declarations that contain unsafe references inside loop statements', 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..1fad4ba75799 100644 --- a/packages/eslint-plugin/src/rules/no-loss-of-precision.ts +++ b/packages/eslint-plugin/src/rules/no-loss-of-precision.ts @@ -15,6 +15,7 @@ export default createRule({ name: 'no-loss-of-precision', meta: { type: 'problem', + // defaultOptions, -- base rule does not use defaultOptions deprecated: true, docs: { description: 'Disallow literal numbers that lose precision', diff --git a/packages/eslint-plugin/src/rules/no-magic-numbers.ts b/packages/eslint-plugin/src/rules/no-magic-numbers.ts index 75c79f852444..20a5625fad81 100644 --- a/packages/eslint-plugin/src/rules/no-magic-numbers.ts +++ b/packages/eslint-plugin/src/rules/no-magic-numbers.ts @@ -49,6 +49,7 @@ export default createRule({ name: 'no-magic-numbers', meta: { type: 'suggestion', + // defaultOptions, -- base rule does not use defaultOptions docs: { description: 'Disallow magic numbers', extendsBaseRule: true, 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, 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/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, 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, diff --git a/packages/utils/src/eslint-utils/RuleCreator.ts b/packages/utils/src/eslint-utils/RuleCreator.ts index 293671649c6e..cd06aee6231f 100644 --- a/packages/utils/src/eslint-utils/RuleCreator.ts +++ b/packages/utils/src/eslint-utils/RuleCreator.ts @@ -14,9 +14,10 @@ export type NamedCreateRuleMetaDocs = Omit; export type NamedCreateRuleMeta< MessageIds extends string, PluginDocs = unknown, + Options extends readonly 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; } diff --git a/packages/utils/src/ts-eslint/Rule.ts b/packages/utils/src/ts-eslint/Rule.ts index a48e4c0faf00..3b281090606b 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, + PluginDocs = unknown, + Options extends readonly unknown[] = [], +> { /** * True if the rule is deprecated, false otherwise */ @@ -65,12 +69,22 @@ 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'; + + /** + * 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; } export interface RuleMetaDataWithDocs< MessageIds extends string, PluginDocs = unknown, -> extends RuleMetaData { + Options extends readonly unknown[] = [], +> extends RuleMetaData { /** * Documentation for the rule */ @@ -655,7 +669,7 @@ export interface RuleModule< /** * Metadata about the rule */ - meta: RuleMetaData; + meta: RuleMetaData; } export type AnyRuleModule = RuleModule; @@ -670,7 +684,7 @@ export interface RuleModuleWithMetaDocs< /** * Metadata about the rule */ - meta: RuleMetaDataWithDocs; + meta: RuleMetaDataWithDocs; } export type AnyRuleModuleWithMetaDocs = RuleModuleWithMetaDocs< 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