From 7c7032322f55d9492e21d3bfa5da16da1f05cbce Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 3 Feb 2020 18:34:28 +0100 Subject: [PATCH] fix(typescript-estree): persisted parse and module none (#1516) --- .../create-program/createDefaultProgram.ts | 5 ++- .../create-program/createIsolatedProgram.ts | 2 +- .../src/create-program/createWatchProgram.ts | 2 ++ .../tests/lib/persistentParse.ts | 34 +++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/packages/typescript-estree/src/create-program/createDefaultProgram.ts b/packages/typescript-estree/src/create-program/createDefaultProgram.ts index c1e69b25335..e0aaf6253d7 100644 --- a/packages/typescript-estree/src/create-program/createDefaultProgram.ts +++ b/packages/typescript-estree/src/create-program/createDefaultProgram.ts @@ -39,7 +39,10 @@ function createDefaultProgram( return undefined; } - const compilerHost = ts.createCompilerHost(commandLine.options, true); + const compilerHost = ts.createCompilerHost( + commandLine.options, + /* setParentNodes */ true, + ); const oldReadFile = compilerHost.readFile; compilerHost.readFile = (fileName: string): string | undefined => path.normalize(fileName) === path.normalize(extra.filePath) diff --git a/packages/typescript-estree/src/create-program/createIsolatedProgram.ts b/packages/typescript-estree/src/create-program/createIsolatedProgram.ts index 257577d5eb2..70169c66891 100644 --- a/packages/typescript-estree/src/create-program/createIsolatedProgram.ts +++ b/packages/typescript-estree/src/create-program/createIsolatedProgram.ts @@ -46,7 +46,7 @@ function createIsolatedProgram(code: string, extra: Extra): ASTAndProgram { filename, code, ts.ScriptTarget.Latest, - true, + /* setParentNodes */ true, getScriptKind(extra, filename), ); }, diff --git a/packages/typescript-estree/src/create-program/createWatchProgram.ts b/packages/typescript-estree/src/create-program/createWatchProgram.ts index dd4401af3b6..143219998fa 100644 --- a/packages/typescript-estree/src/create-program/createWatchProgram.ts +++ b/packages/typescript-estree/src/create-program/createWatchProgram.ts @@ -218,6 +218,8 @@ function getProgramsForProjects( // cache watch program and return current program knownWatchProgramMap.set(tsconfigPath, programWatch); + // sets parent pointers in source files + program.getTypeChecker(); results.push(program); } diff --git a/packages/typescript-estree/tests/lib/persistentParse.ts b/packages/typescript-estree/tests/lib/persistentParse.ts index 98f5b1bcd0d..2b45974e677 100644 --- a/packages/typescript-estree/tests/lib/persistentParse.ts +++ b/packages/typescript-estree/tests/lib/persistentParse.ts @@ -8,6 +8,9 @@ const CONTENTS = { bar: 'console.log("bar")', 'baz/bar': 'console.log("baz bar")', 'bat/baz/bar': 'console.log("bat/baz/bar")', + number: 'const foo = 1;', + object: '(() => { })();', + string: 'let a: "a" | "b";', }; const cwdCopy = process.cwd(); @@ -304,4 +307,35 @@ describe('persistent parse', () => { baseTests(tsConfigExcludeBar, tsConfigIncludeAll); }); + + describe('tsconfig with module set', () => { + const moduleTypes = [ + 'None', + 'CommonJS', + 'AMD', + 'System', + 'UMD', + 'ES6', + 'ES2015', + 'ESNext', + ]; + + for (const module of moduleTypes) { + describe(`module ${module}`, () => { + const tsConfigIncludeAll = { + compilerOptions: { module }, + include: ['./**/*'], + }; + + const testNames = ['object', 'number', 'string', 'foo'] as const; + for (const name of testNames) { + it(`first parse of ${name} should not throw`, () => { + const PROJECT_DIR = setup(tsConfigIncludeAll); + writeFile(PROJECT_DIR, name); + expect(() => parseFile(name, PROJECT_DIR)).not.toThrow(); + }); + } + }); + } + }); });