From 94fa6b92b4872b72f986208846e07d1a7280a0dd Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Wed, 12 Aug 2015 13:04:10 -0700 Subject: [PATCH 1/2] Fix #4277: Ensure we are passing refEnd and not length to findSourceFile. Also add a more conservative check for empty refPos and refEnd to ensure diagnostic emit does not fail --- src/compiler/program.ts | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 4b1f10eb649..cd63aa93893 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -373,13 +373,7 @@ namespace ts { } function processSourceFile(fileName: string, isDefaultLib: boolean, refFile?: SourceFile, refPos?: number, refEnd?: number) { - let start: number; - let length: number; let diagnosticArgument: string[]; - if (refEnd !== undefined && refPos !== undefined) { - start = refPos; - length = refEnd - refPos; - } let diagnostic: DiagnosticMessage; if (hasExtension(fileName)) { if (!options.allowNonTsExtensions && !forEach(supportedExtensions, extension => fileExtensionIs(host.getCanonicalFileName(fileName), extension))) { @@ -411,8 +405,8 @@ namespace ts { } if (diagnostic) { - if (refFile) { - diagnostics.add(createFileDiagnostic(refFile, start, length, diagnostic, ...diagnosticArgument)); + if (refFile !== undefined && refEnd !== undefined && refPos !== undefined) { + diagnostics.add(createFileDiagnostic(refFile, start, refEnd - refPos, diagnostic, ...diagnosticArgument)); } else { diagnostics.add(createCompilerDiagnostic(diagnostic, ...diagnosticArgument)); @@ -421,7 +415,7 @@ namespace ts { } // Get source file from normalized fileName - function findSourceFile(fileName: string, isDefaultLib: boolean, refFile?: SourceFile, refStart?: number, refLength?: number): SourceFile { + function findSourceFile(fileName: string, isDefaultLib: boolean, refFile?: SourceFile, refPos?: number, refEnd?: number): SourceFile { let canonicalName = host.getCanonicalFileName(normalizeSlashes(fileName)); if (filesByName.contains(canonicalName)) { // We've already looked for this file, use cached result @@ -436,8 +430,8 @@ namespace ts { // We haven't looked for this file, do so now and cache result let file = host.getSourceFile(fileName, options.target, hostErrorMessage => { - if (refFile) { - diagnostics.add(createFileDiagnostic(refFile, refStart, refLength, + if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { + diagnostics.add(createFileDiagnostic(refFile, refPos, refEnd - refPos, Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } else { @@ -473,8 +467,13 @@ namespace ts { if (file && host.useCaseSensitiveFileNames()) { let sourceFileName = useAbsolutePath ? getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName; if (canonicalName !== sourceFileName) { - diagnostics.add(createFileDiagnostic(refFile, refStart, refLength, - Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName)); + if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { + diagnostics.add(createFileDiagnostic(refFile, refPos, refEnd - refPos, + Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName)); + } + else { + diagnostics.add(createCompilerDiagnostic(Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName)); + } } } return file; @@ -536,7 +535,7 @@ namespace ts { }); function findModuleSourceFile(fileName: string, nameLiteral: Expression) { - return findSourceFile(fileName, /* isDefaultLib */ false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); + return findSourceFile(fileName, /* isDefaultLib */ false, file, nameLiteral.pos, nameLiteral.end); } } From fdda66f05579d65578b87b78f43436fdcb65ab4c Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 13 Aug 2015 12:45:26 -0700 Subject: [PATCH 2/2] handel merge conflict, use refPos instead of start --- src/compiler/program.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index cd63aa93893..835cd004d3d 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -406,7 +406,7 @@ namespace ts { if (diagnostic) { if (refFile !== undefined && refEnd !== undefined && refPos !== undefined) { - diagnostics.add(createFileDiagnostic(refFile, start, refEnd - refPos, diagnostic, ...diagnosticArgument)); + diagnostics.add(createFileDiagnostic(refFile, refPos, refEnd - refPos, diagnostic, ...diagnosticArgument)); } else { diagnostics.add(createCompilerDiagnostic(diagnostic, ...diagnosticArgument));