From c2c6ca168e05e9ebd1e27d4ae00e94064a83ecca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maria=20Jos=C3=A9=20Solano?= Date: Sun, 22 Jun 2025 18:31:58 -0700 Subject: [PATCH 01/10] fix(parser): error when both `projectService` and `project` are set --- .../tests/rules/no-poorly-typed-ts-props.test.ts | 1 + .../tests/rules/plugin-test-formatting.test.ts | 1 + .../src/parseSettings/createParseSettings.ts | 13 +++++++++++++ .../tests/lib/createParseSettings.test.ts | 15 +++++++++++++++ .../typescript-estree/tests/lib/parse.test.ts | 4 ++++ .../tests/lib/persistentParse.test.ts | 7 +++++++ .../tests/lib/semanticInfo-singleRun.test.ts | 5 +++++ .../tests/lib/semanticInfo.test.ts | 5 +++++ 8 files changed, 51 insertions(+) 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 cee60c1a8675..29f1098a5b35 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 @@ -8,6 +8,7 @@ const ruleTester = new RuleTester({ languageOptions: { parserOptions: { project: './tsconfig.json', + projectService: false, tsconfigRootDir: getFixturesRootDir(), }, }, 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 29ee7dde5168..f71ec7c98bba 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 @@ -7,6 +7,7 @@ const ruleTester = new RuleTester({ languageOptions: { parserOptions: { project: './tsconfig.json', + projectService: false, tsconfigRootDir: getFixturesRootDir(), }, }, diff --git a/packages/typescript-estree/src/parseSettings/createParseSettings.ts b/packages/typescript-estree/src/parseSettings/createParseSettings.ts index e393686e0afc..15bd7840a4e9 100644 --- a/packages/typescript-estree/src/parseSettings/createParseSettings.ts +++ b/packages/typescript-estree/src/parseSettings/createParseSettings.ts @@ -180,6 +180,19 @@ export function createParseSettings( tsconfigRootDir, }; + // TODO: Eventually, parse settings will be validated more thoroughly. + // https://github.com/typescript-eslint/typescript-eslint/issues/6403 + if ( + parseSettings.projectService && + tsestreeOptions.project && + process.env.TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR !== + 'true' + ) { + throw new Error( + 'Enabling "project" does nothing when "projectService" is enabled. You can remove the "project" setting.', + ); + } + // debug doesn't support multiple `enable` calls, so have to do it all at once if (parseSettings.debugLevel.size > 0) { const namespaces = []; diff --git a/packages/typescript-estree/tests/lib/createParseSettings.test.ts b/packages/typescript-estree/tests/lib/createParseSettings.test.ts index b1f33f9304d2..ddb9c17cbc2b 100644 --- a/packages/typescript-estree/tests/lib/createParseSettings.test.ts +++ b/packages/typescript-estree/tests/lib/createParseSettings.test.ts @@ -26,6 +26,10 @@ describe(createParseSettings, () => { it('is created when options.projectService is undefined, options.project is true, and process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE is true', () => { vi.stubEnv('TYPESCRIPT_ESLINT_PROJECT_SERVICE', 'true'); + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); const parseSettings = createParseSettings('', { project: true, @@ -35,6 +39,17 @@ describe(createParseSettings, () => { expect(parseSettings.projectService).toBe(projectService); }); + it('complains when options.projectService is true, options.project is true, and process.env.TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR is not set', () => { + expect(() => + createParseSettings('', { + project: true, + projectService: true, + }), + ).toThrowErrorMatchingInlineSnapshot( + `[Error: Enabling "project" does nothing when "projectService" is enabled. You can remove the "project" setting.]`, + ); + }); + it('is not created when options.projectService is undefined, options.project is falsy, and process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE is true', () => { vi.stubEnv('TYPESCRIPT_ESLINT_PROJECT_SERVICE', 'true'); diff --git a/packages/typescript-estree/tests/lib/parse.test.ts b/packages/typescript-estree/tests/lib/parse.test.ts index c371a6e9e7ac..421287ff182b 100644 --- a/packages/typescript-estree/tests/lib/parse.test.ts +++ b/packages/typescript-estree/tests/lib/parse.test.ts @@ -68,6 +68,10 @@ describe(parser.parseAndGenerateServices, () => { beforeEach(() => { vi.clearAllMocks(); clearGlobResolutionCache(); + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); }); afterAll(() => { diff --git a/packages/typescript-estree/tests/lib/persistentParse.test.ts b/packages/typescript-estree/tests/lib/persistentParse.test.ts index d7283f412330..b8916bb6eb08 100644 --- a/packages/typescript-estree/tests/lib/persistentParse.test.ts +++ b/packages/typescript-estree/tests/lib/persistentParse.test.ts @@ -38,6 +38,13 @@ afterEach(() => { process.chdir(cwdCopy); }); +beforeEach(() => { + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); +}); + beforeAll(async () => { await fs.mkdir(tmpDirsParentDirectory, { recursive: true, diff --git a/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts b/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts index 69789fa2dc3e..f63aa80c1bf0 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts @@ -114,6 +114,11 @@ describe('semanticInfo - singleRun', () => { createProgramFromConfigFile.mockClear(); // Do not track invocations per file across tests clearParseAndGenerateServicesCalls(); + + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); }); it('should not create any programs ahead of time by default when there is no way to infer singleRun=true', () => { diff --git a/packages/typescript-estree/tests/lib/semanticInfo.test.ts b/packages/typescript-estree/tests/lib/semanticInfo.test.ts index 9f4aa21fbd5d..ec3d1248287f 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo.test.ts @@ -43,6 +43,11 @@ describe('semanticInfo', async () => { vi.stubEnv('TSESTREE_SINGLE_RUN', ''); }); + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); + // test all AST snapshots const testCases = await Promise.all( testFiles.map(async filename => { From 36ad58e8d524f2902aa596dd0df9178c631aa30e Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 10:40:45 -0400 Subject: [PATCH 02/10] more env stubbing in semanticInfo.test.ts --- packages/typescript-estree/tests/lib/semanticInfo.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/typescript-estree/tests/lib/semanticInfo.test.ts b/packages/typescript-estree/tests/lib/semanticInfo.test.ts index ec3d1248287f..0d4285e396d0 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo.test.ts @@ -41,6 +41,10 @@ describe('semanticInfo', async () => { clearCaches(); vi.stubEnv('TSESTREE_SINGLE_RUN', ''); + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); }); vi.stubEnv( From ee850a07afec200bb61748c32764409daf9fa0f4 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 12:12:56 -0400 Subject: [PATCH 03/10] Consolidated typed testing and env checks with getTypedRuleTester --- packages/eslint-plugin/tests/RuleTester.ts | 20 +++++++++++++++ .../tests/rules/await-thenable.test.ts | 15 +++-------- .../tests/rules/consistent-return.test.ts | 13 ++-------- .../rules/consistent-type-exports.test.ts | 10 +++----- .../tests/rules/dot-notation.test.ts | 22 ++++++---------- .../tests/rules/no-array-delete.test.ts | 15 +++-------- .../tests/rules/no-base-to-string.test.ts | 13 ++-------- .../no-confusing-void-expression.test.ts | 14 +++-------- .../tests/rules/no-deprecated.test.ts | 8 ++---- .../no-duplicate-type-constituents.test.ts | 15 ++--------- .../tests/rules/no-dynamic-delete.test.ts | 15 ++--------- .../tests/rules/no-floating-promises.test.ts | 13 ++-------- .../tests/rules/no-for-in-array.test.ts | 13 +++------- .../tests/rules/no-implied-eval.test.ts | 16 +++--------- .../no-meaningless-void-operator.test.ts | 15 ++--------- .../tests/rules/no-misused-promises.test.ts | 15 ++--------- .../tests/rules/no-misused-spread.test.ts | 9 +++---- .../tests/rules/no-mixed-enums.test.ts | 14 ++--------- .../no-redundant-type-constituents.test.ts | 14 ++--------- ...nnecessary-boolean-literal-compare.test.ts | 13 +++------- .../rules/no-unnecessary-condition.test.ts | 25 +++++++------------ .../rules/no-unnecessary-qualifier.test.ts | 14 ++--------- ...no-unnecessary-template-expression.test.ts | 15 +++-------- .../no-unnecessary-type-arguments.test.ts | 15 ++--------- .../no-unnecessary-type-assertion.test.ts | 10 ++++---- .../no-unnecessary-type-conversion.test.ts | 15 ++--------- .../no-unnecessary-type-parameters.test.ts | 15 +++-------- .../tests/rules/no-unsafe-argument.test.ts | 13 ++-------- .../tests/rules/no-unsafe-assignment.test.ts | 7 +++--- .../tests/rules/no-unsafe-call.test.ts | 7 +++--- .../no-unsafe-declaration-merging.test.ts | 15 ++--------- .../rules/no-unsafe-enum-comparison.test.ts | 15 ++--------- .../rules/no-unsafe-type-assertion.test.ts | 15 ++--------- .../tests/rules/no-unsafe-unary-minus.test.ts | 14 ++--------- .../non-nullable-type-assertion-style.test.ts | 17 +++---------- .../tests/rules/only-throw-error.test.ts | 13 ++-------- .../tests/rules/prefer-destructuring.test.ts | 14 ++--------- .../tests/rules/prefer-find.test.ts | 15 +++-------- .../tests/rules/prefer-includes.test.ts | 15 ++--------- .../rules/prefer-nullish-coalescing.test.ts | 18 ++++--------- .../prefer-optional-chain.test.ts | 8 +++--- .../prefer-promise-reject-errors.test.ts | 14 +++-------- .../prefer-readonly-parameter-types.test.ts | 15 +++-------- .../tests/rules/prefer-readonly.test.ts | 14 ++--------- .../prefer-reduce-type-parameter.test.ts | 15 ++--------- .../tests/rules/prefer-regexp-exec.test.ts | 15 ++--------- .../rules/prefer-return-this-type.test.ts | 15 ++--------- .../prefer-string-starts-ends-with.test.ts | 15 +++-------- .../rules/promise-function-async.test.ts | 15 +++-------- .../rules/related-getter-setter-pairs.test.ts | 14 ++--------- .../rules/require-array-sort-compare.test.ts | 15 ++--------- .../tests/rules/require-await.test.ts | 15 +++-------- .../rules/restrict-plus-operands.test.ts | 15 ++--------- .../restrict-template-expressions.test.ts | 15 ++--------- .../tests/rules/return-await.test.ts | 15 +++-------- .../rules/strict-boolean-expressions.test.ts | 19 +++++--------- .../rules/switch-exhaustiveness-check.test.ts | 22 ++++++---------- .../eslint-plugin/tests/rules/typedef.test.ts | 14 ++--------- .../tests/rules/unbound-method.test.ts | 15 ++--------- ...unknown-in-catch-callback-variable.test.ts | 15 +++-------- 60 files changed, 189 insertions(+), 680 deletions(-) diff --git a/packages/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index 7e003e7fa5f1..9ef1f33dfb85 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -1,10 +1,30 @@ import type { + RuleTesterConfig, InvalidTestCase, ValidTestCase, } from '@typescript-eslint/rule-tester'; +import { RuleTester } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; +export function getTypedRuleTester( + testerConfig: RuleTesterConfig | undefined = {}, +): RuleTester { + return new RuleTester({ + ...testerConfig, + languageOptions: { + ...testerConfig.languageOptions, + parserOptions: { + ...(process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE + ? { projectService: true } + : { project: true }), + tsconfigRootDir: getFixturesRootDir(), + ...testerConfig.languageOptions?.parserOptions, + }, + }, + }); +} + export function getFixturesRootDir(): string { return path.join(__dirname, 'fixtures'); } diff --git a/packages/eslint-plugin/tests/rules/await-thenable.test.ts b/packages/eslint-plugin/tests/rules/await-thenable.test.ts index 0556ce4803de..afd0c5695540 100644 --- a/packages/eslint-plugin/tests/rules/await-thenable.test.ts +++ b/packages/eslint-plugin/tests/rules/await-thenable.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/await-thenable'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('await-thenable', 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 e62345932396..ebd0440fd8bc 100644 --- a/packages/eslint-plugin/tests/rules/consistent-return.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-return.test.ts @@ -1,18 +1,9 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/consistent-return'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('consistent-return', 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 b513411d676d..9cc481c6bcba 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts @@ -1,16 +1,14 @@ /* eslint-disable @typescript-eslint/internal/plugin-test-formatting -- Prettier doesn't yet support TS 5.6 string literal module identifiers */ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/consistent-type-exports'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig.json', - tsconfigRootDir: rootDir, + projectService: false, }, }, }); diff --git a/packages/eslint-plugin/tests/rules/dot-notation.test.ts b/packages/eslint-plugin/tests/rules/dot-notation.test.ts index 0a14e1036383..76a84d38d017 100644 --- a/packages/eslint-plugin/tests/rules/dot-notation.test.ts +++ b/packages/eslint-plugin/tests/rules/dot-notation.test.ts @@ -1,18 +1,10 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/dot-notation'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = getTypedRuleTester(); /** * Quote a string in "double quotes" because it’s painful @@ -163,7 +155,7 @@ foo['key_baz']; parserOptions: { project: './tsconfig.noPropertyAccessFromIndexSignature.json', projectService: false, - tsconfigRootDir: rootPath, + tsconfigRootDir: rootDir, }, }, }, @@ -181,7 +173,7 @@ foo['bar']; parserOptions: { project: './tsconfig.noPropertyAccessFromIndexSignature.json', projectService: false, - tsconfigRootDir: rootPath, + tsconfigRootDir: rootDir, }, }, }, @@ -202,7 +194,7 @@ function f(x: T) { parserOptions: { project: './tsconfig.noPropertyAccessFromIndexSignature.json', projectService: false, - tsconfigRootDir: rootPath, + tsconfigRootDir: rootDir, }, }, }, diff --git a/packages/eslint-plugin/tests/rules/no-array-delete.test.ts b/packages/eslint-plugin/tests/rules/no-array-delete.test.ts index be9700385a91..0ed28d72baee 100644 --- a/packages/eslint-plugin/tests/rules/no-array-delete.test.ts +++ b/packages/eslint-plugin/tests/rules/no-array-delete.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-array-delete'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-array-delete', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts b/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts index a75e9130b921..4c0159b80d09 100644 --- a/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts +++ b/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts @@ -1,17 +1,8 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-base-to-string'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); /** * ref: https://github.com/typescript-eslint/typescript-eslint/issues/11043 diff --git a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts index 9adc9e2403b6..1514648827a9 100644 --- a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts +++ b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts @@ -1,17 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-confusing-void-expression'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-confusing-void-expression', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts index e5a0937f4264..03ee3bb3dcff 100644 --- a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts +++ b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts @@ -1,17 +1,13 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-deprecated'; -import { getFixturesRootDir } from '../RuleTester'; +import { getFixturesRootDir, getTypedRuleTester } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { ecmaFeatures: { jsx: true, }, - project: './tsconfig.json', - tsconfigRootDir: rootDir, }, }, }); diff --git a/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts b/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts index 90d32bf0010f..110b792b245a 100644 --- a/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts +++ b/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-duplicate-type-constituents'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-duplicate-type-constituents', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts b/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts index 09fc5af480d5..d672e45af476 100644 --- a/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts +++ b/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-dynamic-delete'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-dynamic-delete', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts b/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts index 87ead2f2b19d..ced121146397 100644 --- a/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts +++ b/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts @@ -1,19 +1,10 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import rule from '../../src/rules/no-floating-promises'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-floating-promises', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts index 7721006b1d75..a19605bf0a04 100644 --- a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts +++ b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts @@ -1,17 +1,10 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-for-in-array'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-for-in-array', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts index 5ba0001aaa79..dab9703fbb99 100644 --- a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts +++ b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-implied-eval'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +import { getTypedRuleTester } from '../RuleTester'; + +const ruleTester = getTypedRuleTester(); ruleTester.run('no-implied-eval', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts b/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts index 38c5a239740a..6d238af87ad1 100644 --- a/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts +++ b/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-meaningless-void-operator'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootDir = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-meaningless-void-operator', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts b/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts index 5f7f1faf8bb4..f057527f4238 100644 --- a/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts +++ b/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-misused-promises'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootDir = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-misused-promises', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts index e187a85a1975..253870540d8d 100644 --- a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts +++ b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts @@ -1,15 +1,12 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-misused-spread'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig-with-dom.json', - tsconfigRootDir: rootPath, }, }, }); diff --git a/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts b/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts index 603afa4fc0d5..9110f5466908 100644 --- a/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts +++ b/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-mixed-enums'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-mixed-enums', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts b/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts index 96afce33ac4e..e99d9d3f52e9 100644 --- a/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts +++ b/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-redundant-type-constituents'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-redundant-type-constituents', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts index ef3107357a77..a4d21db0049e 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts @@ -1,18 +1,11 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import rule from '../../src/rules/no-unnecessary-boolean-literal-compare'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unnecessary-boolean-literal-compare', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts index 22bb2f46c152..86a0977d0011 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts @@ -1,6 +1,6 @@ import type { InvalidTestCase } from '@typescript-eslint/rule-tester'; -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import type { @@ -9,28 +9,21 @@ import type { } from '../../src/rules/no-unnecessary-condition'; import rule from '../../src/rules/no-unnecessary-condition'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = getTypedRuleTester(); const optionsWithExactOptionalPropertyTypes = { project: './tsconfig.exactOptionalPropertyTypes.json', - tsconfigRootDir: rootPath, + projectService: false, + tsconfigRootDir: rootDir, }; const optionsWithNoUncheckedIndexedAccess = { project: './tsconfig.noUncheckedIndexedAccess.json', projectService: false, - tsconfigRootDir: getFixturesRootDir(), + tsconfigRootDir: rootDir, }; const necessaryConditionTest = (condition: string): string => ` @@ -883,7 +876,7 @@ if (x) { `, languageOptions: { parserOptions: { - tsconfigRootDir: path.join(rootPath, 'unstrict'), + tsconfigRootDir: path.join(rootDir, 'unstrict'), }, }, options: [ @@ -3059,7 +3052,7 @@ if (x) { ], languageOptions: { parserOptions: { - tsconfigRootDir: path.join(rootPath, 'unstrict'), + tsconfigRootDir: path.join(rootDir, 'unstrict'), }, }, }, diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts index 91a153d7dd33..13983fcf8a48 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts @@ -1,19 +1,9 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-unnecessary-qualifier'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unnecessary-qualifier', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts index 907cf64f7763..aadfd86438af 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts @@ -1,20 +1,11 @@ import type { InvalidTestCase } from '@typescript-eslint/rule-tester'; -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unnecessary-template-expression'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); const invalidCases = [ { diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts index 9c2ab4fe84e8..3436c2ebd0c5 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unnecessary-type-arguments'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unnecessary-type-arguments', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts index 16bfe40b7eb2..b49bc901d527 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts @@ -1,15 +1,15 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; -import path from 'node:path'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unnecessary-type-assertion'; +import { getFixturesRootDir, getTypedRuleTester } from '../RuleTester'; -const rootDir = path.join(__dirname, '..', 'fixtures'); -const ruleTester = new RuleTester({ +const rootDir = getFixturesRootDir(); + +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig.json', projectService: false, - tsconfigRootDir: rootDir, }, }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts index 71f5e56e0d1a..df0a2b6f4b8f 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unnecessary-type-conversion'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootDir = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unnecessary-type-conversion', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts index 9f8f05479c9c..8b667f61e931 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unnecessary-type-parameters'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unnecessary-type-parameters', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts index 9669d9c3b045..bfb50b47fd48 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts @@ -1,16 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unsafe-argument'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unsafe-argument', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts index e744d560218d..9fac00059255 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts @@ -1,14 +1,13 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unsafe-assignment'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig.noImplicitThis.json', projectService: false, - tsconfigRootDir: getFixturesRootDir(), }, }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts index 279534b83f96..99024ea6a22f 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts @@ -1,14 +1,13 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unsafe-call'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig.noImplicitThis.json', projectService: false, - tsconfigRootDir: getFixturesRootDir(), }, }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts index fbaadb553e66..bc99873df1f9 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unsafe-declaration-merging'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unsafe-declaration-merging', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts index b10f3cc6ee5f..8c345bfee1a0 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unsafe-enum-comparison'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootDir = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unsafe-enum-comparison', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts index 0c40f2996676..cf4d3e5c6d92 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unsafe-type-assertion'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); describe('basic assertions', () => { ruleTester.run('no-unsafe-type-assertion', rule, { diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts index 0aea759ca375..f6f6b2c86f7b 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unsafe-unary-minus'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('no-unsafe-unary-minus', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts index 500fe0e5a1db..48bd0d701891 100644 --- a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts +++ b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts @@ -1,16 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/non-nullable-type-assertion-style'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('non-nullable-type-assertion-style', rule, { valid: [ @@ -244,13 +235,11 @@ const b = (a || undefined)!; ], }); -const ruleTesterWithNoUncheckedIndexAccess = new RuleTester({ +const ruleTesterWithNoUncheckedIndexAccess = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', projectService: false, - sourceType: 'module', - tsconfigRootDir: getFixturesRootDir(), }, }, }); diff --git a/packages/eslint-plugin/tests/rules/only-throw-error.test.ts b/packages/eslint-plugin/tests/rules/only-throw-error.test.ts index 500454d0a9cb..e80bc0aeb6a4 100644 --- a/packages/eslint-plugin/tests/rules/only-throw-error.test.ts +++ b/packages/eslint-plugin/tests/rules/only-throw-error.test.ts @@ -1,16 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/only-throw-error'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('only-throw-error', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts b/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts index 452990eadbcd..856a25ea44ea 100644 --- a/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts @@ -1,19 +1,9 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/prefer-destructuring'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-destructuring', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-find.test.ts b/packages/eslint-plugin/tests/rules/prefer-find.test.ts index 0c17c69dd5f2..bf9d05c56c59 100644 --- a/packages/eslint-plugin/tests/rules/prefer-find.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-find.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/prefer-find'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-find', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-includes.test.ts b/packages/eslint-plugin/tests/rules/prefer-includes.test.ts index 35830c45ad9d..5aac36d09bf8 100644 --- a/packages/eslint-plugin/tests/rules/prefer-includes.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-includes.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/prefer-includes'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-includes', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts index e2c5f17c8e5d..ca80143f1562 100644 --- a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts @@ -3,7 +3,7 @@ import type { ValidTestCase, } from '@typescript-eslint/rule-tester'; -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import type { @@ -12,18 +12,10 @@ import type { } from '../../src/rules/prefer-nullish-coalescing'; import rule from '../../src/rules/prefer-nullish-coalescing'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = getTypedRuleTester(); const types = ['string', 'number', 'boolean', 'object']; const nullishTypes = ['null', 'undefined', 'null | undefined']; @@ -2495,7 +2487,7 @@ if (x) { ], languageOptions: { parserOptions: { - tsconfigRootDir: path.join(rootPath, 'unstrict'), + tsconfigRootDir: path.join(rootDir, 'unstrict'), }, }, output: null, diff --git a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts index b72289d020b2..9ca01b135bbc 100644 --- a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts @@ -1,14 +1,14 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../../src/rules/prefer-optional-chain'; import { dedupeTestCases } from '../../dedupeTestCases'; -import { getFixturesRootDir } from '../../RuleTester'; +import { getFixturesRootDir, getTypedRuleTester } from '../../RuleTester'; import { BaseCases, identity } from './base-cases'; -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { - project: './tsconfig.json', + // todo: this too? tsconfigRootDir: getFixturesRootDir(), }, }, diff --git a/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts b/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts index 09aa8d7e460e..3fd747aa9e91 100644 --- a/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts @@ -1,18 +1,10 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/prefer-promise-reject-errors'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-promise-reject-errors', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts index 027f2f7ae49e..7fe510a363cc 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts @@ -1,20 +1,11 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import rule from '../../src/rules/prefer-readonly-parameter-types'; import { readonlynessOptionsDefaults } from '../../src/util'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-readonly-parameter-types', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts index 1e2289d65d1e..d2498a49d640 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/prefer-readonly'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-readonly', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts b/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts index f26ccb53350f..09e51cf5d10e 100644 --- a/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/prefer-reduce-type-parameter'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-reduce-type-parameter', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts b/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts index e107208a9a3d..3170aebc1733 100644 --- a/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/prefer-regexp-exec'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-regexp-exec', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts b/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts index d0ed5d1a9c9b..e652834d675f 100644 --- a/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/prefer-return-this-type'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-return-this-type', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts b/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts index 798d26cb3916..2560d0e6f0a0 100644 --- a/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/prefer-string-starts-ends-with'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('prefer-string-starts-ends-with', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts index 2b6ddbdb9870..476a4474706a 100644 --- a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts +++ b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/promise-function-async'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('promise-function-async', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts b/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts index ec7e22385052..8ea5f66225d9 100644 --- a/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts +++ b/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/related-getter-setter-pairs'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('related-getter-setter-pairs', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts b/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts index d4735efe231d..6b189619cb96 100644 --- a/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts +++ b/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/require-array-sort-compare'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('require-array-sort-compare', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/require-await.test.ts b/packages/eslint-plugin/tests/rules/require-await.test.ts index d9fca8c12f61..1fa18eff22e3 100644 --- a/packages/eslint-plugin/tests/rules/require-await.test.ts +++ b/packages/eslint-plugin/tests/rules/require-await.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/require-await'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('require-await', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts b/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts index d1bf99b34800..e93d832acc58 100644 --- a/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts +++ b/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/restrict-plus-operands'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('restrict-plus-operands', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts b/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts index e43335aecd04..3a26c3d2c2e2 100644 --- a/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts +++ b/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/restrict-template-expressions'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('restrict-template-expressions', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/return-await.test.ts b/packages/eslint-plugin/tests/rules/return-await.test.ts index 9a44a5954d66..57fe3d96b1c8 100644 --- a/packages/eslint-plugin/tests/rules/return-await.test.ts +++ b/packages/eslint-plugin/tests/rules/return-await.test.ts @@ -1,20 +1,11 @@ import type { InvalidTestCase } from '@typescript-eslint/rule-tester'; -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/return-await'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); // default rule is in-try-catch ruleTester.run('return-await', rule, { diff --git a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts index 77d8a00e67fb..bb2212504db8 100644 --- a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts +++ b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts @@ -1,18 +1,11 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import rule from '../../src/rules/strict-boolean-expressions'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = getTypedRuleTester(); ruleTester.run('strict-boolean-expressions', rule, { valid: [ @@ -385,7 +378,7 @@ if (x) { `, languageOptions: { parserOptions: { - tsconfigRootDir: path.join(rootPath, 'unstrict'), + tsconfigRootDir: path.join(rootDir, 'unstrict'), }, }, options: [ @@ -3270,7 +3263,7 @@ if (x) { ], languageOptions: { parserOptions: { - tsconfigRootDir: path.join(rootPath, 'unstrict'), + tsconfigRootDir: path.join(rootDir, 'unstrict'), }, }, output: null, diff --git a/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts b/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts index b18e91e4872a..51d42e62b7f6 100644 --- a/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts +++ b/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts @@ -1,18 +1,10 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; -import path from 'node:path'; +import { noFormat } from '@typescript-eslint/rule-tester'; import switchExhaustivenessCheck from '../../src/rules/switch-exhaustiveness-check'; +import { getFixturesRootDir, getTypedRuleTester } from '../RuleTester'; -const rootPath = path.join(__dirname, '..', 'fixtures'); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = getTypedRuleTester(); ruleTester.run('switch-exhaustiveness-check', switchExhaustivenessCheck, { valid: [ @@ -928,7 +920,7 @@ function foo(x: string[]) { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', projectService: false, - tsconfigRootDir: rootPath, + tsconfigRootDir: rootDir, }, }, }, @@ -951,7 +943,7 @@ function foo(x: string[], y: string | undefined) { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', projectService: false, - tsconfigRootDir: rootPath, + tsconfigRootDir: rootDir, }, }, }, @@ -2802,7 +2794,7 @@ function foo(x: string[]) { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', projectService: false, - tsconfigRootDir: rootPath, + tsconfigRootDir: rootDir, }, }, }, diff --git a/packages/eslint-plugin/tests/rules/typedef.test.ts b/packages/eslint-plugin/tests/rules/typedef.test.ts index 129fcc5320c0..86e220fce805 100644 --- a/packages/eslint-plugin/tests/rules/typedef.test.ts +++ b/packages/eslint-plugin/tests/rules/typedef.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/typedef'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('typedef', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/unbound-method.test.ts b/packages/eslint-plugin/tests/rules/unbound-method.test.ts index aeca1a171d50..ca8aa7c06312 100644 --- a/packages/eslint-plugin/tests/rules/unbound-method.test.ts +++ b/packages/eslint-plugin/tests/rules/unbound-method.test.ts @@ -1,22 +1,11 @@ import type { InvalidTestCase } from '@typescript-eslint/rule-tester'; -import { RuleTester } from '@typescript-eslint/rule-tester'; - import type { MessageIds, Options } from '../../src/rules/unbound-method'; import rule from '../../src/rules/unbound-method'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { getTypedRuleTester } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const ruleTester = getTypedRuleTester(); function addContainsMethodsClass(code: string): string { return ` diff --git a/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts b/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts index 4100fba8b702..afde1c7ebf03 100644 --- a/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts +++ b/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts @@ -1,18 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/use-unknown-in-catch-callback-variable'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = getTypedRuleTester(); ruleTester.run('use-unknown-in-catch-callback-variable', rule, { valid: [ From 765e45dd3cd0ac98e84783c8c5308b82895a65ac Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 12:22:20 -0400 Subject: [PATCH 04/10] More fixes, for now --- .../tests/rules/naming-convention/naming-convention.test.ts | 1 + packages/eslint-plugin/tests/util/getConstraintInfo.test.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts b/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts index c43b293c686e..66b595c8faaf 100644 --- a/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts +++ b/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts @@ -11,6 +11,7 @@ const ruleTester = new RuleTester(); const rootDir = getFixturesRootDir(); const parserOptions = { project: './tsconfig.json', + projectService: false, tsconfigRootDir: rootDir, }; diff --git a/packages/eslint-plugin/tests/util/getConstraintInfo.test.ts b/packages/eslint-plugin/tests/util/getConstraintInfo.test.ts index 332b0373c092..c491a3a1a8e3 100644 --- a/packages/eslint-plugin/tests/util/getConstraintInfo.test.ts +++ b/packages/eslint-plugin/tests/util/getConstraintInfo.test.ts @@ -14,6 +14,7 @@ const DEFAULT_PARSER_OPTIONS = { disallowAutomaticSingleRunInference: true, filePath: path.join(FIXTURES_DIR, 'file.ts'), project: './tsconfig.json', + projectService: false, tsconfigRootDir: FIXTURES_DIR, } as const satisfies ParserOptions; From ce8dc0127aac3547cad6728a15fcfa34da893b8e Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 15:19:38 -0400 Subject: [PATCH 05/10] Progress --- .../eslint-plugin/tests/rules/no-base-to-string.test.ts | 4 ++++ .../eslint-plugin/tests/rules/no-misused-spread.test.ts | 1 + .../eslint-plugin/tests/util/getWrappingFixer.test.ts | 9 +++------ packages/eslint-plugin/tests/util/isNodeEqual.test.ts | 9 +++------ 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts b/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts index 4c0159b80d09..b7a3a989762b 100644 --- a/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts +++ b/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts @@ -1373,6 +1373,7 @@ declare const foo: Bar & Foo; languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, tsconfigRootDir: rootDir, }, }, @@ -1623,6 +1624,7 @@ declare const foo: Bar & Foo; languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, tsconfigRootDir: rootDir, }, }, @@ -1873,6 +1875,7 @@ declare const foo: Bar & Foo; languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, tsconfigRootDir: rootDir, }, }, @@ -2123,6 +2126,7 @@ declare const foo: Bar & Foo; languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, tsconfigRootDir: rootDir, }, }, diff --git a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts index 253870540d8d..309240993ac0 100644 --- a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts +++ b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts @@ -7,6 +7,7 @@ const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig-with-dom.json', + projectService: false, }, }, }); diff --git a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts index 1dd7a2b929e8..65a791ade3df 100644 --- a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts @@ -1,16 +1,13 @@ import type { TSESTree } from '@typescript-eslint/utils'; -import { RuleTester } from '@typescript-eslint/rule-tester'; - import { createRule, getWrappingFixer } from '../../src/util'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig.json', - tsconfigRootDir: rootPath, + projectService: false, }, }, }); diff --git a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts index 1177b1ac44bb..d4926f1ba616 100644 --- a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts +++ b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts @@ -1,9 +1,7 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; -import { RuleTester } from '@typescript-eslint/rule-tester'; - import { createRule, isNodeEqual } from '../../src/util'; -import { getFixturesRootDir } from '../RuleTester'; +import { getTypedRuleTester } from '../RuleTester'; const rule = createRule({ create(context) { @@ -43,12 +41,11 @@ const rule = createRule({ name: 'no-useless-expression', }); -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ +const ruleTester = getTypedRuleTester({ languageOptions: { parserOptions: { project: './tsconfig.json', - tsconfigRootDir: rootPath, + projectService: false, }, }, }); From 74ee1daf1da20f70c4de7869a135998244c79885 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 16:12:49 -0400 Subject: [PATCH 06/10] More. --- packages/eslint-plugin/tests/RuleTester.ts | 19 +++++++++++++++---- packages/eslint-plugin/tests/docs.test.mts | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index 9ef1f33dfb85..e5cb0e7f7b0d 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -10,16 +10,27 @@ import * as path from 'node:path'; export function getTypedRuleTester( testerConfig: RuleTesterConfig | undefined = {}, ): RuleTester { + const providedParserOptions = + testerConfig.languageOptions?.parserOptions ?? {}; + + // If the requested config specifies how to provide types, use that. + const parserOptions = + providedParserOptions.project || providedParserOptions.projectService + ? providedParserOptions + : { + // Otherwise, use the corresponding provider for the CI/local environment. + [process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE + ? 'projectService' + : 'project']: true, + }; + return new RuleTester({ ...testerConfig, languageOptions: { ...testerConfig.languageOptions, parserOptions: { - ...(process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE - ? { projectService: true } - : { project: true }), tsconfigRootDir: getFixturesRootDir(), - ...testerConfig.languageOptions?.parserOptions, + ...parserOptions, }, }, }); diff --git a/packages/eslint-plugin/tests/docs.test.mts b/packages/eslint-plugin/tests/docs.test.mts index ea12c3e02179..20693dd21762 100644 --- a/packages/eslint-plugin/tests/docs.test.mts +++ b/packages/eslint-plugin/tests/docs.test.mts @@ -428,6 +428,7 @@ describe('Validating rule docs', () => { parserOptions: { disallowAutomaticSingleRunInference: true, project: './tsconfig.json', + projectService: false, tsconfigRootDir: FIXTURES_DIR, }, rules: Object.fromEntries(ruleEntries), From 17ab4ee439aef9d761b1c69760684b99163a03f3 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 16:48:35 -0400 Subject: [PATCH 07/10] Move the defaulting logic into createRuleTesterWithTypes --- packages/eslint-plugin/tests/RuleTester.ts | 6 +++--- packages/eslint-plugin/tests/rules/await-thenable.test.ts | 4 ++-- .../eslint-plugin/tests/rules/consistent-return.test.ts | 4 ++-- .../tests/rules/consistent-type-exports.test.ts | 5 ++--- packages/eslint-plugin/tests/rules/dot-notation.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/no-array-delete.test.ts | 4 ++-- .../eslint-plugin/tests/rules/no-base-to-string.test.ts | 4 ++-- .../tests/rules/no-confusing-void-expression.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/no-deprecated.test.ts | 4 ++-- .../tests/rules/no-duplicate-type-constituents.test.ts | 4 ++-- .../eslint-plugin/tests/rules/no-dynamic-delete.test.ts | 4 ++-- .../eslint-plugin/tests/rules/no-floating-promises.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/no-for-in-array.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/no-implied-eval.test.ts | 4 ++-- .../tests/rules/no-meaningless-void-operator.test.ts | 4 ++-- .../eslint-plugin/tests/rules/no-misused-promises.test.ts | 4 ++-- .../eslint-plugin/tests/rules/no-misused-spread.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts | 4 ++-- .../tests/rules/no-redundant-type-constituents.test.ts | 4 ++-- .../rules/no-unnecessary-boolean-literal-compare.test.ts | 4 ++-- .../tests/rules/no-unnecessary-condition.test.ts | 4 ++-- .../tests/rules/no-unnecessary-qualifier.test.ts | 4 ++-- .../tests/rules/no-unnecessary-template-expression.test.ts | 4 ++-- .../tests/rules/no-unnecessary-type-arguments.test.ts | 4 ++-- .../tests/rules/no-unnecessary-type-assertion.test.ts | 5 ++--- .../tests/rules/no-unnecessary-type-conversion.test.ts | 4 ++-- .../tests/rules/no-unnecessary-type-parameters.test.ts | 4 ++-- .../eslint-plugin/tests/rules/no-unsafe-argument.test.ts | 4 ++-- .../eslint-plugin/tests/rules/no-unsafe-assignment.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts | 4 ++-- .../tests/rules/no-unsafe-declaration-merging.test.ts | 4 ++-- .../tests/rules/no-unsafe-enum-comparison.test.ts | 4 ++-- .../tests/rules/no-unsafe-type-assertion.test.ts | 4 ++-- .../tests/rules/no-unsafe-unary-minus.test.ts | 4 ++-- .../tests/rules/non-nullable-type-assertion-style.test.ts | 6 +++--- .../eslint-plugin/tests/rules/only-throw-error.test.ts | 4 ++-- .../eslint-plugin/tests/rules/prefer-destructuring.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/prefer-find.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/prefer-includes.test.ts | 4 ++-- .../tests/rules/prefer-nullish-coalescing.test.ts | 4 ++-- .../prefer-optional-chain/prefer-optional-chain.test.ts | 7 +++++-- .../tests/rules/prefer-promise-reject-errors.test.ts | 4 ++-- .../tests/rules/prefer-readonly-parameter-types.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/prefer-readonly.test.ts | 4 ++-- .../tests/rules/prefer-reduce-type-parameter.test.ts | 4 ++-- .../eslint-plugin/tests/rules/prefer-regexp-exec.test.ts | 4 ++-- .../tests/rules/prefer-return-this-type.test.ts | 4 ++-- .../tests/rules/prefer-string-starts-ends-with.test.ts | 4 ++-- .../tests/rules/promise-function-async.test.ts | 4 ++-- .../tests/rules/related-getter-setter-pairs.test.ts | 4 ++-- .../tests/rules/require-array-sort-compare.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/require-await.test.ts | 4 ++-- .../tests/rules/restrict-plus-operands.test.ts | 4 ++-- .../tests/rules/restrict-template-expressions.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/return-await.test.ts | 4 ++-- .../tests/rules/strict-boolean-expressions.test.ts | 4 ++-- .../tests/rules/switch-exhaustiveness-check.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/typedef.test.ts | 4 ++-- packages/eslint-plugin/tests/rules/unbound-method.test.ts | 4 ++-- .../rules/use-unknown-in-catch-callback-variable.test.ts | 4 ++-- packages/eslint-plugin/tests/util/getWrappedCode.test.ts | 7 ++----- packages/eslint-plugin/tests/util/getWrappingFixer.test.ts | 5 ++--- packages/eslint-plugin/tests/util/isNodeEqual.test.ts | 5 ++--- 63 files changed, 131 insertions(+), 135 deletions(-) diff --git a/packages/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index e5cb0e7f7b0d..830d2574e499 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -7,14 +7,14 @@ import type { import { RuleTester } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; -export function getTypedRuleTester( +export function createRuleTesterWithTypes( testerConfig: RuleTesterConfig | undefined = {}, ): RuleTester { const providedParserOptions = testerConfig.languageOptions?.parserOptions ?? {}; - // If the requested config specifies how to provide types, use that. const parserOptions = + // If the requested config specifies how to provide types, use that. providedParserOptions.project || providedParserOptions.projectService ? providedParserOptions : { @@ -29,8 +29,8 @@ export function getTypedRuleTester( languageOptions: { ...testerConfig.languageOptions, parserOptions: { - tsconfigRootDir: getFixturesRootDir(), ...parserOptions, + tsconfigRootDir: parserOptions.tsconfigRootDir ?? getFixturesRootDir(), }, }, }); diff --git a/packages/eslint-plugin/tests/rules/await-thenable.test.ts b/packages/eslint-plugin/tests/rules/await-thenable.test.ts index afd0c5695540..f0dca2e02f5f 100644 --- a/packages/eslint-plugin/tests/rules/await-thenable.test.ts +++ b/packages/eslint-plugin/tests/rules/await-thenable.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/await-thenable'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('await-thenable', 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 ebd0440fd8bc..24bfdcb4d74f 100644 --- a/packages/eslint-plugin/tests/rules/consistent-return.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-return.test.ts @@ -1,9 +1,9 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/consistent-return'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('consistent-return', 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 9cc481c6bcba..5929d704b0d8 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts @@ -2,13 +2,12 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/consistent-type-exports'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.json', - projectService: false, }, }, }); diff --git a/packages/eslint-plugin/tests/rules/dot-notation.test.ts b/packages/eslint-plugin/tests/rules/dot-notation.test.ts index 76a84d38d017..1a077b1b0527 100644 --- a/packages/eslint-plugin/tests/rules/dot-notation.test.ts +++ b/packages/eslint-plugin/tests/rules/dot-notation.test.ts @@ -1,10 +1,10 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/dot-notation'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); /** * Quote a string in "double quotes" because it’s painful diff --git a/packages/eslint-plugin/tests/rules/no-array-delete.test.ts b/packages/eslint-plugin/tests/rules/no-array-delete.test.ts index 0ed28d72baee..c8d25e7ebf84 100644 --- a/packages/eslint-plugin/tests/rules/no-array-delete.test.ts +++ b/packages/eslint-plugin/tests/rules/no-array-delete.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-array-delete'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-array-delete', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts b/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts index b7a3a989762b..cab11e9ce5ec 100644 --- a/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts +++ b/packages/eslint-plugin/tests/rules/no-base-to-string.test.ts @@ -1,8 +1,8 @@ import rule from '../../src/rules/no-base-to-string'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); /** * ref: https://github.com/typescript-eslint/typescript-eslint/issues/11043 diff --git a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts index 1514648827a9..6e63c73be460 100644 --- a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts +++ b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-confusing-void-expression'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-confusing-void-expression', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts index 03ee3bb3dcff..1706d528e647 100644 --- a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts +++ b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts @@ -1,8 +1,8 @@ import rule from '../../src/rules/no-deprecated'; -import { getFixturesRootDir, getTypedRuleTester } from '../RuleTester'; +import { getFixturesRootDir, createRuleTesterWithTypes } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { ecmaFeatures: { diff --git a/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts b/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts index 110b792b245a..7cbae0db756a 100644 --- a/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts +++ b/packages/eslint-plugin/tests/rules/no-duplicate-type-constituents.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-duplicate-type-constituents'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-duplicate-type-constituents', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts b/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts index d672e45af476..00e32626e2bb 100644 --- a/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts +++ b/packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-dynamic-delete'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-dynamic-delete', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts b/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts index ced121146397..0ed85d5b7cef 100644 --- a/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts +++ b/packages/eslint-plugin/tests/rules/no-floating-promises.test.ts @@ -1,10 +1,10 @@ import * as path from 'node:path'; import rule from '../../src/rules/no-floating-promises'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-floating-promises', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts index a19605bf0a04..f781d049ebf2 100644 --- a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts +++ b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts @@ -1,10 +1,10 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-for-in-array'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-for-in-array', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts index dab9703fbb99..19cb5297a85a 100644 --- a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts +++ b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-implied-eval'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-implied-eval', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts b/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts index 6d238af87ad1..15c6d69a34d8 100644 --- a/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts +++ b/packages/eslint-plugin/tests/rules/no-meaningless-void-operator.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-meaningless-void-operator'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-meaningless-void-operator', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts b/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts index f057527f4238..92f575b2d6a6 100644 --- a/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts +++ b/packages/eslint-plugin/tests/rules/no-misused-promises.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-misused-promises'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-misused-promises', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts index 309240993ac0..4520a3588175 100644 --- a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts +++ b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-misused-spread'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig-with-dom.json', diff --git a/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts b/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts index 9110f5466908..4bd17db5e284 100644 --- a/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts +++ b/packages/eslint-plugin/tests/rules/no-mixed-enums.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-mixed-enums'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-mixed-enums', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts b/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts index e99d9d3f52e9..ce51eb308044 100644 --- a/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts +++ b/packages/eslint-plugin/tests/rules/no-redundant-type-constituents.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-redundant-type-constituents'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-redundant-type-constituents', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts index a4d21db0049e..5f27869ee7a0 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-boolean-literal-compare.test.ts @@ -2,10 +2,10 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import rule from '../../src/rules/no-unnecessary-boolean-literal-compare'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unnecessary-boolean-literal-compare', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts index 86a0977d0011..80d81bce079c 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts @@ -9,10 +9,10 @@ import type { } from '../../src/rules/no-unnecessary-condition'; import rule from '../../src/rules/no-unnecessary-condition'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); const optionsWithExactOptionalPropertyTypes = { project: './tsconfig.exactOptionalPropertyTypes.json', diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts index 13983fcf8a48..5dbae2f59379 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts @@ -1,9 +1,9 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-unnecessary-qualifier'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unnecessary-qualifier', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts index aadfd86438af..693d55ae6907 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-template-expression.test.ts @@ -3,9 +3,9 @@ import type { InvalidTestCase } from '@typescript-eslint/rule-tester'; import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unnecessary-template-expression'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); const invalidCases = [ { diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts index 3436c2ebd0c5..84e90c9f95f5 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-unnecessary-type-arguments'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unnecessary-type-arguments', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts index b49bc901d527..efefa5840603 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts @@ -1,15 +1,14 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unnecessary-type-assertion'; -import { getFixturesRootDir, getTypedRuleTester } from '../RuleTester'; +import { getFixturesRootDir, createRuleTesterWithTypes } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.json', - projectService: false, }, }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts index df0a2b6f4b8f..1bf2ae83cb1b 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-conversion.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-unnecessary-type-conversion'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unnecessary-type-conversion', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts index 8b667f61e931..0b98cbd20dd9 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-parameters.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unnecessary-type-parameters'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unnecessary-type-parameters', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts index bfb50b47fd48..46fc5f32118d 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-argument.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-unsafe-argument'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unsafe-argument', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts index 9fac00059255..a28e674c6780 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unsafe-assignment'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.noImplicitThis.json', diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts index 99024ea6a22f..1db63f3bcac9 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-unsafe-call'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.noImplicitThis.json', diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts index bc99873df1f9..3837b38eb499 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-declaration-merging.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-unsafe-declaration-merging'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unsafe-declaration-merging', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts index 8c345bfee1a0..c1e84f7c5884 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-unsafe-enum-comparison'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unsafe-enum-comparison', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts index cf4d3e5c6d92..0b0815f37250 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-type-assertion.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-unsafe-type-assertion'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); describe('basic assertions', () => { ruleTester.run('no-unsafe-type-assertion', rule, { diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts index f6f6b2c86f7b..28ab97b62b44 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-unary-minus.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/no-unsafe-unary-minus'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('no-unsafe-unary-minus', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts index 48bd0d701891..3682cdbffb5d 100644 --- a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts +++ b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/non-nullable-type-assertion-style'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('non-nullable-type-assertion-style', rule, { valid: [ @@ -235,7 +235,7 @@ const b = (a || undefined)!; ], }); -const ruleTesterWithNoUncheckedIndexAccess = getTypedRuleTester({ +const ruleTesterWithNoUncheckedIndexAccess = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', diff --git a/packages/eslint-plugin/tests/rules/only-throw-error.test.ts b/packages/eslint-plugin/tests/rules/only-throw-error.test.ts index e80bc0aeb6a4..aeaf3f392220 100644 --- a/packages/eslint-plugin/tests/rules/only-throw-error.test.ts +++ b/packages/eslint-plugin/tests/rules/only-throw-error.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/only-throw-error'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('only-throw-error', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts b/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts index 856a25ea44ea..745f77d1ebf3 100644 --- a/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts @@ -1,9 +1,9 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/prefer-destructuring'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-destructuring', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-find.test.ts b/packages/eslint-plugin/tests/rules/prefer-find.test.ts index bf9d05c56c59..5c88cb62000e 100644 --- a/packages/eslint-plugin/tests/rules/prefer-find.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-find.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/prefer-find'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-find', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-includes.test.ts b/packages/eslint-plugin/tests/rules/prefer-includes.test.ts index 5aac36d09bf8..a56cd9ded45a 100644 --- a/packages/eslint-plugin/tests/rules/prefer-includes.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-includes.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/prefer-includes'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-includes', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts index ca80143f1562..26de39970467 100644 --- a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts @@ -12,10 +12,10 @@ import type { } from '../../src/rules/prefer-nullish-coalescing'; import rule from '../../src/rules/prefer-nullish-coalescing'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); const types = ['string', 'number', 'boolean', 'object']; const nullishTypes = ['null', 'undefined', 'null | undefined']; diff --git a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts index 9ca01b135bbc..c5eba52170b3 100644 --- a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts @@ -2,10 +2,13 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../../src/rules/prefer-optional-chain'; import { dedupeTestCases } from '../../dedupeTestCases'; -import { getFixturesRootDir, getTypedRuleTester } from '../../RuleTester'; +import { + getFixturesRootDir, + createRuleTesterWithTypes, +} from '../../RuleTester'; import { BaseCases, identity } from './base-cases'; -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { // todo: this too? diff --git a/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts b/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts index 3fd747aa9e91..b26f55cbb1d7 100644 --- a/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-promise-reject-errors.test.ts @@ -2,9 +2,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/prefer-promise-reject-errors'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-promise-reject-errors', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts index 7fe510a363cc..35afec0820ec 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts @@ -3,9 +3,9 @@ import * as path from 'node:path'; import rule from '../../src/rules/prefer-readonly-parameter-types'; import { readonlynessOptionsDefaults } from '../../src/util'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-readonly-parameter-types', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts index d2498a49d640..4b85f6ae7240 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/prefer-readonly'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-readonly', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts b/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts index 09e51cf5d10e..a158bfa685fb 100644 --- a/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-reduce-type-parameter.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/prefer-reduce-type-parameter'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-reduce-type-parameter', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts b/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts index 3170aebc1733..c5a501f69887 100644 --- a/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-regexp-exec.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/prefer-regexp-exec'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-regexp-exec', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts b/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts index e652834d675f..df31a2c9f987 100644 --- a/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-return-this-type.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/prefer-return-this-type'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-return-this-type', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts b/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts index 2560d0e6f0a0..1b6a91ea03b2 100644 --- a/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/prefer-string-starts-ends-with'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('prefer-string-starts-ends-with', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts index 476a4474706a..880876b2f10a 100644 --- a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts +++ b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/promise-function-async'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('promise-function-async', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts b/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts index 8ea5f66225d9..e31e9b1cde0e 100644 --- a/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts +++ b/packages/eslint-plugin/tests/rules/related-getter-setter-pairs.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/related-getter-setter-pairs'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('related-getter-setter-pairs', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts b/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts index 6b189619cb96..786c321194f1 100644 --- a/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts +++ b/packages/eslint-plugin/tests/rules/require-array-sort-compare.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/require-array-sort-compare'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('require-array-sort-compare', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/require-await.test.ts b/packages/eslint-plugin/tests/rules/require-await.test.ts index 1fa18eff22e3..4fc229f27295 100644 --- a/packages/eslint-plugin/tests/rules/require-await.test.ts +++ b/packages/eslint-plugin/tests/rules/require-await.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/require-await'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('require-await', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts b/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts index e93d832acc58..a60f49e09f86 100644 --- a/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts +++ b/packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/restrict-plus-operands'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('restrict-plus-operands', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts b/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts index 3a26c3d2c2e2..aa88c8276cdf 100644 --- a/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts +++ b/packages/eslint-plugin/tests/rules/restrict-template-expressions.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/restrict-template-expressions'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('restrict-template-expressions', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/return-await.test.ts b/packages/eslint-plugin/tests/rules/return-await.test.ts index 57fe3d96b1c8..33f3f330e92a 100644 --- a/packages/eslint-plugin/tests/rules/return-await.test.ts +++ b/packages/eslint-plugin/tests/rules/return-await.test.ts @@ -3,9 +3,9 @@ import type { InvalidTestCase } from '@typescript-eslint/rule-tester'; import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/return-await'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); // default rule is in-try-catch ruleTester.run('return-await', rule, { diff --git a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts index bb2212504db8..5f451c3f07e4 100644 --- a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts +++ b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts @@ -2,10 +2,10 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; import rule from '../../src/rules/strict-boolean-expressions'; -import { getTypedRuleTester, getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('strict-boolean-expressions', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts b/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts index 51d42e62b7f6..11392f2ca353 100644 --- a/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts +++ b/packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts @@ -1,10 +1,10 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import switchExhaustivenessCheck from '../../src/rules/switch-exhaustiveness-check'; -import { getFixturesRootDir, getTypedRuleTester } from '../RuleTester'; +import { getFixturesRootDir, createRuleTesterWithTypes } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('switch-exhaustiveness-check', switchExhaustivenessCheck, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/typedef.test.ts b/packages/eslint-plugin/tests/rules/typedef.test.ts index 86e220fce805..152cc1beeecf 100644 --- a/packages/eslint-plugin/tests/rules/typedef.test.ts +++ b/packages/eslint-plugin/tests/rules/typedef.test.ts @@ -1,7 +1,7 @@ import rule from '../../src/rules/typedef'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('typedef', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/rules/unbound-method.test.ts b/packages/eslint-plugin/tests/rules/unbound-method.test.ts index ca8aa7c06312..92fc2cc48188 100644 --- a/packages/eslint-plugin/tests/rules/unbound-method.test.ts +++ b/packages/eslint-plugin/tests/rules/unbound-method.test.ts @@ -3,9 +3,9 @@ import type { InvalidTestCase } from '@typescript-eslint/rule-tester'; import type { MessageIds, Options } from '../../src/rules/unbound-method'; import rule from '../../src/rules/unbound-method'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); function addContainsMethodsClass(code: string): string { return ` diff --git a/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts b/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts index afde1c7ebf03..e0ba5f76d4fa 100644 --- a/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts +++ b/packages/eslint-plugin/tests/rules/use-unknown-in-catch-callback-variable.test.ts @@ -1,9 +1,9 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/use-unknown-in-catch-callback-variable'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester(); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('use-unknown-in-catch-callback-variable', rule, { valid: [ diff --git a/packages/eslint-plugin/tests/util/getWrappedCode.test.ts b/packages/eslint-plugin/tests/util/getWrappedCode.test.ts index c22f9f9a3216..6bf6e17cbdfd 100644 --- a/packages/eslint-plugin/tests/util/getWrappedCode.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappedCode.test.ts @@ -1,6 +1,5 @@ import type { TSESTree } from '@typescript-eslint/utils'; -import { RuleTester } from '@typescript-eslint/rule-tester'; import * as ts from 'typescript'; import { @@ -9,14 +8,12 @@ import { getParserServices, } from '../../src/util'; import { getWrappedCode } from '../../src/util/getWrappedCode'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.json', - tsconfigRootDir: rootPath, }, }, }); diff --git a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts index 65a791ade3df..9bc8a44ac475 100644 --- a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts @@ -1,13 +1,12 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { createRule, getWrappingFixer } from '../../src/util'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.json', - projectService: false, }, }, }); diff --git a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts index d4926f1ba616..9d4c0b4305ac 100644 --- a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts +++ b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts @@ -1,7 +1,7 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { createRule, isNodeEqual } from '../../src/util'; -import { getTypedRuleTester } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; const rule = createRule({ create(context) { @@ -41,11 +41,10 @@ const rule = createRule({ name: 'no-useless-expression', }); -const ruleTester = getTypedRuleTester({ +const ruleTester = createRuleTesterWithTypes({ languageOptions: { parserOptions: { project: './tsconfig.json', - projectService: false, }, }, }); From e084a3bd3f3008ba6ca97a62be68eb7da84e88ad Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 22:36:12 -0400 Subject: [PATCH 08/10] Further streamlining --- packages/eslint-plugin/tests/RuleTester.ts | 39 ++++++++----------- .../rules/consistent-type-exports.test.ts | 6 +-- .../tests/rules/no-deprecated.test.ts | 9 ++--- .../tests/rules/no-misused-spread.test.ts | 7 +--- .../no-unnecessary-type-assertion.test.ts | 6 +-- .../tests/rules/no-unsafe-assignment.test.ts | 7 +--- .../tests/rules/no-unsafe-call.test.ts | 7 +--- .../non-nullable-type-assertion-style.test.ts | 7 +--- .../prefer-optional-chain.test.ts | 14 +------ .../tests/util/getWrappedCode.test.ts | 6 +-- .../tests/util/getWrappingFixer.test.ts | 6 +-- .../tests/util/isNodeEqual.test.ts | 6 +-- 12 files changed, 31 insertions(+), 89 deletions(-) diff --git a/packages/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index 830d2574e499..f0042a00d6eb 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -1,38 +1,33 @@ import type { - RuleTesterConfig, InvalidTestCase, ValidTestCase, } from '@typescript-eslint/rule-tester'; +import type { ParserOptions } from '@typescript-eslint/utils/ts-eslint'; import { RuleTester } from '@typescript-eslint/rule-tester'; import * as path from 'node:path'; export function createRuleTesterWithTypes( - testerConfig: RuleTesterConfig | undefined = {}, + providedParserOptions: ParserOptions | undefined = {}, ): RuleTester { - const providedParserOptions = - testerConfig.languageOptions?.parserOptions ?? {}; + const parserOptions = { + ...providedParserOptions, + tsconfigRootDir: + providedParserOptions.tsconfigRootDir ?? getFixturesRootDir(), + }; - const parserOptions = - // If the requested config specifies how to provide types, use that. - providedParserOptions.project || providedParserOptions.projectService - ? providedParserOptions - : { - // Otherwise, use the corresponding provider for the CI/local environment. - [process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE - ? 'projectService' - : 'project']: true, - }; + // If the requested config doesn't specify how to provide types, + // provide our own using the corresponding provider for the CI/local environment. + if (!parserOptions.project && !parserOptions.projectService) { + parserOptions[ + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE + ? 'projectService' + : 'project' + ] = true; + } return new RuleTester({ - ...testerConfig, - languageOptions: { - ...testerConfig.languageOptions, - parserOptions: { - ...parserOptions, - tsconfigRootDir: parserOptions.tsconfigRootDir ?? getFixturesRootDir(), - }, - }, + languageOptions: { parserOptions }, }); } 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 5929d704b0d8..6226405f4ebb 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts @@ -5,11 +5,7 @@ import rule from '../../src/rules/consistent-type-exports'; import { createRuleTesterWithTypes } from '../RuleTester'; const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - }, - }, + project: './tsconfig.json', }); ruleTester.run('consistent-type-exports', rule, { diff --git a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts index 1706d528e647..08becc314aa0 100644 --- a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts +++ b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts @@ -3,13 +3,10 @@ import { getFixturesRootDir, createRuleTesterWithTypes } from '../RuleTester'; const rootDir = getFixturesRootDir(); const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, + ecmaFeatures: { + jsx: true, }, + project: './tsconfig.json', }); ruleTester.run('no-deprecated', rule, { diff --git a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts index 4520a3588175..3a7f950fd8e6 100644 --- a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts +++ b/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts @@ -4,12 +4,7 @@ import rule from '../../src/rules/no-misused-spread'; import { createRuleTesterWithTypes } from '../RuleTester'; const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig-with-dom.json', - projectService: false, - }, - }, + project: './tsconfig-with-dom.json', }); ruleTester.run('no-misused-spread', rule, { diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts index efefa5840603..b2ef78d4500a 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts @@ -6,11 +6,7 @@ import { getFixturesRootDir, createRuleTesterWithTypes } from '../RuleTester'; const rootDir = getFixturesRootDir(); const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - }, - }, + project: './tsconfig.json', }); const optionsWithOnUncheckedIndexedAccess = { diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts index a28e674c6780..537ce85284e7 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts @@ -4,12 +4,7 @@ import rule from '../../src/rules/no-unsafe-assignment'; import { createRuleTesterWithTypes } from '../RuleTester'; const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.noImplicitThis.json', - projectService: false, - }, - }, + project: './tsconfig.noImplicitThis.json', }); ruleTester.run('no-unsafe-assignment', rule, { diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts index 1db63f3bcac9..8522ecca83b1 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts @@ -4,12 +4,7 @@ import rule from '../../src/rules/no-unsafe-call'; import { createRuleTesterWithTypes } from '../RuleTester'; const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.noImplicitThis.json', - projectService: false, - }, - }, + project: './tsconfig.noImplicitThis.json', }); ruleTester.run('no-unsafe-call', rule, { diff --git a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts index 3682cdbffb5d..6c02bb0b1875 100644 --- a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts +++ b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts @@ -236,12 +236,7 @@ const b = (a || undefined)!; }); const ruleTesterWithNoUncheckedIndexAccess = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.noUncheckedIndexedAccess.json', - projectService: false, - }, - }, + project: './tsconfig.noUncheckedIndexedAccess.json', }); ruleTesterWithNoUncheckedIndexAccess.run( diff --git a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts index c5eba52170b3..e7f00536ea1b 100644 --- a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts @@ -2,20 +2,10 @@ import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../../src/rules/prefer-optional-chain'; import { dedupeTestCases } from '../../dedupeTestCases'; -import { - getFixturesRootDir, - createRuleTesterWithTypes, -} from '../../RuleTester'; +import { createRuleTesterWithTypes } from '../../RuleTester'; import { BaseCases, identity } from './base-cases'; -const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - // todo: this too? - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +const ruleTester = createRuleTesterWithTypes(); describe('|| {}', () => { ruleTester.run('prefer-optional-chain', rule, { diff --git a/packages/eslint-plugin/tests/util/getWrappedCode.test.ts b/packages/eslint-plugin/tests/util/getWrappedCode.test.ts index 6bf6e17cbdfd..ecfada71d23b 100644 --- a/packages/eslint-plugin/tests/util/getWrappedCode.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappedCode.test.ts @@ -11,11 +11,7 @@ import { getWrappedCode } from '../../src/util/getWrappedCode'; import { createRuleTesterWithTypes } from '../RuleTester'; const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - }, - }, + project: './tsconfig.json', }); const removeFunctionRule = createRule({ diff --git a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts index 9bc8a44ac475..e04a8725b65d 100644 --- a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts @@ -4,11 +4,7 @@ import { createRule, getWrappingFixer } from '../../src/util'; import { createRuleTesterWithTypes } from '../RuleTester'; const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - }, - }, + project: './tsconfig.json', }); const voidEverythingRule = createRule({ diff --git a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts index 9d4c0b4305ac..2ff8cd2baa72 100644 --- a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts +++ b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts @@ -42,11 +42,7 @@ const rule = createRule({ }); const ruleTester = createRuleTesterWithTypes({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - }, - }, + project: './tsconfig.json', }); ruleTester.run('isNodeEqual', rule, { From c76cc0cccc6f7c56c920d5d7634ac5d2cd863681 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 23:00:33 -0400 Subject: [PATCH 09/10] Streamlined inside createRuleTesterWithTypes --- packages/eslint-plugin/tests/RuleTester.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index f0042a00d6eb..cfac5e8c7c8f 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -16,14 +16,14 @@ export function createRuleTesterWithTypes( providedParserOptions.tsconfigRootDir ?? getFixturesRootDir(), }; - // If the requested config doesn't specify how to provide types, - // provide our own using the corresponding provider for the CI/local environment. - if (!parserOptions.project && !parserOptions.projectService) { - parserOptions[ - process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE - ? 'projectService' - : 'project' - ] = true; + // If the test has requested a specific project, disable projectService + // (regardless of whether it's being switched to by TYPESCRIPT_ESLINT_PROJECT_SERVICE) + if (parserOptions.project) { + parserOptions.projectService = false; + } + // Otherwise, use the project service for types if requested in the env + else if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE) { + parserOptions.projectService = true; } return new RuleTester({ From 8363f90dc1fb59a056dae046d1434796421ddc23 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 2 Oct 2025 23:20:58 -0400 Subject: [PATCH 10/10] Fall back to project: true --- packages/eslint-plugin/tests/RuleTester.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index cfac5e8c7c8f..89697a661214 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -25,6 +25,11 @@ export function createRuleTesterWithTypes( else if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE) { parserOptions.projectService = true; } + // Finally, default to project: true as the standard (legacy) behavior + // See: https://github.com/typescript-eslint/typescript-eslint/issues/11676 + else { + parserOptions.project = true; + } return new RuleTester({ languageOptions: { parserOptions },