From df2b8322852fe28a8745f851c995f2dd39afaba3 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sun, 21 Jul 2024 20:24:13 -0400 Subject: [PATCH 1/5] feat(rule-tester): switched to flat config --- .../rules/no-poorly-typed-ts-props.test.ts | 10 +- ...elative-paths-to-internal-packages.test.ts | 4 +- .../no-typescript-default-import.test.ts | 7 +- .../tests/rules/no-typescript-estree.test.ts | 7 +- .../rules/plugin-test-formatting.test.ts | 38 +- .../tests/rules/prefer-ast-types-enum.test.ts | 7 +- .../tests/eslint-rules/arrow-parens.test.ts | 4 +- .../tests/eslint-rules/no-dupe-args.test.ts | 9 +- .../eslint-rules/no-implicit-globals.test.ts | 8 +- .../no-restricted-globals.test.ts | 9 +- .../tests/eslint-rules/no-undef.test.ts | 111 ++-- .../tests/eslint-rules/prefer-const.test.ts | 4 +- .../tests/eslint-rules/strict.test.ts | 14 +- .../adjacent-overload-signatures.test.ts | 8 +- .../tests/rules/array-type.test.ts | 4 +- .../tests/rules/await-thenable.test.ts | 10 +- .../tests/rules/ban-ts-comment.test.ts | 4 +- .../tests/rules/ban-tslint-comment.test.ts | 4 +- .../class-literal-property-style.test.ts | 4 +- .../class-methods-use-this-core.test.ts | 112 ++-- .../class-methods-use-this.test.ts | 4 +- .../consistent-generic-constructors.test.ts | 4 +- .../consistent-indexed-object-style.test.ts | 4 +- .../tests/rules/consistent-return.test.ts | 10 +- .../rules/consistent-type-assertions.test.ts | 6 +- .../rules/consistent-type-definitions.test.ts | 4 +- .../rules/consistent-type-exports.test.ts | 11 +- .../rules/consistent-type-imports.test.ts | 40 +- .../tests/rules/default-param-last.test.ts | 4 +- .../tests/rules/dot-notation.test.ts | 31 +- .../explicit-function-return-type.test.ts | 84 ++- .../explicit-member-accessibility.test.ts | 4 +- .../explicit-module-boundary-types.test.ts | 16 +- .../tests/rules/init-declarations.test.ts | 34 +- .../tests/rules/max-params.test.ts | 4 +- .../tests/rules/member-ordering.test.ts | 4 +- ...habetically-case-insensitive-order.test.ts | 4 +- ...mber-ordering-alphabetically-order.test.ts | 4 +- ...ing-natural-case-insensitive-order.test.ts | 4 +- .../member-ordering-natural-order.test.ts | 4 +- .../member-ordering-optionalMembers.test.ts | 8 +- .../rules/method-signature-style.test.ts | 4 +- .../cases/createTestCases.ts | 22 +- .../naming-convention.test.ts | 74 ++- .../tests/rules/no-array-constructor.test.ts | 4 +- .../tests/rules/no-array-delete.test.ts | 9 +- .../tests/rules/no-base-to-string.test.ts | 10 +- .../no-confusing-non-null-assertion.test.ts | 4 +- .../no-confusing-void-expression.test.ts | 9 +- .../tests/rules/no-dupe-class-members.test.ts | 4 +- .../rules/no-duplicate-enum-values.test.ts | 4 +- .../no-duplicate-type-constituents.test.ts | 9 +- .../tests/rules/no-dynamic-delete.test.ts | 9 +- .../tests/rules/no-empty-function.test.ts | 4 +- .../tests/rules/no-empty-interface.test.ts | 4 +- .../tests/rules/no-empty-object-type.test.ts | 4 +- .../tests/rules/no-explicit-any.test.ts | 21 +- .../rules/no-extra-non-null-assertion.test.ts | 4 +- .../tests/rules/no-extraneous-class.test.ts | 4 +- .../tests/rules/no-floating-promises.test.ts | 10 +- .../tests/rules/no-for-in-array.test.ts | 10 +- .../tests/rules/no-implied-eval.test.ts | 11 +- .../rules/no-import-type-side-effects.test.ts | 4 +- .../tests/rules/no-inferrable-types.test.ts | 41 +- .../tests/rules/no-invalid-this.test.ts | 19 +- .../tests/rules/no-invalid-void-type.test.ts | 4 +- .../tests/rules/no-loop-func.test.ts | 82 +-- .../tests/rules/no-loss-of-precision.test.ts | 4 +- .../tests/rules/no-magic-numbers.test.ts | 4 +- .../no-meaningless-void-operator.test.ts | 10 +- .../tests/rules/no-misused-new.test.ts | 4 +- .../tests/rules/no-misused-promises.test.ts | 66 +- .../tests/rules/no-mixed-enums.test.ts | 9 +- .../tests/rules/no-namespace.test.ts | 4 +- ...n-null-asserted-nullish-coalescing.test.ts | 4 +- ...o-non-null-asserted-optional-chain.test.ts | 4 +- .../tests/rules/no-non-null-assertion.test.ts | 4 +- .../tests/rules/no-redeclare.test.ts | 54 +- .../no-redundant-type-constituents.test.ts | 10 +- .../tests/rules/no-require-imports.test.ts | 7 +- .../tests/rules/no-restricted-imports.test.ts | 4 +- .../tests/rules/no-restricted-types.test.ts | 4 +- .../rules/no-shadow/no-shadow-eslint.test.ts | 150 ++--- .../tests/rules/no-shadow/no-shadow.test.ts | 49 +- .../tests/rules/no-this-alias.test.ts | 4 +- .../tests/rules/no-type-alias.test.ts | 4 +- ...nnecessary-boolean-literal-compare.test.ts | 10 +- .../rules/no-unnecessary-condition.test.ts | 95 +-- ...sary-parameter-property-assignment.test.ts | 7 +- .../rules/no-unnecessary-qualifier.test.ts | 10 +- ...no-unnecessary-template-expression.test.ts | 9 +- .../no-unnecessary-type-arguments.test.ts | 10 +- .../no-unnecessary-type-assertion.test.ts | 44 +- .../no-unnecessary-type-constraint.test.ts | 63 +- .../no-unnecessary-type-parameters.test.ts | 10 +- .../tests/rules/no-unsafe-argument.test.ts | 9 +- .../tests/rules/no-unsafe-assignment.test.ts | 47 +- .../tests/rules/no-unsafe-call.test.ts | 11 +- .../no-unsafe-declaration-merging.test.ts | 10 +- .../rules/no-unsafe-enum-comparison.test.ts | 10 +- .../rules/no-unsafe-function-type.test.ts | 4 +- .../rules/no-unsafe-member-access.test.ts | 11 +- .../tests/rules/no-unsafe-return.test.ts | 11 +- .../tests/rules/no-unsafe-unary-minus.test.ts | 10 +- .../tests/rules/no-unused-expressions.test.ts | 15 +- .../no-unused-vars-eslint.test.ts | 368 ++++++----- .../no-unused-vars/no-unused-vars.test.ts | 87 +-- .../tests/rules/no-use-before-define.test.ts | 183 +++--- .../rules/no-useless-constructor.test.ts | 8 +- .../rules/no-useless-empty-export.test.ts | 9 +- .../tests/rules/no-var-requires.test.ts | 4 +- .../rules/no-wrapper-object-types.test.ts | 4 +- .../non-nullable-type-assertion-style.test.ts | 23 +- .../tests/rules/only-throw-error.test.ts | 11 +- .../tests/rules/parameter-properties.test.ts | 4 +- .../tests/rules/prefer-as-const.test.ts | 4 +- .../tests/rules/prefer-destructuring.test.ts | 10 +- .../rules/prefer-enum-initializers.test.ts | 4 +- .../tests/rules/prefer-find.test.ts | 9 +- .../tests/rules/prefer-for-of.test.ts | 4 +- .../tests/rules/prefer-function-type.test.ts | 8 +- .../tests/rules/prefer-includes.test.ts | 9 +- .../rules/prefer-literal-enum-member.test.ts | 4 +- .../rules/prefer-namespace-keyword.test.ts | 4 +- .../rules/prefer-nullish-coalescing.test.ts | 50 +- .../rules/prefer-optional-chain/base-cases.ts | 2 +- .../prefer-optional-chain.test.ts | 17 +- .../prefer-promise-reject-errors.test.ts | 10 +- .../prefer-readonly-parameter-types.test.ts | 17 +- .../tests/rules/prefer-readonly.test.ts | 10 +- .../prefer-reduce-type-parameter.test.ts | 10 +- .../tests/rules/prefer-regexp-exec.test.ts | 9 +- .../rules/prefer-return-this-type.test.ts | 9 +- .../prefer-string-starts-ends-with.test.ts | 9 +- .../rules/prefer-ts-expect-error.test.ts | 4 +- .../rules/promise-function-async.test.ts | 10 +- .../rules/require-array-sort-compare.test.ts | 9 +- .../tests/rules/require-await.test.ts | 10 +- .../rules/restrict-plus-operands.test.ts | 9 +- .../restrict-template-expressions.test.ts | 9 +- .../tests/rules/return-await.test.ts | 14 +- .../rules/sort-type-constituents.test.ts | 13 +- .../rules/strict-boolean-expressions.test.ts | 21 +- .../rules/switch-exhaustiveness-check.test.ts | 9 +- .../rules/triple-slash-reference.test.ts | 7 +- .../eslint-plugin/tests/rules/typedef.test.ts | 10 +- .../tests/rules/unbound-method.test.ts | 14 +- .../tests/rules/unified-signatures.test.ts | 2 +- ...unknown-in-catch-callback-variable.test.ts | 9 +- .../tests/util/getWrappedCode.test.ts | 9 +- .../tests/util/getWrappingFixer.test.ts | 9 +- .../tests/util/isNodeEqual.test.ts | 9 +- packages/rule-tester/src/RuleTester.ts | 167 +++-- .../rule-tester/src/types/RuleTesterConfig.ts | 27 +- .../rule-tester/src/types/ValidTestCase.ts | 36 +- packages/rule-tester/src/types/index.ts | 4 +- .../rule-tester/src/utils/config-schema.ts | 91 --- .../rule-tester/src/utils/config-validator.ts | 67 +- .../src/utils/flat-config-schema.ts | 583 ++++++++++++++++++ .../src/utils/omitCustomConfigProperties.ts | 11 + packages/rule-tester/src/utils/severity.ts | 43 ++ .../src/utils/validationHelpers.ts | 12 +- packages/rule-tester/tests/RuleTester.test.ts | 248 +++++--- .../tests/flat-config-schema.test.ts | 301 +++++++++ packages/utils/src/eslint-utils/deepMerge.ts | 2 +- packages/utils/src/ts-eslint/Linter.ts | 5 +- packages/utils/src/ts-eslint/RuleTester.ts | 27 + 167 files changed, 2755 insertions(+), 1791 deletions(-) delete mode 100644 packages/rule-tester/src/utils/config-schema.ts create mode 100644 packages/rule-tester/src/utils/flat-config-schema.ts create mode 100644 packages/rule-tester/src/utils/omitCustomConfigProperties.ts create mode 100644 packages/rule-tester/src/utils/severity.ts create mode 100644 packages/rule-tester/tests/flat-config-schema.test.ts diff --git a/packages/eslint-plugin-internal/tests/rules/no-poorly-typed-ts-props.test.ts b/packages/eslint-plugin-internal/tests/rules/no-poorly-typed-ts-props.test.ts index 5e75c5e2b7e5..4e9b2a60ce25 100644 --- a/packages/eslint-plugin-internal/tests/rules/no-poorly-typed-ts-props.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/no-poorly-typed-ts-props.test.ts @@ -5,11 +5,11 @@ import rule from '../../src/rules/no-poorly-typed-ts-props'; import { getFixturesRootDir } from '../RuleTester'; const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - sourceType: 'module', + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: getFixturesRootDir(), + }, }, }); diff --git a/packages/eslint-plugin-internal/tests/rules/no-relative-paths-to-internal-packages.test.ts b/packages/eslint-plugin-internal/tests/rules/no-relative-paths-to-internal-packages.test.ts index 2e1cbf99e216..0f48ae9a2c45 100644 --- a/packages/eslint-plugin-internal/tests/rules/no-relative-paths-to-internal-packages.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/no-relative-paths-to-internal-packages.test.ts @@ -5,9 +5,7 @@ import rule, { PACKAGES_DIR, } from '../../src/rules/no-relative-paths-to-internal-packages'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('no-relative-paths-to-internal-packages', rule, { valid: [ diff --git a/packages/eslint-plugin-internal/tests/rules/no-typescript-default-import.test.ts b/packages/eslint-plugin-internal/tests/rules/no-typescript-default-import.test.ts index 45590e5012de..94ab1f566266 100644 --- a/packages/eslint-plugin-internal/tests/rules/no-typescript-default-import.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/no-typescript-default-import.test.ts @@ -2,12 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-typescript-default-import'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - sourceType: 'module', - }, -}); +const ruleTester = new RuleTester(); ruleTester.run('no-typescript-default-import', rule, { valid: [ diff --git a/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts b/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts index 46eb2edabbe0..8c4bcda6fa82 100644 --- a/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts @@ -2,12 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-typescript-estree-import'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - sourceType: 'module', - }, -}); +const ruleTester = new RuleTester(); ruleTester.run('no-typescript-estree-import', rule, { valid: [ diff --git a/packages/eslint-plugin-internal/tests/rules/plugin-test-formatting.test.ts b/packages/eslint-plugin-internal/tests/rules/plugin-test-formatting.test.ts index 280d3fd67f8e..290673eb56e0 100644 --- a/packages/eslint-plugin-internal/tests/rules/plugin-test-formatting.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/plugin-test-formatting.test.ts @@ -4,11 +4,11 @@ import rule from '../../src/rules/plugin-test-formatting'; import { getFixturesRootDir } from '../RuleTester'; const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - sourceType: 'module', + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: getFixturesRootDir(), + }, }, }); @@ -160,7 +160,7 @@ const test2 = { // TODO - figure out how to handle this pattern ` -import { TSESLint } from '@typescript-eslint/utils'; +import { InvalidTestCase } from '@typescript-eslint/rule-tester'; const test = [ { @@ -169,7 +169,7 @@ const test = [ { code: 'const badlyFormatted = "code2"', }, -].map>(test => ({ +].map>(test => ({ code: test.code, errors: [], })); @@ -724,9 +724,9 @@ const test: RunTests = { }, { code: ` -import { TSESLint } from '@typescript-eslint/utils'; +import { RunTests } from '@typescript-eslint/rule-tester'; -const test: TSESLint.RunTests<'', []> = { +const test: RunTests<'', []> = { valid: [ 'const badlyFormatted = "code"', { @@ -742,9 +742,9 @@ const test: TSESLint.RunTests<'', []> = { }; `, output: ` -import { TSESLint } from '@typescript-eslint/utils'; +import { RunTests } from '@typescript-eslint/rule-tester'; -const test: TSESLint.RunTests<'', []> = { +const test: RunTests<'', []> = { valid: [ "const badlyFormatted = 'code';", { @@ -773,16 +773,16 @@ const test: TSESLint.RunTests<'', []> = { }, { code: ` -import { TSESLint } from '@typescript-eslint/utils'; +import { ValidTestCase } from '@typescript-eslint/rule-tester'; -const test: TSESLint.ValidTestCase<[]> = { +const test: ValidTestCase<[]> = { code: 'const badlyFormatted = "code"', }; `, output: ` -import { TSESLint } from '@typescript-eslint/utils'; +import { ValidTestCase } from '@typescript-eslint/rule-tester'; -const test: TSESLint.ValidTestCase<[]> = { +const test: ValidTestCase<[]> = { code: "const badlyFormatted = 'code';", }; `, @@ -794,9 +794,9 @@ const test: TSESLint.ValidTestCase<[]> = { }, { code: ` -import { TSESLint } from '@typescript-eslint/utils'; +import { InvalidTestCase } from '@typescript-eslint/rule-tester'; -const test: TSESLint.InvalidTestCase<'', []> = { +const test: InvalidTestCase<'', []> = { code: 'const badlyFormatted = "code1"', errors: [ { @@ -815,9 +815,9 @@ const test: TSESLint.InvalidTestCase<'', []> = { }; `, output: ` -import { TSESLint } from '@typescript-eslint/utils'; +import { InvalidTestCase } from '@typescript-eslint/rule-tester'; -const test: TSESLint.InvalidTestCase<'', []> = { +const test: InvalidTestCase<'', []> = { code: "const badlyFormatted = 'code1';", errors: [ { diff --git a/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts b/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts index 44f9f6118bac..78052be73451 100644 --- a/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts @@ -4,12 +4,7 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/prefer-ast-types-enum'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - sourceType: 'module', - }, -}); +const ruleTester = new RuleTester(); ruleTester.run('prefer-ast-types-enum', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/eslint-rules/arrow-parens.test.ts b/packages/eslint-plugin/tests/eslint-rules/arrow-parens.test.ts index 825eceb29d97..9f27b18b35ec 100644 --- a/packages/eslint-plugin/tests/eslint-rules/arrow-parens.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/arrow-parens.test.ts @@ -4,9 +4,7 @@ import { getESLintCoreRule } from '../../src/util/getESLintCoreRule'; const rule = getESLintCoreRule('arrow-parens'); -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('arrow-parens', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/eslint-rules/no-dupe-args.test.ts b/packages/eslint-plugin/tests/eslint-rules/no-dupe-args.test.ts index 054d19140bf7..bec2b2b861b8 100644 --- a/packages/eslint-plugin/tests/eslint-rules/no-dupe-args.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/no-dupe-args.test.ts @@ -5,12 +5,11 @@ import { getESLintCoreRule } from '../../src/util/getESLintCoreRule'; const rule = getESLintCoreRule('no-dupe-args'); const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: {}, + languageOptions: { + parserOptions: { + ecmaVersion: 6, + }, }, - parser: '@typescript-eslint/parser', }); ruleTester.run('no-dupe-args', rule, { diff --git a/packages/eslint-plugin/tests/eslint-rules/no-implicit-globals.test.ts b/packages/eslint-plugin/tests/eslint-rules/no-implicit-globals.test.ts index ba4d5cc1a430..d6a28aac02bc 100644 --- a/packages/eslint-plugin/tests/eslint-rules/no-implicit-globals.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/no-implicit-globals.test.ts @@ -4,11 +4,11 @@ import { getESLintCoreRule } from '../../src/util/getESLintCoreRule'; const rule = getESLintCoreRule('no-implicit-globals'); const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', + languageOptions: { + parserOptions: { + ecmaVersion: 6, + }, }, - parser: '@typescript-eslint/parser', }); ruleTester.run('no-implicit-globals', rule, { diff --git a/packages/eslint-plugin/tests/eslint-rules/no-restricted-globals.test.ts b/packages/eslint-plugin/tests/eslint-rules/no-restricted-globals.test.ts index b015020fa5e1..7858c45e661e 100644 --- a/packages/eslint-plugin/tests/eslint-rules/no-restricted-globals.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/no-restricted-globals.test.ts @@ -5,12 +5,11 @@ import { getESLintCoreRule } from '../../src/util/getESLintCoreRule'; const rule = getESLintCoreRule('no-restricted-globals'); const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: {}, + languageOptions: { + parserOptions: { + ecmaVersion: 6, + }, }, - parser: '@typescript-eslint/parser', }); ruleTester.run('no-restricted-globals', rule, { diff --git a/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts b/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts index a6ce89cc8d24..724f945f11f4 100644 --- a/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts @@ -5,12 +5,11 @@ import { getESLintCoreRule } from '../../src/util/getESLintCoreRule'; const rule = getESLintCoreRule('no-undef'); const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: {}, + languageOptions: { + parserOptions: { + ecmaVersion: 6, + }, }, - parser: '@typescript-eslint/parser', }); ruleTester.run('no-undef', rule, { @@ -47,8 +46,10 @@ const links = document.querySelectorAll(selector) as NodeListOf; /*globals document, selector */ const links = document.querySelectorAll(selector) as NodeListOf; `, - parserOptions: { - lib: ['dom'], + languageOptions: { + parserOptions: { + lib: ['dom'], + }, }, }, // https://github.com/eslint/typescript-eslint-parser/issues/437 @@ -155,9 +156,11 @@ let test: unknown; function Foo() {} ; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -167,9 +170,11 @@ type T = 1; function Foo() {} />; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -179,9 +184,11 @@ const x = 1; function Foo() {} ; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -191,9 +198,11 @@ const x = {}; function Foo() {} ; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -203,9 +212,11 @@ const x = {}; function Foo() {} {x}; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -214,9 +225,11 @@ function Foo() {} code: `
; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -224,9 +237,11 @@ function Foo() {} code: ` ; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -301,9 +316,11 @@ class Foo { }, { code: ';', - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, errors: [ @@ -322,9 +339,11 @@ class Foo { function Foo() {} ; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, errors: [ @@ -343,9 +362,11 @@ function Foo() {} function Foo() {} ; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, errors: [ @@ -364,9 +385,11 @@ function Foo() {} function Foo() {} />; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, errors: [ @@ -385,9 +408,11 @@ function Foo() {} function Foo() {} {x}; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, errors: [ diff --git a/packages/eslint-plugin/tests/eslint-rules/prefer-const.test.ts b/packages/eslint-plugin/tests/eslint-rules/prefer-const.test.ts index e9d8350ff097..5223be374c4a 100644 --- a/packages/eslint-plugin/tests/eslint-rules/prefer-const.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/prefer-const.test.ts @@ -4,9 +4,7 @@ import { getESLintCoreRule } from '../../src/util/getESLintCoreRule'; const rule = getESLintCoreRule('prefer-const'); -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('prefer-const', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/eslint-rules/strict.test.ts b/packages/eslint-plugin/tests/eslint-rules/strict.test.ts index a3146c36d7bd..a953ee859517 100644 --- a/packages/eslint-plugin/tests/eslint-rules/strict.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/strict.test.ts @@ -5,11 +5,11 @@ import { getESLintCoreRule } from '../../src/util/getESLintCoreRule'; const rule = getESLintCoreRule('strict'); const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', + languageOptions: { + parserOptions: { + ecmaVersion: 6, + }, }, - parser: '@typescript-eslint/parser', }); ruleTester.run('strict', rule, { @@ -33,8 +33,10 @@ window.whatevs = { }, }; `, - parserOptions: { - sourceType: 'script', + languageOptions: { + parserOptions: { + sourceType: 'script', + }, }, errors: [ { diff --git a/packages/eslint-plugin/tests/rules/adjacent-overload-signatures.test.ts b/packages/eslint-plugin/tests/rules/adjacent-overload-signatures.test.ts index e834112f6ecc..3839469351ce 100644 --- a/packages/eslint-plugin/tests/rules/adjacent-overload-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/adjacent-overload-signatures.test.ts @@ -2,9 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/adjacent-overload-signatures'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('adjacent-overload-signatures', rule, { valid: [ @@ -15,7 +13,7 @@ function error(b: number); function error(ab: string | number) {} export { error }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { parserOptions: { sourceType: 'module' } }, }, { code: ` @@ -27,7 +25,7 @@ function mapStateToProps() {} function mapDispatchToProps() {} export default connect(mapStateToProps, mapDispatchToProps)(ErrorMessage); `, - parserOptions: { sourceType: 'module' }, + languageOptions: { parserOptions: { sourceType: 'module' } }, }, ` export const foo = 'a', diff --git a/packages/eslint-plugin/tests/rules/array-type.test.ts b/packages/eslint-plugin/tests/rules/array-type.test.ts index a9fae5e2be9c..ca71cbdaf15c 100644 --- a/packages/eslint-plugin/tests/rules/array-type.test.ts +++ b/packages/eslint-plugin/tests/rules/array-type.test.ts @@ -6,9 +6,7 @@ import type { OptionString } from '../../src/rules/array-type'; import rule from '../../src/rules/array-type'; import { areOptionsValid } from '../areOptionsValid'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('array-type', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/await-thenable.test.ts b/packages/eslint-plugin/tests/rules/await-thenable.test.ts index 27e4309092e8..ebb8c6ef9537 100644 --- a/packages/eslint-plugin/tests/rules/await-thenable.test.ts +++ b/packages/eslint-plugin/tests/rules/await-thenable.test.ts @@ -7,12 +7,12 @@ const rootDir = getFixturesRootDir(); const messageId = 'await'; const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 2018, - tsconfigRootDir: rootDir, - project: './tsconfig.json', + languageOptions: { + parserOptions: { + tsconfigRootDir: rootDir, + project: './tsconfig.json', + }, }, - parser: '@typescript-eslint/parser', }); ruleTester.run('await-thenable', rule, { diff --git a/packages/eslint-plugin/tests/rules/ban-ts-comment.test.ts b/packages/eslint-plugin/tests/rules/ban-ts-comment.test.ts index 51447bfe6130..8ac62dbb40cb 100644 --- a/packages/eslint-plugin/tests/rules/ban-ts-comment.test.ts +++ b/packages/eslint-plugin/tests/rules/ban-ts-comment.test.ts @@ -2,9 +2,7 @@ import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/ban-ts-comment'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('ts-expect-error', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/ban-tslint-comment.test.ts b/packages/eslint-plugin/tests/rules/ban-tslint-comment.test.ts index 01f6ec078a84..062fcd531988 100644 --- a/packages/eslint-plugin/tests/rules/ban-tslint-comment.test.ts +++ b/packages/eslint-plugin/tests/rules/ban-tslint-comment.test.ts @@ -46,9 +46,7 @@ console.log(woah); }, ] -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('ban-tslint-comment', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/class-literal-property-style.test.ts b/packages/eslint-plugin/tests/rules/class-literal-property-style.test.ts index 9e6519c10db0..902274292572 100644 --- a/packages/eslint-plugin/tests/rules/class-literal-property-style.test.ts +++ b/packages/eslint-plugin/tests/rules/class-literal-property-style.test.ts @@ -2,9 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/class-literal-property-style'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('class-literal-property-style', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this-core.test.ts b/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this-core.test.ts index 4fba4d557f15..50f527082553 100644 --- a/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this-core.test.ts +++ b/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this-core.test.ts @@ -5,97 +5,113 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../../src/rules/class-methods-use-this'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('class-methods-use-this', rule, { valid: [ - { code: 'class A { constructor() {} }', parserOptions: { ecmaVersion: 6 } }, - { code: 'class A { foo() {this} }', parserOptions: { ecmaVersion: 6 } }, + { + code: 'class A { constructor() {} }', + languageOptions: { parserOptions: { ecmaVersion: 6 } }, + }, + { + code: 'class A { foo() {this} }', + languageOptions: { parserOptions: { ecmaVersion: 6 } }, + }, { code: "class A { foo() {this.bar = 'bar';} }", - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, { code: 'class A { foo() {bar(this);} }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, { code: 'class A extends B { foo() {super.foo();} }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, { code: 'class A { foo() { if(true) { return this; } } }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, + }, + { + code: 'class A { static foo() {} }', + languageOptions: { parserOptions: { ecmaVersion: 6 } }, + }, + { + code: '({ a(){} });', + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, - { code: 'class A { static foo() {} }', parserOptions: { ecmaVersion: 6 } }, - { code: '({ a(){} });', parserOptions: { ecmaVersion: 6 } }, { code: 'class A { foo() { () => this; } }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, + }, + { + code: '({ a: function () {} });', + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, - { code: '({ a: function () {} });', parserOptions: { ecmaVersion: 6 } }, { code: 'class A { foo() {this} bar() {} }', options: [{ exceptMethods: ['bar'] }], - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, { code: 'class A { "foo"() { } }', options: [{ exceptMethods: ['foo'] }], - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, { code: 'class A { 42() { } }', options: [{ exceptMethods: ['42'] }], - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, { code: 'class A { foo = function() {this} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { foo = () => {this} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { foo = () => {super.toString} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { static foo = function() {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { static foo = () => {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { #bar() {} }', options: [{ exceptMethods: ['#bar'] }], - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { foo = function () {} }', options: [{ enforceForClassFields: false }], - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { foo = () => {} }', options: [{ enforceForClassFields: false }], - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, { code: 'class A { foo() { return class { [this.foo] = 1 }; } }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, + }, + { + code: 'class A { static {} }', + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, }, - { code: 'class A { static {} }', parserOptions: { ecmaVersion: 2022 } }, ], invalid: [ { code: 'class A { foo() {} }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -108,7 +124,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo() {/**this**/} }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -121,7 +137,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo() {var a = function () {this};} }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -134,7 +150,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo() {var a = function () {var b = function(){this}};} }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -147,7 +163,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo() {window.this} }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -160,7 +176,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: "class A { foo() {that.this = 'this';} }", - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -173,7 +189,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo() { () => undefined; } }', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -187,7 +203,7 @@ ruleTester.run('class-methods-use-this', rule, { { code: 'class A { foo() {} bar() {} }', options: [{ exceptMethods: ['bar'] }], - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -201,7 +217,7 @@ ruleTester.run('class-methods-use-this', rule, { { code: 'class A { foo() {} hasOwnProperty() {} }', options: [{ exceptMethods: ['foo'] }], - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -215,7 +231,7 @@ ruleTester.run('class-methods-use-this', rule, { { code: 'class A { [foo]() {} }', options: [{ exceptMethods: ['foo'] }], - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -229,7 +245,7 @@ ruleTester.run('class-methods-use-this', rule, { { code: 'class A { #foo() { } foo() {} #bar() {} }', options: [{ exceptMethods: ['#foo'] }], - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { type: AST_NODE_TYPES.FunctionExpression, @@ -249,7 +265,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: "class A { foo(){} 'bar'(){} 123(){} [`baz`](){} [a](){} [f(a)](){} get quux(){} set[a](b){} *quuux(){} }", - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [ { messageId: 'missingThis', @@ -309,7 +325,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo = function() {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -321,7 +337,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo = () => {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -333,7 +349,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { #foo = function() {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -345,7 +361,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { #foo = () => {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -357,7 +373,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { #foo() {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -369,7 +385,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { get #foo() {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -381,7 +397,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { set #foo(x) {} }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -393,7 +409,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo () { return class { foo = this }; } }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -405,7 +421,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo () { return function () { foo = this }; } }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', @@ -417,7 +433,7 @@ ruleTester.run('class-methods-use-this', rule, { }, { code: 'class A { foo () { return class { static { this; } } } }', - parserOptions: { ecmaVersion: 2022 }, + languageOptions: { parserOptions: { ecmaVersion: 2022 } }, errors: [ { messageId: 'missingThis', diff --git a/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this.test.ts b/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this.test.ts index 31303569beab..575daef11a8b 100644 --- a/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this.test.ts +++ b/packages/eslint-plugin/tests/rules/class-methods-use-this/class-methods-use-this.test.ts @@ -2,9 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../../src/rules/class-methods-use-this'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('class-methods-use-this', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/consistent-generic-constructors.test.ts b/packages/eslint-plugin/tests/rules/consistent-generic-constructors.test.ts index f21dac8f6399..f7f50ea44524 100644 --- a/packages/eslint-plugin/tests/rules/consistent-generic-constructors.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-generic-constructors.test.ts @@ -2,9 +2,7 @@ import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/consistent-generic-constructors'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('consistent-generic-constructors', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/consistent-indexed-object-style.test.ts b/packages/eslint-plugin/tests/rules/consistent-indexed-object-style.test.ts index 2b1aa4661a99..30f98f976e5c 100644 --- a/packages/eslint-plugin/tests/rules/consistent-indexed-object-style.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-indexed-object-style.test.ts @@ -2,9 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/consistent-indexed-object-style'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('consistent-indexed-object-style', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/consistent-return.test.ts b/packages/eslint-plugin/tests/rules/consistent-return.test.ts index cb74ca29b8c3..b26b70654dee 100644 --- a/packages/eslint-plugin/tests/rules/consistent-return.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-return.test.ts @@ -6,11 +6,11 @@ import { getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2021, - tsconfigRootDir: rootDir, - project: './tsconfig.json', + languageOptions: { + parserOptions: { + tsconfigRootDir: rootDir, + project: './tsconfig.json', + }, }, }); diff --git a/packages/eslint-plugin/tests/rules/consistent-type-assertions.test.ts b/packages/eslint-plugin/tests/rules/consistent-type-assertions.test.ts index fde1ed0d0dd5..29eb3d5297a0 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-assertions.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-assertions.test.ts @@ -10,7 +10,7 @@ import rule from '../../src/rules/consistent-type-assertions'; import { dedupeTestCases } from '../dedupeTestCases'; import { batchedSingleLineTests } from '../RuleTester'; -const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser' }); +const ruleTester = new RuleTester(); const ANGLE_BRACKET_TESTS_EXCEPT_CONST_CASE = ` const x = new Generic(); @@ -136,7 +136,7 @@ ruleTester.run('consistent-type-assertions', rule, { { code: 'const x = [1] as const;', options: [{ assertionStyle: 'never' }] }, { code: 'const bar = ;', - parserOptions: { ecmaFeatures: { jsx: true } }, + languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } }, options: [ { assertionStyle: 'as', @@ -533,7 +533,7 @@ ruleTester.run('consistent-type-assertions', rule, { { code: 'const foo = ;', output: null, - parserOptions: { ecmaFeatures: { jsx: true } }, + languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } }, options: [{ assertionStyle: 'never' }], errors: [{ messageId: 'never', line: 1 }], }, diff --git a/packages/eslint-plugin/tests/rules/consistent-type-definitions.test.ts b/packages/eslint-plugin/tests/rules/consistent-type-definitions.test.ts index b0a2092994d3..4fa17b04e988 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-definitions.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-definitions.test.ts @@ -2,9 +2,7 @@ import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/consistent-type-definitions'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('consistent-type-definitions', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts index 4d4bb3b5ae1d..209a285c7ee1 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts @@ -6,12 +6,11 @@ import { getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2020, - sourceType: 'module', - tsconfigRootDir: rootDir, - project: './tsconfig.json', + languageOptions: { + parserOptions: { + tsconfigRootDir: rootDir, + project: './tsconfig.json', + }, }, }); diff --git a/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts b/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts index a751730cfd34..48d918a6436e 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts @@ -19,8 +19,7 @@ const PARSER_OPTION_COMBOS = [ for (const parserOptions of PARSER_OPTION_COMBOS) { describe(`experimentalDecorators: ${parserOptions.experimentalDecorators} + emitDecoratorMetadata: ${parserOptions.emitDecoratorMetadata}`, () => { const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions, + languageOptions: { parserOptions }, }); ruleTester.run('consistent-type-imports', rule, { @@ -290,9 +289,11 @@ export const ComponentFoo: React.FC = () => { return
Foo Foo
; }; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, }, @@ -304,11 +305,13 @@ export const ComponentFoo: h.FC = () => { return
Foo Foo
; }; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + jsxPragma: 'h', }, - jsxPragma: 'h', }, }, { @@ -319,11 +322,13 @@ export const ComponentFoo: Fragment = () => { return <>Foo Foo; }; `, - parserOptions: { - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + jsxFragmentName: 'Fragment', }, - jsxFragmentName: 'Fragment', }, }, ` @@ -1946,10 +1951,11 @@ function test(foo: Foo) {} // the special ignored config case describe('experimentalDecorators: true + emitDecoratorMetadata: true', () => { const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - experimentalDecorators: true, - emitDecoratorMetadata: true, + languageOptions: { + parserOptions: { + experimentalDecorators: true, + emitDecoratorMetadata: true, + }, }, }); diff --git a/packages/eslint-plugin/tests/rules/default-param-last.test.ts b/packages/eslint-plugin/tests/rules/default-param-last.test.ts index 33be682be7c5..bcad5e8a6d62 100644 --- a/packages/eslint-plugin/tests/rules/default-param-last.test.ts +++ b/packages/eslint-plugin/tests/rules/default-param-last.test.ts @@ -2,9 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/default-param-last'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('default-param-last', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/dot-notation.test.ts b/packages/eslint-plugin/tests/rules/dot-notation.test.ts index b799ef3243c3..580ddef5715c 100644 --- a/packages/eslint-plugin/tests/rules/dot-notation.test.ts +++ b/packages/eslint-plugin/tests/rules/dot-notation.test.ts @@ -6,11 +6,11 @@ import { getFixturesRootDir } from '../RuleTester'; const rootPath = getFixturesRootDir(); const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', - parserOptions: { - sourceType: 'module', - tsconfigRootDir: rootPath, - project: './tsconfig.json', + languageOptions: { + parserOptions: { + tsconfigRootDir: rootPath, + project: './tsconfig.json', + }, }, }); @@ -51,19 +51,28 @@ ruleTester.run('dot-notation', rule, { code: "a['lots_of_snake_case'];", options: [{ allowPattern: '^[a-z]+(_[a-z]+)+$' }], }, - { code: 'a[`time${range}`];', parserOptions: { ecmaVersion: 6 } }, + { + code: 'a[`time${range}`];', + languageOptions: { parserOptions: { ecmaVersion: 6 } }, + }, { code: 'a[`while`];', options: [{ allowKeywords: false }], - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, + }, + { + code: 'a[`time range`];', + languageOptions: { parserOptions: { ecmaVersion: 6 } }, }, - { code: 'a[`time range`];', parserOptions: { ecmaVersion: 6 } }, 'a.true;', 'a.null;', 'a[undefined];', 'a[void 0];', 'a[b()];', - { code: 'a[/(?0)/];', parserOptions: { ecmaVersion: 2018 } }, + { + code: 'a[/(?0)/];', + languageOptions: { parserOptions: { ecmaVersion: 2018 } }, + }, { code: ` @@ -117,7 +126,7 @@ dingus?.nested.property; dingus?.nested['hello']; `, options: [{ allowIndexSignaturePropertyAccess: true }], - parserOptions: { ecmaVersion: 2020 }, + languageOptions: { parserOptions: { ecmaVersion: 2020 } }, }, { code: ` @@ -198,7 +207,7 @@ x.pub_prop = 123; { code: "a['time'];", output: 'a.time;', - parserOptions: { ecmaVersion: 6 }, + languageOptions: { parserOptions: { ecmaVersion: 6 } }, errors: [{ messageId: 'useDot', data: { key: '"time"' } }], }, { diff --git a/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts b/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts index 0e8c5182b7d3..ae80f009727b 100644 --- a/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts @@ -2,9 +2,7 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/explicit-function-return-type'; -const ruleTester = new RuleTester({ - parser: '@typescript-eslint/parser', -}); +const ruleTester = new RuleTester(); ruleTester.run('explicit-function-return-type', rule, { valid: [ @@ -185,45 +183,55 @@ class App { { code: 'const foo =