From be4b2f32e520e993b8ab1d1e7e8c30876542b00e Mon Sep 17 00:00:00 2001 From: Emanuel Hoogeveen Date: Tue, 14 May 2024 17:27:28 +0200 Subject: [PATCH 1/2] fix(typescript-estree): don't add in-project files to defaultProjectMatchedFiles Only add path to defaultProjectMatchedFiles if opened.configFileName is falsy. --- .../typescript-estree/src/useProgramFromProjectService.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/useProgramFromProjectService.ts b/packages/typescript-estree/src/useProgramFromProjectService.ts index 8f18b08ed788..9cdfc52107ad 100644 --- a/packages/typescript-estree/src/useProgramFromProjectService.ts +++ b/packages/typescript-estree/src/useProgramFromProjectService.ts @@ -83,7 +83,9 @@ export function useProgramFromProjectService( return undefined; } - defaultProjectMatchedFiles.add(filePathAbsolute); + if (!opened.configFileName) { + defaultProjectMatchedFiles.add(filePathAbsolute); + } if (defaultProjectMatchedFiles.size > maximumDefaultProjectFileMatchCount) { throw new Error( `Too many files (>${maximumDefaultProjectFileMatchCount}) have matched the default project.${DEFAULT_PROJECT_FILES_ERROR_EXPLANATION} From 449d30e812f367cec83c490dfea4134265291d49 Mon Sep 17 00:00:00 2001 From: Emanuel Hoogeveen Date: Wed, 15 May 2024 20:25:21 +0200 Subject: [PATCH 2/2] test(typescript-estree): add additional unit test for project service Ensure it does not throw for in-project files --- .../lib/useProgramFromProjectService.test.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts b/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts index 5b4a9b8cabba..26989c8779fc 100644 --- a/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts +++ b/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts @@ -220,4 +220,29 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr expect(actual).toBe(program); }); + + it('returns a created program when hasFullTypeInformation is disabled, the file is in the project service, the service has a matching program, and no out-of-project files are allowed', () => { + const { service } = createMockProjectService(); + const program = { getSourceFile: jest.fn() }; + + mockGetProgram.mockReturnValueOnce(program); + + service.openClientFile.mockReturnValueOnce({ + configFileName: 'tsconfig.json', + }); + mockCreateProjectProgram.mockReturnValueOnce(program); + + const actual = useProgramFromProjectService( + createProjectServiceSettings({ + allowDefaultProjectForFiles: [], + maximumDefaultProjectFileMatchCount: 0, + service, + }), + mockParseSettings, + false, + new Set(), + ); + + expect(actual).toBe(program); + }); });