Skip to content

Commit 8c4bd2d

Browse files
committed
Remove typscript usage from IncrementalChecker
1 parent a077a4b commit 8c4bd2d

File tree

1 file changed

+55
-7
lines changed

1 file changed

+55
-7
lines changed

src/IncrementalChecker.ts

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,42 @@ import { CancellationToken } from './CancellationToken';
1111
import * as minimatch from 'minimatch';
1212
import { VueProgram } from './VueProgram';
1313

14+
interface TypeScriptInstance {
15+
parseJsonConfigFileContent(
16+
json: any,
17+
host: ts.ParseConfigHost,
18+
basePath: string,
19+
existingOptions?: ts.CompilerOptions,
20+
configFileName?: string,
21+
resolutionStack?: ts.Path[],
22+
extraFileExtensions?: ReadonlyArray<ts.FileExtensionInfo>
23+
): ts.ParsedCommandLine;
24+
readConfigFile(
25+
fileName: string,
26+
readFile: (path: string) => string | undefined
27+
): {
28+
config?: any;
29+
error?: ts.Diagnostic;
30+
};
31+
createCompilerHost(
32+
options: ts.CompilerOptions,
33+
setParentNodes?: boolean
34+
): ts.CompilerHost;
35+
createProgram(
36+
rootNames: ReadonlyArray<string>,
37+
options: ts.CompilerOptions,
38+
host?: ts.CompilerHost,
39+
oldProgram?: ts.Program,
40+
configFileParsingDiagnostics?: ReadonlyArray<ts.Diagnostic>
41+
): ts.Program;
42+
flattenDiagnosticMessageText(
43+
messageText: string | ts.DiagnosticMessageChain | undefined,
44+
newLine: string
45+
): string;
46+
47+
sys: ts.System;
48+
}
49+
1450
// Need some augmentation here - linterOptions.exclude is not (yet) part of the official
1551
// types for tslint.
1652
interface ConfigurationFile extends Configuration.IConfigurationFile {
@@ -34,6 +70,7 @@ export class IncrementalChecker {
3470
linterConfig: ConfigurationFile;
3571
linterExclusions: minimatch.IMinimatch[];
3672

73+
typescript: TypeScriptInstance;
3774
program: ts.Program;
3875
programConfig: ts.ParsedCommandLine;
3976
watcher: FilesWatcher;
@@ -50,6 +87,7 @@ export class IncrementalChecker {
5087
checkSyntacticErrors: boolean,
5188
vue: boolean
5289
) {
90+
// TODO: set `typescript`
5391
this.programConfigFile = programConfigFile;
5492
this.compilerOptions = compilerOptions;
5593
this.linterConfigFile = linterConfigFile;
@@ -71,18 +109,25 @@ export class IncrementalChecker {
71109
}));
72110
}
73111

74-
static loadProgramConfig(configFile: string, compilerOptions: object) {
75-
const tsconfig = ts.readConfigFile(configFile, ts.sys.readFile).config;
112+
static loadProgramConfig(
113+
typescript: TypeScriptInstance,
114+
configFile: string,
115+
compilerOptions: object
116+
) {
117+
const tsconfig = typescript.readConfigFile(
118+
configFile,
119+
typescript.sys.readFile
120+
).config;
76121

77122
tsconfig.compilerOptions = tsconfig.compilerOptions || {};
78123
tsconfig.compilerOptions = {
79124
...tsconfig.compilerOptions,
80125
...compilerOptions
81126
};
82127

83-
const parsed = ts.parseJsonConfigFileContent(
128+
const parsed = typescript.parseJsonConfigFileContent(
84129
tsconfig,
85-
ts.sys,
130+
typescript.sys,
86131
path.dirname(configFile)
87132
);
88133

@@ -98,12 +143,13 @@ export class IncrementalChecker {
98143
}
99144

100145
static createProgram(
146+
typescript: TypeScriptInstance,
101147
programConfig: ts.ParsedCommandLine,
102148
files: FilesRegister,
103149
watcher: FilesWatcher,
104150
oldProgram: ts.Program
105151
) {
106-
const host = ts.createCompilerHost(programConfig.options);
152+
const host = typescript.createCompilerHost(programConfig.options);
107153
const realGetSourceFile = host.getSourceFile;
108154

109155
host.getSourceFile = (filePath, languageVersion, onError) => {
@@ -129,7 +175,7 @@ export class IncrementalChecker {
129175
return files.getData(filePath).source;
130176
};
131177

132-
return ts.createProgram(
178+
return typescript.createProgram(
133179
programConfig.fileNames,
134180
programConfig.options,
135181
host,
@@ -217,11 +263,13 @@ export class IncrementalChecker {
217263
this.programConfig =
218264
this.programConfig ||
219265
IncrementalChecker.loadProgramConfig(
266+
this.typescript,
220267
this.programConfigFile,
221268
this.compilerOptions
222269
);
223270

224271
return IncrementalChecker.createProgram(
272+
this.typescript,
225273
this.programConfig,
226274
this.files,
227275
this.watcher,
@@ -272,7 +320,7 @@ export class IncrementalChecker {
272320
return NormalizedMessage.deduplicate(
273321
diagnostics.map(d =>
274322
NormalizedMessage.createFromDiagnostic(
275-
ts.flattenDiagnosticMessageText,
323+
this.typescript.flattenDiagnosticMessageText,
276324
d
277325
)
278326
)

0 commit comments

Comments
 (0)