From b49bae316bdf61fd0f4e3c28a454468d47ee09d4 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Tue, 27 Aug 2024 14:59:53 -0400 Subject: [PATCH 1/6] feat(typescript-estree): default projectService.defaultProject to 'tsconfig.json' --- docs/developers/Custom_Rules.mdx | 1 - docs/packages/Parser.mdx | 12 +++- docs/packages/Rule_Tester.mdx | 8 +-- docs/packages/TypeScript_ESTree.mdx | 1 + packages/types/src/parser-options.ts | 1 + .../create-program/createProjectService.ts | 49 +++++++++-------- .../validateDefaultProjectForFilesGlob.ts | 6 +- .../tests/lib/createProjectService.test.ts | 55 +++++++++++++++---- ...validateDefaultProjectForFilesGlob.test.ts | 24 ++------ 9 files changed, 91 insertions(+), 66 deletions(-) diff --git a/docs/developers/Custom_Rules.mdx b/docs/developers/Custom_Rules.mdx index 186d851de2db..9e51c2b36b05 100644 --- a/docs/developers/Custom_Rules.mdx +++ b/docs/developers/Custom_Rules.mdx @@ -400,7 +400,6 @@ const ruleTester = new RuleTester({ parserOptions: { projectService: { allowDefaultProjectForFiles: ['*.ts*'], - defaultProject: 'tsconfig.json', }, tsconfigRootDir: __dirname, }, diff --git a/docs/packages/Parser.mdx b/docs/packages/Parser.mdx index a75c1ca8429b..da732838e4ca 100644 --- a/docs/packages/Parser.mdx +++ b/docs/packages/Parser.mdx @@ -335,17 +335,21 @@ The behavior of `parserOptions.projectService` can be customized by setting it t parserOptions: { projectService: { allowDefaultProject: ['*.js'], - defaultProject: 'tsconfig.json', }, }, }; ``` +:::tip +See [Troubleshooting & FAQs > Typed Linting > Project Service Issues](../troubleshooting/typed-linting/index.mdx#project-service-issues) for help using these options. +::: + ##### `allowDefaultProject` +> Default `[]` _(none)_ + Globs of files to allow running with the default project compiler options despite not being matched by the project service. It takes in an array of string paths that will be resolved relative to the [`tsconfigRootDir`](#tsconfigrootdir). -When set, [`projectService.defaultProject`](#defaultproject) must be set as well. This is intended to produce type information for config files such as `eslint.config.js` that aren't included in their sibling `tsconfig.json`. Every file with type information retrieved from the default project incurs a non-trivial performance overhead to linting. @@ -358,10 +362,12 @@ There are several restrictions on this option to prevent it from being overused: ##### `defaultProject` +> Default `'tsconfig.json'` + Path to a TSConfig to use instead of TypeScript's default project configuration. It takes in a string path that will be resolved relative to the [`tsconfigRootDir`](#tsconfigrootdir). -This is required to specify which TSConfig file on disk will be used for [`projectService.allowDefaultProject`](#allowdefaultproject). +`projectService.defaultProject` only impacts the "out-of-project" files included by [`allowDefaultProject`](#allowdefaultproject). ##### `maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING` diff --git a/docs/packages/Rule_Tester.mdx b/docs/packages/Rule_Tester.mdx index f9f288511ae4..06e311fb864f 100644 --- a/docs/packages/Rule_Tester.mdx +++ b/docs/packages/Rule_Tester.mdx @@ -123,10 +123,7 @@ ruleTester.run('my-rule', rule, { ### Type-Aware Testing Type-aware rules can be tested in almost exactly the same way as regular code, using `parserOptions.projectService`. -Most rule tests can use settings like: - -- `allowDefaultProjectForFiles: ["*.ts*"]`: to include files in your tests -- `defaultProject: "tsconfig.json"`: to use the same TSConfig as other files +Most rule tests specify `parserOptions.allowDefaultProjectForFiles: ["*.ts*"]` to enable type checking on all test files. You can then test your rule by providing the type-aware config: @@ -135,9 +132,8 @@ const ruleTester = new RuleTester({ // Added lines start languageOptions: { parserOptions: { - projectServices: { + projectService: { allowDefaultProject: ['*.ts*'], - defaultProject: 'tsconfig.json', }, tsconfigRootDir: './path/to/your/folder/fixture', }, diff --git a/docs/packages/TypeScript_ESTree.mdx b/docs/packages/TypeScript_ESTree.mdx index 7e70ed1624c8..73e630827786 100644 --- a/docs/packages/TypeScript_ESTree.mdx +++ b/docs/packages/TypeScript_ESTree.mdx @@ -275,6 +275,7 @@ interface ProjectServiceOptions { /** * Path to a TSConfig to use instead of TypeScript's default project configuration. + * @default 'tsconfig.json' */ defaultProject?: string; diff --git a/packages/types/src/parser-options.ts b/packages/types/src/parser-options.ts index ab4631aa7768..42a706542fd4 100644 --- a/packages/types/src/parser-options.ts +++ b/packages/types/src/parser-options.ts @@ -50,6 +50,7 @@ interface ProjectServiceOptions { /** * Path to a TSConfig to use instead of TypeScript's default project configuration. + * @default 'tsconfig.json' */ defaultProject?: string; diff --git a/packages/typescript-estree/src/create-program/createProjectService.ts b/packages/typescript-estree/src/create-program/createProjectService.ts index f38c94ea538a..a9634985242c 100644 --- a/packages/typescript-estree/src/create-program/createProjectService.ts +++ b/packages/typescript-estree/src/create-program/createProjectService.ts @@ -42,8 +42,11 @@ export function createProjectService( jsDocParsingMode: ts.JSDocParsingMode | undefined, tsconfigRootDir: string | undefined, ): ProjectServiceSettings { - const options = typeof optionsRaw === 'object' ? optionsRaw : {}; - validateDefaultProjectForFilesGlob(options); + const options = { + defaultProject: 'tsconfig.json', + ...(typeof optionsRaw === 'object' && optionsRaw), + }; + validateDefaultProjectForFilesGlob(options.allowDefaultProject); // We import this lazily to avoid its cost for users who don't use the service // TODO: Once we drop support for TS<5.3 we can import from "typescript" directly @@ -122,31 +125,29 @@ export function createProjectService( }, }); - if (options.defaultProject) { - log('Enabling default project: %s', options.defaultProject); - let configFile: ts.ParsedCommandLine; - - try { - configFile = getParsedConfigFile( - tsserver, - options.defaultProject, - tsconfigRootDir, - ); - } catch (error) { - throw new Error( - `Could not read default project '${options.defaultProject}': ${(error as Error).message}`, - ); - } - - service.setCompilerOptionsForInferredProjects( - // NOTE: The inferred projects API is not intended for source files when a tsconfig - // exists. There is no API that generates an InferredProjectCompilerOptions suggesting - // it is meant for hard coded options passed in. Hard asserting as a work around. - // See https://github.com/microsoft/TypeScript/blob/27bcd4cb5a98bce46c9cdd749752703ead021a4b/src/server/protocol.ts#L1904 - configFile.options as ts.server.protocol.InferredProjectCompilerOptions, + log('Enabling default project: %s', options.defaultProject); + let configFile: ts.ParsedCommandLine; + + try { + configFile = getParsedConfigFile( + tsserver, + options.defaultProject, + tsconfigRootDir, + ); + } catch (error) { + throw new Error( + `Could not read project service default project '${options.defaultProject}': ${(error as Error).message}`, ); } + service.setCompilerOptionsForInferredProjects( + // NOTE: The inferred projects API is not intended for source files when a tsconfig + // exists. There is no API that generates an InferredProjectCompilerOptions suggesting + // it is meant for hard coded options passed in. Hard asserting as a work around. + // See https://github.com/microsoft/TypeScript/blob/27bcd4cb5a98bce46c9cdd749752703ead021a4b/src/server/protocol.ts#L1904 + configFile.options as ts.server.protocol.InferredProjectCompilerOptions, + ); + return { allowDefaultProject: options.allowDefaultProject, lastReloadTimestamp: performance.now(), diff --git a/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts b/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts index 1962cb5d79ef..b4e7247b137b 100644 --- a/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts +++ b/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts @@ -8,13 +8,13 @@ See https://typescript-eslint.io/troubleshooting/typed-linting#allowdefaultproje `; export function validateDefaultProjectForFilesGlob( - options: ProjectServiceOptions, + allowDefaultProject: string[] | undefined, ): void { - if (!options.allowDefaultProject?.length) { + if (!allowDefaultProject?.length) { return; } - for (const glob of options.allowDefaultProject) { + for (const glob of allowDefaultProject) { if (glob === '*') { throw new Error( `allowDefaultProject contains the overly wide '*'.${DEFAULT_PROJECT_FILES_ERROR_EXPLANATION}`, diff --git a/packages/typescript-estree/tests/lib/createProjectService.test.ts b/packages/typescript-estree/tests/lib/createProjectService.test.ts index 16b801c007a6..899f9c12bb0d 100644 --- a/packages/typescript-estree/tests/lib/createProjectService.test.ts +++ b/packages/typescript-estree/tests/lib/createProjectService.test.ts @@ -40,6 +40,10 @@ const { } = require('../../src/create-program/createProjectService'); describe('createProjectService', () => { + beforeEach(() => { + mockGetParsedConfigFile.mockReturnValue({ options: {} }); + }); + afterEach(() => { jest.resetAllMocks(); }); @@ -61,41 +65,59 @@ describe('createProjectService', () => { expect(settings.allowDefaultProject).toBeUndefined(); }); + it('throws an error with a local path when options.defaultProject is not provided and getParsedConfigFile throws a diagnostic error', () => { + mockGetParsedConfigFile.mockImplementation(() => { + throw new Error('tsconfig.json(1,1): error TS1234: Oh no!'); + }); + + expect(() => + createProjectService( + { + allowDefaultProject: ['file.js'], + }, + undefined, + undefined, + ), + ).toThrow( + /Could not read project service default project 'tsconfig.json': .+ error TS1234: Oh no!/, + ); + }); + it('throws an error with a relative path when options.defaultProject is set to a relative path and getParsedConfigFile throws a diagnostic error', () => { mockGetParsedConfigFile.mockImplementation(() => { - throw new Error('./tsconfig.json(1,1): error TS1234: Oh no!'); + throw new Error('./tsconfig.eslint.json(1,1): error TS1234: Oh no!'); }); expect(() => createProjectService( { allowDefaultProject: ['file.js'], - defaultProject: './tsconfig.json', + defaultProject: './tsconfig.eslint.json', }, undefined, undefined, ), ).toThrow( - /Could not read default project '\.\/tsconfig.json': .+ error TS1234: Oh no!/, + /Could not read project service default project '\.\/tsconfig.eslint.json': .+ error TS1234: Oh no!/, ); }); it('throws an error with a local path when options.defaultProject is set to a local path and getParsedConfigFile throws a diagnostic error', () => { mockGetParsedConfigFile.mockImplementation(() => { - throw new Error('./tsconfig.json(1,1): error TS1234: Oh no!'); + throw new Error('./tsconfig.eslint.json(1,1): error TS1234: Oh no!'); }); expect(() => createProjectService( { allowDefaultProject: ['file.js'], - defaultProject: 'tsconfig.json', + defaultProject: 'tsconfig.eslint.json', }, undefined, undefined, ), ).toThrow( - /Could not read default project 'tsconfig.json': .+ error TS1234: Oh no!/, + /Could not read project service default project 'tsconfig.eslint.json': .+ error TS1234: Oh no!/, ); }); @@ -110,24 +132,24 @@ describe('createProjectService', () => { createProjectService( { allowDefaultProject: ['file.js'], - defaultProject: 'tsconfig.json', }, undefined, undefined, ), ).toThrow( - "Could not read default project 'tsconfig.json': `getParsedConfigFile` is only supported in a Node-like environment.", + "Could not read project service default project 'tsconfig.json': `getParsedConfigFile` is only supported in a Node-like environment.", ); }); - it('uses the default projects compiler options when options.defaultProject is set and getParsedConfigFile succeeds', () => { + it('uses the default project compiler options when options.defaultProject is set and getParsedConfigFile succeeds', () => { const compilerOptions = { strict: true }; mockGetParsedConfigFile.mockReturnValue({ options: compilerOptions }); + const defaultProject = 'tsconfig.eslint.json'; const { service } = createProjectService( { allowDefaultProject: ['file.js'], - defaultProject: 'tsconfig.json', + defaultProject: defaultProject, }, undefined, undefined, @@ -136,6 +158,12 @@ describe('createProjectService', () => { expect(service.setCompilerOptionsForInferredProjects).toHaveBeenCalledWith( compilerOptions, ); + expect(mockGetParsedConfigFile).toHaveBeenCalledWith( + // eslint-disable-next-line @typescript-eslint/no-require-imports + require('typescript/lib/tsserverlibrary'), + defaultProject, + undefined, + ); }); it('uses tsconfigRootDir as getParsedConfigFile projectDirectory when provided', () => { @@ -146,7 +174,6 @@ describe('createProjectService', () => { const { service } = createProjectService( { allowDefaultProject: ['file.js'], - defaultProject: 'tsconfig.json', }, undefined, tsconfigRootDir, @@ -165,6 +192,7 @@ describe('createProjectService', () => { it('uses the default projects error debugger for error messages when enabled', () => { jest.spyOn(process.stderr, 'write').mockImplementation(); + const { service } = createProjectService(undefined, undefined, undefined); debug.enable('typescript-eslint:typescript-estree:tsserver:err'); const enabled = service.logger.loggingEnabled(); @@ -181,6 +209,7 @@ describe('createProjectService', () => { it('does not use the default projects error debugger for error messages when disabled', () => { jest.spyOn(process.stderr, 'write').mockImplementation(); + const { service } = createProjectService(undefined, undefined, undefined); const enabled = service.logger.loggingEnabled(); service.logger.msg('foo', ts.server.Msg.Err); @@ -191,6 +220,7 @@ describe('createProjectService', () => { it('uses the default projects info debugger for info messages when enabled', () => { jest.spyOn(process.stderr, 'write').mockImplementation(); + const { service } = createProjectService(undefined, undefined, undefined); debug.enable('typescript-eslint:typescript-estree:tsserver:info'); const enabled = service.logger.loggingEnabled(); @@ -207,6 +237,7 @@ describe('createProjectService', () => { it('does not use the default projects info debugger for info messages when disabled', () => { jest.spyOn(process.stderr, 'write').mockImplementation(); + const { service } = createProjectService(undefined, undefined, undefined); const enabled = service.logger.loggingEnabled(); service.logger.info('foo'); @@ -217,6 +248,7 @@ describe('createProjectService', () => { it('uses the default projects perf debugger for perf messages when enabled', () => { jest.spyOn(process.stderr, 'write').mockImplementation(); + const { service } = createProjectService(undefined, undefined, undefined); debug.enable('typescript-eslint:typescript-estree:tsserver:perf'); const enabled = service.logger.loggingEnabled(); @@ -233,6 +265,7 @@ describe('createProjectService', () => { it('does not use the default projects perf debugger for perf messages when disabled', () => { jest.spyOn(process.stderr, 'write').mockImplementation(); + const { service } = createProjectService(undefined, undefined, undefined); const enabled = service.logger.loggingEnabled(); service.logger.perftrc('foo'); diff --git a/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts b/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts index 32d76a2dad1a..f0f99363e47b 100644 --- a/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts +++ b/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts @@ -2,33 +2,21 @@ import { validateDefaultProjectForFilesGlob } from '../../src/create-program/val describe('validateDefaultProjectForFilesGlob', () => { it('does not throw when options.allowDefaultProject is an empty array', () => { - expect(() => - validateDefaultProjectForFilesGlob({ allowDefaultProject: [] }), - ).not.toThrow(); + expect(() => validateDefaultProjectForFilesGlob([])).not.toThrow(); }); it('does not throw when options.allowDefaultProject contains a non-** glob', () => { - expect(() => - validateDefaultProjectForFilesGlob({ - allowDefaultProject: ['*.js'], - }), - ).not.toThrow(); + expect(() => validateDefaultProjectForFilesGlob(['*.js'])).not.toThrow(); }); it('throws when options.allowDefaultProject contains a * glob', () => { - expect(() => - validateDefaultProjectForFilesGlob({ - allowDefaultProject: ['*'], - }), - ).toThrow(/allowDefaultProject contains the overly wide '\*'\./); + expect(() => validateDefaultProjectForFilesGlob(['*'])).toThrow( + /allowDefaultProject contains the overly wide '\*'\./, + ); }); it('throws when options.allowDefaultProject contains a ** glob', () => { - expect(() => - validateDefaultProjectForFilesGlob({ - allowDefaultProject: ['**/*.js'], - }), - ).toThrow( + expect(() => validateDefaultProjectForFilesGlob(['**/*.js'])).toThrow( /allowDefaultProject glob '\*\*\/\*\.js' contains a disallowed '\*\*'\./, ); }); From 2564ae56cb4004f9d7b0c634dab8e8bc9a0b64b5 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 28 Aug 2024 11:15:23 -0400 Subject: [PATCH 2/6] fix lint --- .../src/create-program/validateDefaultProjectForFilesGlob.ts | 2 -- .../typescript-estree/tests/lib/createProjectService.test.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts b/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts index b4e7247b137b..67741dfcc8c4 100644 --- a/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts +++ b/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts @@ -1,5 +1,3 @@ -import type { ProjectServiceOptions } from '../parser-options'; - export const DEFAULT_PROJECT_FILES_ERROR_EXPLANATION = ` Having many files run with the default project is known to cause performance issues and slow down linting. diff --git a/packages/typescript-estree/tests/lib/createProjectService.test.ts b/packages/typescript-estree/tests/lib/createProjectService.test.ts index 899f9c12bb0d..d175e3de0b1e 100644 --- a/packages/typescript-estree/tests/lib/createProjectService.test.ts +++ b/packages/typescript-estree/tests/lib/createProjectService.test.ts @@ -149,7 +149,7 @@ describe('createProjectService', () => { const { service } = createProjectService( { allowDefaultProject: ['file.js'], - defaultProject: defaultProject, + defaultProject, }, undefined, undefined, From 75461b3e44dd1f3f769df7d94a74b723804c8be2 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 28 Aug 2024 11:27:20 -0400 Subject: [PATCH 3/6] fix: path relativity in getParsedConfigFile --- .../src/create-program/getParsedConfigFile.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/create-program/getParsedConfigFile.ts b/packages/typescript-estree/src/create-program/getParsedConfigFile.ts index a48b02ea0fd2..6429bb87ed7a 100644 --- a/packages/typescript-estree/src/create-program/getParsedConfigFile.ts +++ b/packages/typescript-estree/src/create-program/getParsedConfigFile.ts @@ -33,7 +33,11 @@ function getParsedConfigFile( fileExists: fs.existsSync, getCurrentDirectory, readDirectory: tsserver.sys.readDirectory, - readFile: file => fs.readFileSync(file, 'utf-8'), + readFile: file => + fs.readFileSync( + path.isAbsolute(file) ? file : path.join(getCurrentDirectory(), file), + 'utf-8', + ), useCaseSensitiveFileNames: tsserver.sys.useCaseSensitiveFileNames, }, ); From 0f404a54c9fb63e3b0531599d37ca634b00a9296 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 30 Aug 2024 09:24:03 -0400 Subject: [PATCH 4/6] Ignore project-true --- packages/typescript-estree/jest.config.js | 6 +++++ .../tests/lib/parse.project-true.test.ts | 22 +++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/typescript-estree/jest.config.js b/packages/typescript-estree/jest.config.js index f32706dc98f6..722dac99f754 100644 --- a/packages/typescript-estree/jest.config.js +++ b/packages/typescript-estree/jest.config.js @@ -1,8 +1,14 @@ 'use strict'; // @ts-check +console.log('with', process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE); + /** @type {import('@jest/types').Config.InitialOptions} */ module.exports = { ...require('../../jest.config.base.js'), testRegex: ['./tests/lib/.*\\.test\\.ts$'], + testPathIgnorePatterns: process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE && [ + '/node_modules/', + 'project-true', + ], }; diff --git a/packages/typescript-estree/tests/lib/parse.project-true.test.ts b/packages/typescript-estree/tests/lib/parse.project-true.test.ts index bf0c3af45db2..991d2b618c32 100644 --- a/packages/typescript-estree/tests/lib/parse.project-true.test.ts +++ b/packages/typescript-estree/tests/lib/parse.project-true.test.ts @@ -35,17 +35,15 @@ describe('parseAndGenerateServices', () => { }); }); - if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { - it('throws an error when a parent project does not exist', () => { - expect(() => - parser.parseAndGenerateServices('const a = true', { - ...config, - filePath: join(PROJECT_DIR, 'notIncluded.ts'), - }), - ).toThrow( - /project was set to `true` but couldn't find any tsconfig.json relative to '.+[/\\]tests[/\\]fixtures[/\\]projectTrue[/\\]notIncluded.ts' within '.+[/\\]tests[/\\]fixtures[/\\]projectTrue'./, - ); - }); - } + it('throws an error when a parent project does not exist', () => { + expect(() => + parser.parseAndGenerateServices('const a = true', { + ...config, + filePath: join(PROJECT_DIR, 'notIncluded.ts'), + }), + ).toThrow( + /project was set to `true` but couldn't find any tsconfig.json relative to '.+[/\\]tests[/\\]fixtures[/\\]projectTrue[/\\]notIncluded.ts' within '.+[/\\]tests[/\\]fixtures[/\\]projectTrue'./, + ); + }); }); }); From 3f2b8bfd339de83879a5797e8ed0f58a69ad98dc Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 30 Aug 2024 11:57:46 -0400 Subject: [PATCH 5/6] must be string[] --- packages/typescript-estree/jest.config.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/typescript-estree/jest.config.js b/packages/typescript-estree/jest.config.js index 722dac99f754..1d8d345c5780 100644 --- a/packages/typescript-estree/jest.config.js +++ b/packages/typescript-estree/jest.config.js @@ -7,8 +7,7 @@ console.log('with', process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE); module.exports = { ...require('../../jest.config.base.js'), testRegex: ['./tests/lib/.*\\.test\\.ts$'], - testPathIgnorePatterns: process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE && [ - '/node_modules/', - 'project-true', - ], + testPathIgnorePatterns: process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE + ? ['/node_modules/', 'project-true'] + : [], }; From 80deb12f9290fb5cd54d9e1454c42e99489ff96e Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 30 Aug 2024 11:58:28 -0400 Subject: [PATCH 6/6] no log please --- packages/typescript-estree/jest.config.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/typescript-estree/jest.config.js b/packages/typescript-estree/jest.config.js index 1d8d345c5780..990924c7de23 100644 --- a/packages/typescript-estree/jest.config.js +++ b/packages/typescript-estree/jest.config.js @@ -1,8 +1,6 @@ 'use strict'; // @ts-check -console.log('with', process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE); - /** @type {import('@jest/types').Config.InitialOptions} */ module.exports = { ...require('../../jest.config.base.js'),