Skip to content

Commit 03aaf7c

Browse files
committed
addressed PR feedback
1 parent a72994d commit 03aaf7c

File tree

12 files changed

+185
-182
lines changed

12 files changed

+185
-182
lines changed

src/compiler/core.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ namespace ts {
714714
/**
715715
* List of supported extensions in order of file resolution precedence.
716716
*/
717-
export const supportedExtensions = [".ts", ".d.ts", ".tsx"];
717+
export const supportedExtensions = [".ts", ".tsx", ".d.ts"];
718718

719719
const extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"];
720720
export function removeFileExtension(path: string): string {

src/compiler/program.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,7 @@ namespace ts {
152152

153153
const newLine = getNewLineCharacter(options);
154154

155-
let moduleResolutionHost: ModuleResolutionHost = {
156-
fileExists: fileName => sys.fileExists(fileName),
157-
}
158-
155+
159156
return {
160157
getSourceFile,
161158
getDefaultLibFileName: options => combinePaths(getDirectoryPath(normalizePath(sys.getExecutingFilePath())), getDefaultLibFileName(options)),
@@ -164,7 +161,8 @@ namespace ts {
164161
useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames,
165162
getCanonicalFileName,
166163
getNewLine: () => newLine,
167-
getModuleResolutionHost: () => moduleResolutionHost
164+
fileExists: fileName => sys.fileExists(fileName),
165+
readFile: fileName => sys.readFile(fileName)
168166
};
169167
}
170168

@@ -228,11 +226,10 @@ namespace ts {
228226
if (!options.noResolve) {
229227
resolveModuleNamesWorker = host.resolveModuleNames;
230228
if (!resolveModuleNamesWorker) {
231-
Debug.assert(host.getModuleResolutionHost !== undefined);
232229
let defaultResolver = getDefaultModuleNameResolver(options);
233230
resolveModuleNamesWorker = (moduleNames, containingFile) => {
234231
return map(moduleNames, moduleName => {
235-
let moduleResolution = defaultResolver(moduleName, containingFile, options, host.getModuleResolutionHost());
232+
let moduleResolution = defaultResolver(moduleName, containingFile, options, host);
236233
return moduleResolution.resolvedFileName;
237234
});
238235
}
@@ -248,7 +245,8 @@ namespace ts {
248245
if ((oldOptions.module !== options.module) ||
249246
(oldOptions.noResolve !== options.noResolve) ||
250247
(oldOptions.target !== options.target) ||
251-
(oldOptions.noLib !== options.noLib)) {
248+
(oldOptions.noLib !== options.noLib) ||
249+
(oldOptions.jsx !== options.jsx)) {
252250
oldProgram = undefined;
253251
}
254252
}

src/compiler/types.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2244,6 +2244,7 @@ namespace ts {
22442244

22452245
export interface ModuleResolutionHost {
22462246
fileExists(fileName: string): boolean;
2247+
readFile(fileName: string): string;
22472248
}
22482249

22492250
export interface ResolvedModule {
@@ -2253,7 +2254,7 @@ namespace ts {
22532254

22542255
export type ModuleNameResolver = (moduleName: string, containingFile: string, options: CompilerOptions, host: ModuleResolutionHost) => ResolvedModule;
22552256

2256-
export interface CompilerHost {
2257+
export interface CompilerHost extends ModuleResolutionHost {
22572258
getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile;
22582259
getCancellationToken?(): CancellationToken;
22592260
getDefaultLibFileName(options: CompilerOptions): string;
@@ -2263,12 +2264,14 @@ namespace ts {
22632264
useCaseSensitiveFileNames(): boolean;
22642265
getNewLine(): string;
22652266

2266-
// Compiler host must implement one of these methods
2267-
// if getModuleResolutionHost is implemented then compiler will apply one of built-in ways to resolve module names
2268-
// and ModuleResolutionHost will be used to ask host specific questions
2269-
// if resolveModuleName is implemented - this will mean that host is completely in charge of module name resolution
2267+
/*
2268+
* CompilerHost must either implement resolveModuleNames (in case if it wants to be completely in charge of
2269+
* module name resolution) or provide implementation for methods from ModuleResolutionHost (in this case compiler
2270+
* will appply built-in module resolution logic and use members of ModuleResolutionHost to ask host specific questions).
2271+
* If resolveModuleNames is implemented then implementation for members from ModuleResolutionHost can be just
2272+
* 'throw new Error("NotImplemented")'
2273+
*/
22702274
resolveModuleNames?(moduleNames: string[], containingFile: string): string[];
2271-
getModuleResolutionHost?(): ModuleResolutionHost;
22722275
}
22732276

22742277
export interface TextSpan {

src/harness/harness.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -893,11 +893,7 @@ module Harness {
893893
newLineKind === ts.NewLineKind.CarriageReturnLineFeed ? carriageReturnLineFeed :
894894
newLineKind === ts.NewLineKind.LineFeed ? lineFeed :
895895
ts.sys.newLine;
896-
897-
let moduleResolutionHost: ts.ModuleResolutionHost = {
898-
fileExists: fileName => getSourceFile(fileName, ts.ScriptTarget.ES5) !== undefined,
899-
}
900-
896+
901897
return {
902898
getCurrentDirectory,
903899
getSourceFile,
@@ -906,7 +902,8 @@ module Harness {
906902
getCanonicalFileName,
907903
useCaseSensitiveFileNames: () => useCaseSensitiveFileNames,
908904
getNewLine: () => newLine,
909-
getModuleResolutionHost: () => moduleResolutionHost
905+
fileExists: fileName => getSourceFile(fileName, ts.ScriptTarget.ES5) !== undefined,
906+
readFile: (fileName: string): string => { throw new Error("NotYetImplemented"); }
910907
};
911908
}
912909

src/harness/harnessLanguageService.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,10 @@ module Harness.LanguageService {
230230
throw new Error("NYI");
231231
}
232232
fileExists(fileName: string) { return this.getScriptInfo(fileName) !== undefined; }
233-
233+
readFile(fileName: string) {
234+
let snapshot = this.nativeHost.getScriptSnapshot(fileName);
235+
return snapshot && snapshot.getText(0, snapshot.getLength());
236+
}
234237
log(s: string): void { this.nativeHost.log(s); }
235238
trace(s: string): void { this.nativeHost.trace(s); }
236239
error(s: string): void { this.nativeHost.error(s); }

src/harness/projectsRunner.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,6 @@ class ProjectRunner extends RunnerBase {
129129
getSourceFileText: (fileName: string) => string,
130130
writeFile: (fileName: string, data: string, writeByteOrderMark: boolean) => void): CompileProjectFilesResult {
131131

132-
let moduleResolutionHost: ts.ModuleResolutionHost = {
133-
fileExists: fileName => getSourceFile(fileName, ts.ScriptTarget.ES5) !== undefined,
134-
}
135-
136132
let program = ts.createProgram(getInputFiles(), createCompilerOptions(), createCompilerHost());
137133
let errors = ts.getPreEmitDiagnostics(program);
138134

@@ -196,7 +192,8 @@ class ProjectRunner extends RunnerBase {
196192
getCanonicalFileName: Harness.Compiler.getCanonicalFileName,
197193
useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,
198194
getNewLine: () => ts.sys.newLine,
199-
getModuleResolutionHost: () => moduleResolutionHost
195+
fileExists: fileName => getSourceFile(fileName, ts.ScriptTarget.ES5) !== undefined,
196+
readFile: fileName => Harness.IO.readFile(fileName)
200197
};
201198
}
202199
}

src/server/editorServices.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,13 @@ namespace ts.server {
9494
constructor(public host: ServerHost, public project: Project) {
9595
this.resolvedModuleNames = ts.createFileMap<Map<TimestampedResolvedModule>>(ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames))
9696
this.moduleResolutionHost = {
97-
fileExists: fileName => this.fileExists(fileName)
97+
fileExists: fileName => this.fileExists(fileName),
98+
readFile: fileName => this.host.readFile(fileName)
9899
}
99100
}
100101

101102
resolveModuleNames(moduleNames: string[], containingFile: string): string[] {
102-
let currentResolutionsInFile = this.resolvedModuleNames.get(containingFile);
103+
let currentResolutionsInFile = this.resolvedModuleNames.get(containingFile);
103104

104105
let newResolutions: Map<TimestampedResolvedModule> = {};
105106
let resolvedFileNames: string[] = [];

0 commit comments

Comments
 (0)