From 4db87f8448700d6745b9bc6fd7ee70806991a1a8 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Tue, 26 Dec 2023 13:05:47 -0500 Subject: [PATCH 1/2] fix(typescript-estree): only create project serve from env setting if project is enabled --- .../src/parseSettings/createParseSettings.ts | 8 +-- .../tests/lib/createParseSettings.test.ts | 50 +++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/packages/typescript-estree/src/parseSettings/createParseSettings.ts b/packages/typescript-estree/src/parseSettings/createParseSettings.ts index a30942aa0d5b..fee7dbc1cb4c 100644 --- a/packages/typescript-estree/src/parseSettings/createParseSettings.ts +++ b/packages/typescript-estree/src/parseSettings/createParseSettings.ts @@ -80,10 +80,10 @@ export function createParseSettings( errorOnTypeScriptSyntacticAndSemanticIssues: false, errorOnUnknownASTType: options.errorOnUnknownASTType === true, EXPERIMENTAL_projectService: - (options.EXPERIMENTAL_useProjectService && - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'false') || - (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true' && - options.EXPERIMENTAL_useProjectService !== false) + options.EXPERIMENTAL_useProjectService || + (options.project && + options.EXPERIMENTAL_useProjectService !== false && + process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true') ? (TSSERVER_PROJECT_SERVICE ??= createProjectService( options.EXPERIMENTAL_useProjectService, jsDocParsingMode, diff --git a/packages/typescript-estree/tests/lib/createParseSettings.test.ts b/packages/typescript-estree/tests/lib/createParseSettings.test.ts index 043050cdd2bc..1e2a99982cc4 100644 --- a/packages/typescript-estree/tests/lib/createParseSettings.test.ts +++ b/packages/typescript-estree/tests/lib/createParseSettings.test.ts @@ -1,6 +1,56 @@ import { createParseSettings } from '../../src/parseSettings/createParseSettings'; +const projectService = { service: true }; + +jest.mock('../../src/create-program/createProjectService', () => ({ + createProjectService: () => projectService, +})); + describe('createParseSettings', () => { + describe('EXPERIMENTAL_projectService', () => { + it('is created when options.EXPERIMENTAL_useProjectService is enabled', () => { + process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'false'; + + const parseSettings = createParseSettings('', { + EXPERIMENTAL_useProjectService: true, + }); + + expect(parseSettings.EXPERIMENTAL_projectService).toBe(projectService); + }); + + it('is created when options.EXPERIMENTAL_useProjectService is undefined, options.project is true, and process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER is true', () => { + process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'true'; + + const parseSettings = createParseSettings('', { + EXPERIMENTAL_useProjectService: undefined, + project: true, + }); + + expect(parseSettings.EXPERIMENTAL_projectService).toBe(projectService); + }); + + it('is not created when options.EXPERIMENTAL_useProjectService is undefined, options.project is falsy, and process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER is true', () => { + process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'true'; + + const parseSettings = createParseSettings('', { + EXPERIMENTAL_useProjectService: undefined, + }); + + expect(parseSettings.EXPERIMENTAL_projectService).toBeUndefined(); + }); + + it('is not created when options.EXPERIMENTAL_useProjectService is false, options.project is true, and process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER is true', () => { + process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'true'; + + const parseSettings = createParseSettings('', { + EXPERIMENTAL_useProjectService: false, + project: true, + }); + + expect(parseSettings.EXPERIMENTAL_projectService).toBeUndefined(); + }); + }); + describe('tsconfigMatchCache', () => { it('reuses the TSConfig match cache when called a subsequent time', () => { const parseSettings1 = createParseSettings('input.ts'); From 26a736c0158591419b79525a3edee48a99a9e79d Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sat, 6 Jan 2024 19:02:12 -0500 Subject: [PATCH 2/2] fix lint --- .../typescript-estree/tests/lib/createParseSettings.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typescript-estree/tests/lib/createParseSettings.test.ts b/packages/typescript-estree/tests/lib/createParseSettings.test.ts index 1e2a99982cc4..cf3832b991f2 100644 --- a/packages/typescript-estree/tests/lib/createParseSettings.test.ts +++ b/packages/typescript-estree/tests/lib/createParseSettings.test.ts @@ -3,7 +3,7 @@ import { createParseSettings } from '../../src/parseSettings/createParseSettings const projectService = { service: true }; jest.mock('../../src/create-program/createProjectService', () => ({ - createProjectService: () => projectService, + createProjectService: (): typeof projectService => projectService, })); describe('createParseSettings', () => {