diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e248da9907..929e676c30 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3580,12 +3580,12 @@ module ts { return filter(errors, e => !e.file); } - function addExtension(filename: string, extension: string): string { - return getBaseFilename(filename).indexOf(".") >= 0 ? filename : filename + extension; + function hasExtension(filename: string): boolean { + return getBaseFilename(filename).indexOf(".") >= 0; } function processRootFile(filename: string, isDefaultLib: boolean) { - processSourceFile(normalizePath(addExtension(filename, ".ts")), isDefaultLib); + processSourceFile(normalizePath(filename), isDefaultLib); } function processSourceFile(filename: string, isDefaultLib: boolean, refFile?: SourceFile, refPos?: number, refEnd?: number) { @@ -3593,11 +3593,18 @@ module ts { var start = refPos; var length = refEnd - refPos; } - if (!fileExtensionIs(filename, ".ts")) { - errors.push(createFileDiagnostic(refFile, start, length, Diagnostics.File_0_must_have_extension_ts_or_d_ts, filename)); + if (hasExtension(filename)) { + if (!fileExtensionIs(filename, ".ts")) { + errors.push(createFileDiagnostic(refFile, start, length, Diagnostics.File_0_must_have_extension_ts_or_d_ts, filename)); + } + else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { + errors.push(createFileDiagnostic(refFile, start, length, Diagnostics.File_0_not_found, filename)); + } } - else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { - errors.push(createFileDiagnostic(refFile, start, length, Diagnostics.File_0_not_found, filename)); + else { + if (!(findSourceFile(filename + ".ts", isDefaultLib, refFile, refPos, refEnd) || findSourceFile(filename + ".d.ts", isDefaultLib, refFile, refPos, refEnd))) { + errors.push(createFileDiagnostic(refFile, start, length, Diagnostics.File_0_not_found, filename + ".ts")); + } } } diff --git a/tests/cases/compiler/fileReferencesWithNoExtensions.ts b/tests/cases/compiler/fileReferencesWithNoExtensions.ts new file mode 100644 index 0000000000..40fa3fccbd --- /dev/null +++ b/tests/cases/compiler/fileReferencesWithNoExtensions.ts @@ -0,0 +1,19 @@ +// @Filename: t.ts +/// +/// +/// +var a = aa; // Check that a.ts is referenced +var b = bb; // Check that b.d.ts is referenced +var c = cc; // Check that c.ts has precedence over c.d.ts + +// @Filename: a.ts +var aa = 1; + +// @Filename: b.d.ts +declare var bb: number; + +// @Filename: c.ts +var cc = 1; + +// @Filename: c.d.ts +declare var xx: number;