diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 68c9bd06825..9ad692f3b6c 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -17,7 +17,7 @@ namespace ts { True = -1 } - export function createFileMap(getCanonicalFileName: (fileName: string) => string): FileMap { + export function createFileMap(getCanonicalFileName: (fileName: string) => string, currentDirectory: string): FileMap { let files: Map = {}; return { get, @@ -50,7 +50,7 @@ namespace ts { } function normalizeKey(key: string) { - return getCanonicalFileName(normalizeSlashes(key)); + return getCanonicalFileName(getNormalizedAbsolutePath(key, currentDirectory)); } function clear() { diff --git a/src/compiler/program.ts b/src/compiler/program.ts index e9f659792f9..5a27aa108dc 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -346,10 +346,10 @@ namespace ts { ? ((moduleNames: string[], containingFile: string) => host.resolveModuleNames(moduleNames, containingFile)) : ((moduleNames: string[], containingFile: string) => map(moduleNames, moduleName => resolveModuleName(moduleName, containingFile, options, host).resolvedModule)); - let filesByName = createFileMap(getCanonicalFileName); + let filesByName = createFileMap(getCanonicalFileName, currentDirectory); // stores 'filename -> file association' ignoring case // used to track cases when two file names differ only in casing - let filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? createFileMap(fileName => fileName.toLowerCase()) : undefined; + let filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? createFileMap(fileName => fileName.toLowerCase(), currentDirectory) : undefined; if (oldProgram) { // check properties that can affect structure of the program or module resolution strategy diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index d2e16487d07..9384244c831 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -93,8 +93,8 @@ namespace ts.server { constructor(public host: ServerHost, public project: Project) { const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames); - this.resolvedModuleNames = createFileMap>(getCanonicalFileName); - this.filenameToScript = createFileMap(getCanonicalFileName); + this.resolvedModuleNames = createFileMap>(getCanonicalFileName, host.getCurrentDirectory()); + this.filenameToScript = createFileMap(getCanonicalFileName, host.getCurrentDirectory()); this.moduleResolutionHost = { fileExists: fileName => this.fileExists(fileName), readFile: fileName => this.host.readFile(fileName) diff --git a/src/services/services.ts b/src/services/services.ts index 5815e2ab1d1..dbb208be5f5 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1698,7 +1698,7 @@ namespace ts { constructor(private host: LanguageServiceHost, getCanonicalFileName: (fileName: string) => string) { // script id => script index - this.fileNameToEntry = createFileMap(getCanonicalFileName); + this.fileNameToEntry = createFileMap(getCanonicalFileName, host.getCurrentDirectory()); // Initialize the list with the root file names let rootFileNames = host.getScriptFileNames(); @@ -1993,7 +1993,7 @@ namespace ts { } - export function createDocumentRegistry(useCaseSensitiveFileNames?: boolean): DocumentRegistry { + export function createDocumentRegistry(useCaseSensitiveFileNames?: boolean, currentDirectory = ""): DocumentRegistry { // Maps from compiler setting target (ES3, ES5, etc.) to all the cached documents we have // for those settings. let buckets: Map> = {}; @@ -2007,7 +2007,7 @@ namespace ts { let key = getKeyFromCompilationSettings(settings); let bucket = lookUp(buckets, key); if (!bucket && createIfMissing) { - buckets[key] = bucket = createFileMap(getCanonicalFileName); + buckets[key] = bucket = createFileMap(getCanonicalFileName, currentDirectory); } return bucket; } @@ -2556,7 +2556,9 @@ namespace ts { } } - export function createLanguageService(host: LanguageServiceHost, documentRegistry: DocumentRegistry = createDocumentRegistry()): LanguageService { + export function createLanguageService(host: LanguageServiceHost, + documentRegistry: DocumentRegistry = createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory())): LanguageService { + let syntaxTreeCache: SyntaxTreeCache = new SyntaxTreeCache(host); let ruleProvider: formatting.RulesProvider; let program: Program;