Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const ruleTester = new RuleTester({
languageOptions: {
parserOptions: {
project: './tsconfig.json',
projectService: false,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if this is the right way to fix the tests in files that just use the RuleTester.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, good question. Ideally we wouldn't have to do anything in the plugin tests themselves. I'm poking around...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, yes, this is the right way.

Recapping for posterity: it's not apparent from the naming (sigh) but the TYPESCRIPT_ESLINT_PROJECT_SERVICE env variable's purpose isn't purely to enable projectService. It's to switch project to projectService if project is enabled. But it doesn't apply when project: false is present.

tsconfigRootDir: getFixturesRootDir(),
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const ruleTester = new RuleTester({
languageOptions: {
parserOptions: {
project: './tsconfig.json',
projectService: false,
tsconfigRootDir: getFixturesRootDir(),
},
},
Expand Down
32 changes: 32 additions & 0 deletions packages/eslint-plugin/tests/RuleTester.ts
Original file line number Diff line number Diff line change
@@ -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;
}
Comment on lines +24 to +28
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linking #11676 here so we don't forget: if & when we remove eslint-plugin from the TYPESCRIPT_ESLINT_PROJECT_SERVICE matrix, we could switch the default to projectService: true...


return new RuleTester({
languageOptions: { parserOptions },
});
}

export function getFixturesRootDir(): string {
return path.join(__dirname, 'fixtures');
}
1 change: 1 addition & 0 deletions packages/eslint-plugin/tests/docs.test.mts
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,7 @@ describe('Validating rule docs', () => {
parserOptions: {
disallowAutomaticSingleRunInference: true,
project: './tsconfig.json',
projectService: false,
tsconfigRootDir: FIXTURES_DIR,
},
rules: Object.fromEntries(ruleEntries),
Expand Down
15 changes: 3 additions & 12 deletions packages/eslint-plugin/tests/rules/await-thenable.test.ts
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
14 changes: 2 additions & 12 deletions packages/eslint-plugin/tests/rules/consistent-return.test.ts
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
15 changes: 4 additions & 11 deletions packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts
Original file line number Diff line number Diff line change
@@ -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, {
Expand Down
22 changes: 7 additions & 15 deletions packages/eslint-plugin/tests/rules/dot-notation.test.ts
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -163,7 +155,7 @@ foo['key_baz'];
parserOptions: {
project: './tsconfig.noPropertyAccessFromIndexSignature.json',
projectService: false,
tsconfigRootDir: rootPath,
tsconfigRootDir: rootDir,
},
},
},
Expand All @@ -181,7 +173,7 @@ foo['bar'];
parserOptions: {
project: './tsconfig.noPropertyAccessFromIndexSignature.json',
projectService: false,
tsconfigRootDir: rootPath,
tsconfigRootDir: rootDir,
},
},
},
Expand All @@ -202,7 +194,7 @@ function f<T extends Foo>(x: T) {
parserOptions: {
project: './tsconfig.noPropertyAccessFromIndexSignature.json',
projectService: false,
tsconfigRootDir: rootPath,
tsconfigRootDir: rootDir,
},
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const ruleTester = new RuleTester();
const rootDir = getFixturesRootDir();
const parserOptions = {
project: './tsconfig.json',
projectService: false,
tsconfigRootDir: rootDir,
};

Expand Down
15 changes: 3 additions & 12 deletions packages/eslint-plugin/tests/rules/no-array-delete.test.ts
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
17 changes: 6 additions & 11 deletions packages/eslint-plugin/tests/rules/no-base-to-string.test.ts
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -1382,6 +1373,7 @@ declare const foo: Bar & Foo;
languageOptions: {
parserOptions: {
project: './tsconfig.noUncheckedIndexedAccess.json',
projectService: false,
tsconfigRootDir: rootDir,
},
},
Expand Down Expand Up @@ -1632,6 +1624,7 @@ declare const foo: Bar & Foo;
languageOptions: {
parserOptions: {
project: './tsconfig.noUncheckedIndexedAccess.json',
projectService: false,
tsconfigRootDir: rootDir,
},
},
Expand Down Expand Up @@ -1882,6 +1875,7 @@ declare const foo: Bar & Foo;
languageOptions: {
parserOptions: {
project: './tsconfig.noUncheckedIndexedAccess.json',
projectService: false,
tsconfigRootDir: rootDir,
},
},
Expand Down Expand Up @@ -2132,6 +2126,7 @@ declare const foo: Bar & Foo;
languageOptions: {
parserOptions: {
project: './tsconfig.noUncheckedIndexedAccess.json',
projectService: false,
tsconfigRootDir: rootDir,
},
},
Expand Down
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
17 changes: 5 additions & 12 deletions packages/eslint-plugin/tests/rules/no-deprecated.test.ts
Original file line number Diff line number Diff line change
@@ -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, {
Expand Down
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
15 changes: 2 additions & 13 deletions packages/eslint-plugin/tests/rules/no-dynamic-delete.test.ts
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
13 changes: 2 additions & 11 deletions packages/eslint-plugin/tests/rules/no-floating-promises.test.ts
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
13 changes: 3 additions & 10 deletions packages/eslint-plugin/tests/rules/no-for-in-array.test.ts
Original file line number Diff line number Diff line change
@@ -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: [
Expand Down
Loading
Loading