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 cd43599c85b6..3a70101eb7d5 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 6ec2ce42a6a3..084eadd9b6c0 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/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index 4cb13dad0dcb..c2e314860ae3 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -1,5 +1,37 @@ +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( + providedParserOptions: ParserOptions | undefined = {}, +): RuleTester { + const parserOptions = { + ...providedParserOptions, + tsconfigRootDir: + providedParserOptions.tsconfigRootDir ?? getFixturesRootDir(), + }; + + // 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; + } + // 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 }, + }); +} + export function getFixturesRootDir(): string { return path.join(__dirname, 'fixtures'); } 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), diff --git a/packages/eslint-plugin/tests/rules/await-thenable.test.ts b/packages/eslint-plugin/tests/rules/await-thenable.test.ts index 0556ce4803de..f0dca2e02f5f 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 89574197c9fd..0ee2908ef5b0 100644 --- a/packages/eslint-plugin/tests/rules/consistent-return.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-return.test.ts @@ -1,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/consistent-return'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 b513411d676d..6226405f4ebb 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts @@ -1,18 +1,11 @@ /* 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, +const ruleTester = createRuleTesterWithTypes({ + project: './tsconfig.json', }); ruleTester.run('consistent-type-exports', rule, { diff --git a/packages/eslint-plugin/tests/rules/dot-notation.test.ts b/packages/eslint-plugin/tests/rules/dot-notation.test.ts index 0a14e1036383..1a077b1b0527 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 { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = createRuleTesterWithTypes(); /** * 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/naming-convention/naming-convention.test.ts b/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts index 076534645409..9f6e6dfafbab 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/rules/no-array-delete.test.ts b/packages/eslint-plugin/tests/rules/no-array-delete.test.ts index be9700385a91..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 a75e9130b921..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,17 +1,8 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-base-to-string'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = createRuleTesterWithTypes(); /** * ref: https://github.com/typescript-eslint/typescript-eslint/issues/11043 @@ -1382,6 +1373,7 @@ declare const foo: Bar & Foo; languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, tsconfigRootDir: rootDir, }, }, @@ -1632,6 +1624,7 @@ declare const foo: Bar & Foo; languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, tsconfigRootDir: rootDir, }, }, @@ -1882,6 +1875,7 @@ declare const foo: Bar & Foo; languageOptions: { parserOptions: { project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, tsconfigRootDir: rootDir, }, }, @@ -2132,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-confusing-void-expression.test.ts b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts index 9adc9e2403b6..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 b40eb26fb978..529d6e999cfa 100644 --- a/packages/eslint-plugin/tests/rules/no-deprecated.test.ts +++ b/packages/eslint-plugin/tests/rules/no-deprecated.test.ts @@ -1,19 +1,12 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-deprecated'; -import { getFixturesRootDir } from '../RuleTester'; +import { getFixturesRootDir, createRuleTesterWithTypes } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, +const ruleTester = createRuleTesterWithTypes({ + ecmaFeatures: { + jsx: true, }, + project: './tsconfig.json', }); ruleTester.run('no-deprecated', rule, { 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..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 09fc5af480d5..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 87ead2f2b19d..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,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 { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 7721006b1d75..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,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 { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 5ba0001aaa79..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,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 { createRuleTesterWithTypes } from '../RuleTester'; + +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 38c5a239740a..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 fd908d416c08..0d16dd052637 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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 e187a85a1975..3a7f950fd8e6 100644 --- a/packages/eslint-plugin/tests/rules/no-misused-spread.test.ts +++ b/packages/eslint-plugin/tests/rules/no-misused-spread.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-misused-spread'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig-with-dom.json', - tsconfigRootDir: rootPath, - }, - }, +const ruleTester = createRuleTesterWithTypes({ + project: './tsconfig-with-dom.json', }); ruleTester.run('no-misused-spread', rule, { 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..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,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-mixed-enums'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 96afce33ac4e..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,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-redundant-type-constituents'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 ef3107357a77..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 @@ -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 { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 22bb2f46c152..80d81bce079c 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 { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = createRuleTesterWithTypes(); 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 8bbc814fd314..27bf0da8852a 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unnecessary-qualifier'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 907cf64f7763..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 @@ -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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 9c2ab4fe84e8..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 16bfe40b7eb2..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 @@ -1,17 +1,12 @@ -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, createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = path.join(__dirname, '..', 'fixtures'); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - projectService: false, - tsconfigRootDir: rootDir, - }, - }, +const rootDir = getFixturesRootDir(); + +const ruleTester = createRuleTesterWithTypes({ + project: './tsconfig.json', }); const optionsWithOnUncheckedIndexedAccess = { 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..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 9f8f05479c9c..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 9669d9c3b045..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,16 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unsafe-argument'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +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 e744d560218d..537ce85284e7 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts @@ -1,16 +1,10 @@ -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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.noImplicitThis.json', - projectService: false, - tsconfigRootDir: getFixturesRootDir(), - }, - }, +const ruleTester = createRuleTesterWithTypes({ + 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 279534b83f96..8522ecca83b1 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts @@ -1,16 +1,10 @@ -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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.noImplicitThis.json', - projectService: false, - tsconfigRootDir: getFixturesRootDir(), - }, - }, +const ruleTester = createRuleTesterWithTypes({ + project: './tsconfig.noImplicitThis.json', }); ruleTester.run('no-unsafe-call', rule, { 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..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 b10f3cc6ee5f..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 0c40f2996676..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 0aea759ca375..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,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/no-unsafe-unary-minus'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 500fe0e5a1db..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 @@ -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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('non-nullable-type-assertion-style', rule, { valid: [ @@ -244,15 +235,8 @@ const b = (a || undefined)!; ], }); -const ruleTesterWithNoUncheckedIndexAccess = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.noUncheckedIndexedAccess.json', - projectService: false, - sourceType: 'module', - tsconfigRootDir: getFixturesRootDir(), - }, - }, +const ruleTesterWithNoUncheckedIndexAccess = createRuleTesterWithTypes({ + project: './tsconfig.noUncheckedIndexedAccess.json', }); ruleTesterWithNoUncheckedIndexAccess.run( 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..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,16 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/only-throw-error'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +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 3c4b0fa576aa..66c0097daf79 100644 --- a/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-destructuring.test.ts @@ -1,18 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/prefer-destructuring'; -import { getFixturesRootDir } from '../RuleTester'; - -const rootPath = getFixturesRootDir(); +import { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 0c17c69dd5f2..5c88cb62000e 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 35830c45ad9d..a56cd9ded45a 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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 e2c5f17c8e5d..26de39970467 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 { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = createRuleTesterWithTypes(); 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 52c59b479b68..6639951b66e4 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,18 +1,11 @@ -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 { createRuleTesterWithTypes } from '../../RuleTester'; import { BaseCases, identity } from './base-cases'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: getFixturesRootDir(), - }, - }, -}); +const ruleTester = createRuleTesterWithTypes(); describe('|| {}', () => { ruleTester.run('prefer-optional-chain', rule, { 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 d8edf4fb9c48..a2ba8d12c801 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,17 +1,9 @@ -import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; +import { noFormat } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/prefer-promise-reject-errors'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 94381614160a..4cc30efb6b26 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 1e2289d65d1e..4b85f6ae7240 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 f26ccb53350f..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 e107208a9a3d..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 d0ed5d1a9c9b..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 798d26cb3916..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 4807d8a1c970..c922c0f1024f 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 ec7e22385052..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,17 +1,7 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; - import rule from '../../src/rules/related-getter-setter-pairs'; -import { getFixturesRootDir } from '../RuleTester'; +import { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 d4735efe231d..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 d9fca8c12f61..4fc229f27295 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 d1bf99b34800..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 e43335aecd04..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 9a44a5954d66..33f3f330e92a 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 77d8a00e67fb..5f451c3f07e4 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 { createRuleTesterWithTypes, getFixturesRootDir } from '../RuleTester'; -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = createRuleTesterWithTypes(); 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..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,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, createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = path.join(__dirname, '..', 'fixtures'); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +const rootDir = getFixturesRootDir(); +const ruleTester = createRuleTesterWithTypes(); 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..152cc1beeecf 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +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 aeca1a171d50..92fc2cc48188 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 { createRuleTesterWithTypes } from '../RuleTester'; -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, -}); +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 4100fba8b702..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,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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootDir = getFixturesRootDir(); - -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootDir, - }, - }, -}); +const ruleTester = createRuleTesterWithTypes(); ruleTester.run('use-unknown-in-catch-callback-variable', rule, { valid: [ 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; diff --git a/packages/eslint-plugin/tests/util/getWrappedCode.test.ts b/packages/eslint-plugin/tests/util/getWrappedCode.test.ts index c22f9f9a3216..ecfada71d23b 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,16 +8,10 @@ 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({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, +const ruleTester = createRuleTesterWithTypes({ + 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 1dd7a2b929e8..e04a8725b65d 100644 --- a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts @@ -1,18 +1,10 @@ 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 { createRuleTesterWithTypes } from '../RuleTester'; -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, +const ruleTester = createRuleTesterWithTypes({ + 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 1177b1ac44bb..2ff8cd2baa72 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 { createRuleTesterWithTypes } from '../RuleTester'; const rule = createRule({ create(context) { @@ -43,14 +41,8 @@ const rule = createRule({ name: 'no-useless-expression', }); -const rootPath = getFixturesRootDir(); -const ruleTester = new RuleTester({ - languageOptions: { - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: rootPath, - }, - }, +const ruleTester = createRuleTesterWithTypes({ + project: './tsconfig.json', }); ruleTester.run('isNodeEqual', rule, { 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..0d4285e396d0 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo.test.ts @@ -41,8 +41,17 @@ describe('semanticInfo', async () => { clearCaches(); vi.stubEnv('TSESTREE_SINGLE_RUN', ''); + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); }); + vi.stubEnv( + 'TYPESCRIPT_ESLINT_IGNORE_PROJECT_AND_PROJECT_SERVICE_ERROR', + 'true', + ); + // test all AST snapshots const testCases = await Promise.all( testFiles.map(async filename => {