Skip to content

Commit ea69ed3

Browse files
committed
Remove more usage of typescript
1 parent 6e06644 commit ea69ed3

File tree

3 files changed

+93
-55
lines changed

3 files changed

+93
-55
lines changed

src/IncrementalChecker.ts

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,42 +10,7 @@ import { NormalizedMessage } from './NormalizedMessage';
1010
import { CancellationToken } from './CancellationToken';
1111
import * as minimatch from 'minimatch';
1212
import { VueProgram } from './VueProgram';
13-
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-
}
13+
import { TypeScriptInstance } from './TypeScriptInstance';
4914

5015
// Need some augmentation here - linterOptions.exclude is not (yet) part of the official
5116
// types for tslint.
@@ -231,9 +196,10 @@ export class IncrementalChecker {
231196
loadVueProgram() {
232197
this.programConfig =
233198
this.programConfig ||
234-
VueProgram.loadProgramConfig(this.programConfigFile);
199+
VueProgram.loadProgramConfig(this.typescript, this.programConfigFile);
235200

236201
return VueProgram.createProgram(
202+
this.typescript,
237203
this.programConfig,
238204
path.dirname(this.programConfigFile),
239205
this.files,

src/TypeScriptInstance.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import * as ts from 'typescript';
2+
3+
// TODO: keep in sync with TypeScript
4+
export enum ScriptKind {
5+
Unknown = 0,
6+
JS = 1,
7+
JSX = 2,
8+
TS = 3,
9+
TSX = 4,
10+
External = 5,
11+
JSON = 6,
12+
/**
13+
* Used on extensions that doesn't define the ScriptKind but the content defines it.
14+
* Deferred extensions are going to be included in all project contexts.
15+
*/
16+
Deferred = 7
17+
}
18+
19+
export interface TypeScriptInstance {
20+
parseJsonConfigFileContent(
21+
json: any,
22+
host: ts.ParseConfigHost,
23+
basePath: string,
24+
existingOptions?: ts.CompilerOptions,
25+
configFileName?: string,
26+
resolutionStack?: ts.Path[],
27+
extraFileExtensions?: ReadonlyArray<ts.FileExtensionInfo>
28+
): ts.ParsedCommandLine;
29+
readConfigFile(
30+
fileName: string,
31+
readFile: (path: string) => string | undefined
32+
): {
33+
config?: any;
34+
error?: ts.Diagnostic;
35+
};
36+
createCompilerHost(
37+
options: ts.CompilerOptions,
38+
setParentNodes?: boolean
39+
): ts.CompilerHost;
40+
createProgram(
41+
rootNames: ReadonlyArray<string>,
42+
options: ts.CompilerOptions,
43+
host?: ts.CompilerHost,
44+
oldProgram?: ts.Program,
45+
configFileParsingDiagnostics?: ReadonlyArray<ts.Diagnostic>
46+
): ts.Program;
47+
flattenDiagnosticMessageText(
48+
messageText: string | ts.DiagnosticMessageChain | undefined,
49+
newLine: string
50+
): string;
51+
resolveModuleName(
52+
moduleName: string,
53+
containingFile: string,
54+
compilerOptions: ts.CompilerOptions,
55+
host: ts.ModuleResolutionHost,
56+
cache?: ts.ModuleResolutionCache
57+
): ts.ResolvedModuleWithFailedLookupLocations;
58+
createSourceFile(
59+
fileName: string,
60+
sourceText: string,
61+
languageVersion: ts.ScriptTarget,
62+
setParentNodes?: boolean,
63+
scriptKind?: ts.ScriptKind
64+
): ts.SourceFile;
65+
66+
sys: ts.System;
67+
}

src/VueProgram.ts

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as path from 'path';
33
import * as ts from 'typescript';
44
import { FilesRegister } from './FilesRegister';
55
import { FilesWatcher } from './FilesWatcher';
6+
import { ScriptKind, TypeScriptInstance } from './TypeScriptInstance';
67
// tslint:disable-next-line
78
import * as vueCompiler from 'vue-template-compiler';
89

@@ -12,15 +13,15 @@ interface ResolvedScript {
1213
}
1314

1415
export class VueProgram {
15-
static loadProgramConfig(configFile: string) {
16+
static loadProgramConfig(typescript: TypeScriptInstance, configFile: string) {
1617
const extraExtensions = ['vue'];
1718

1819
const parseConfigHost: ts.ParseConfigHost = {
19-
fileExists: ts.sys.fileExists,
20-
readFile: ts.sys.readFile,
21-
useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
20+
fileExists: typescript.sys.fileExists,
21+
readFile: typescript.sys.readFile,
22+
useCaseSensitiveFileNames: typescript.sys.useCaseSensitiveFileNames,
2223
readDirectory: (rootDir, extensions, excludes, includes, depth) => {
23-
return ts.sys.readDirectory(
24+
return typescript.sys.readDirectory(
2425
rootDir,
2526
extensions.concat(extraExtensions),
2627
excludes,
@@ -30,11 +31,14 @@ export class VueProgram {
3031
}
3132
};
3233

33-
const parsed = ts.parseJsonConfigFileContent(
34+
const parsed = typescript.parseJsonConfigFileContent(
3435
// Regardless of the setting in the tsconfig.json we want isolatedModules to be false
35-
Object.assign(ts.readConfigFile(configFile, ts.sys.readFile).config, {
36-
isolatedModules: false
37-
}),
36+
Object.assign(
37+
typescript.readConfigFile(configFile, typescript.sys.readFile).config,
38+
{
39+
isolatedModules: false
40+
}
41+
),
3842
parseConfigHost,
3943
path.dirname(configFile)
4044
);
@@ -102,13 +106,14 @@ export class VueProgram {
102106
}
103107

104108
static createProgram(
109+
typescript: TypeScriptInstance,
105110
programConfig: ts.ParsedCommandLine,
106111
basedir: string,
107112
files: FilesRegister,
108113
watcher: FilesWatcher,
109114
oldProgram: ts.Program
110115
) {
111-
const host = ts.createCompilerHost(programConfig.options);
116+
const host = typescript.createCompilerHost(programConfig.options);
112117
const realGetSourceFile = host.getSourceFile;
113118

114119
// We need a host that can parse Vue SFCs (single file components).
@@ -137,7 +142,7 @@ export class VueProgram {
137142
// get typescript contents from Vue file
138143
if (source && VueProgram.isVue(filePath)) {
139144
const resolved = VueProgram.resolveScriptBlock(source.text);
140-
source = ts.createSourceFile(
145+
source = typescript.createSourceFile(
141146
filePath,
142147
resolved.content,
143148
languageVersion,
@@ -155,7 +160,7 @@ export class VueProgram {
155160

156161
for (const moduleName of moduleNames) {
157162
// Try to use standard resolution.
158-
const { resolvedModule } = ts.resolveModuleName(
163+
const { resolvedModule } = typescript.resolveModuleName(
159164
moduleName,
160165
containingFile,
161166
programConfig.options,
@@ -221,7 +226,7 @@ export class VueProgram {
221226
return resolvedModules;
222227
};
223228

224-
return ts.createProgram(
229+
return typescript.createProgram(
225230
programConfig.fileNames,
226231
programConfig.options,
227232
host,
@@ -231,14 +236,14 @@ export class VueProgram {
231236

232237
private static getScriptKindByLang(lang: string) {
233238
if (lang === 'ts') {
234-
return ts.ScriptKind.TS;
239+
return ScriptKind.TS;
235240
} else if (lang === 'tsx') {
236-
return ts.ScriptKind.TSX;
241+
return ScriptKind.TSX;
237242
} else if (lang === 'jsx') {
238-
return ts.ScriptKind.JSX;
243+
return ScriptKind.JSX;
239244
} else {
240245
// when lang is "js" or no lang specified
241-
return ts.ScriptKind.JS;
246+
return ScriptKind.JS;
242247
}
243248
}
244249

@@ -264,7 +269,7 @@ export class VueProgram {
264269
// No <script> block
265270
if (!script) {
266271
return {
267-
scriptKind: ts.ScriptKind.JS,
272+
scriptKind: ScriptKind.JS,
268273
content: '/* tslint:disable */\nexport default {};\n'
269274
};
270275
}

0 commit comments

Comments
 (0)