diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index c21f824e64d..b87b931e370 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -25,8 +25,15 @@ module ts { return indentStrings[1].length; } + function isDeclarationFile(sourceFile: SourceFile): boolean { + if (sourceFile.flags & NodeFlags.DeclarationFile) { + return true; + } + return false; + } + export function shouldEmitToOwnFile(sourceFile: SourceFile, compilerOptions: CompilerOptions): boolean { - if (!(sourceFile.flags & NodeFlags.DeclarationFile)) { + if (!isDeclarationFile(sourceFile)) { if ((isExternalModule(sourceFile) || !compilerOptions.out) && !fileExtensionIs(sourceFile.filename, ".js")) { return true; } @@ -3242,14 +3249,15 @@ module ts { if (compilerOptions.out) { emitFile(compilerOptions.out); } - } else { + } + else { // targetSourceFile is specified (e.g calling emitter from language service or calling getSemanticDiagnostic from language service) if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { // If shouldEmitToOwnFile return true or targetSourceFile is an external module file, then emit targetSourceFile in its own output file var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); emitFile(jsFilePath, targetSourceFile); } - else if (compilerOptions.out) { + else if (!isDeclarationFile(targetSourceFile) && compilerOptions.out) { // Otherwise, if --out is specified and targetSourceFile shouldn't be emitted to own file, then emit all, non-external-module file, into one single output file emitFile(compilerOptions.out); } diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline index bae7ee83aec..9b75091b3b0 100644 --- a/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : JSGeneratedWithSemanticErrors +EmitOutputStatus : Succeeded -EmitOutputStatus : JSGeneratedWithSemanticErrors +EmitOutputStatus : Succeeded Filename : tests/cases/fourslash/inputFile2.js var x1 = "hello world"; var Foo = (function () { diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline new file mode 100644 index 00000000000..ba719e2df99 --- /dev/null +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline @@ -0,0 +1,15 @@ +EmitOutputStatus : Succeeded + +EmitOutputStatus : Succeeded +Filename : tests/cases/fourslash/inputFile2.js +var Foo = (function () { + function Foo() { + } + return Foo; +})(); +exports.Foo = Foo; + +EmitOutputStatus : Succeeded +Filename : tests/cases/fourslash/inputFile3.js +var x = "hello"; + diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline new file mode 100644 index 00000000000..1a4b0868b94 --- /dev/null +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline @@ -0,0 +1,7 @@ +EmitOutputStatus : Succeeded + +EmitOutputStatus : Succeeded +Filename : declSingle.js +var x = "hello"; +var x1 = 1000; + diff --git a/tests/cases/fourslash/getEmitOutputWithDeclarationFile.ts b/tests/cases/fourslash/getEmitOutputWithDeclarationFile.ts index 5be27626996..b45b2eff467 100644 --- a/tests/cases/fourslash/getEmitOutputWithDeclarationFile.ts +++ b/tests/cases/fourslash/getEmitOutputWithDeclarationFile.ts @@ -4,11 +4,7 @@ // @Filename: decl.d.ts // @emitThisFile: true -//// declare x: string; -//// declare class Bar { -//// x : string; -//// y : number -//// } +//// interface I { a: string; } // @Filename: inputFile2.ts // @emitThisFile: true diff --git a/tests/cases/fourslash/getEmitOutputWithDeclarationFile2.ts b/tests/cases/fourslash/getEmitOutputWithDeclarationFile2.ts new file mode 100644 index 00000000000..a36ac606189 --- /dev/null +++ b/tests/cases/fourslash/getEmitOutputWithDeclarationFile2.ts @@ -0,0 +1,18 @@ +/// + +// @BaselineFile: getEmitOutputWithDeclarationFile2.baseline + +// @Filename: decl.d.ts +// @emitThisFile: true +//// interface I { a: string; } + +// @Filename: inputFile2.ts +// @emitThisFile: true +//// export class Foo { } + +// @Filename: inputFile3.ts +// @emitThisFile: true +//// var x:string = "hello"; + +debugger; +verify.baselineGetEmitOutput(); \ No newline at end of file diff --git a/tests/cases/fourslash/getEmitOutputWithDeclarationFile3.ts b/tests/cases/fourslash/getEmitOutputWithDeclarationFile3.ts new file mode 100644 index 00000000000..eeaa7fdeb25 --- /dev/null +++ b/tests/cases/fourslash/getEmitOutputWithDeclarationFile3.ts @@ -0,0 +1,21 @@ +/// + +// @BaselineFile: getEmitOutputWithDeclarationFile3.baseline +// @out: declSingle.js + +// @Filename: decl.d.ts +// @emitThisFile: true +//// interface I { a: string; } + +// @Filename: inputFile2.ts +//// export class Foo { } + +// @Filename: inputFile3.ts +// @emitThisFile: true +//// var x:string = "hello"; + +// @Filename: inputFile4.ts +//// var x1:number = 1000; + +debugger; +verify.baselineGetEmitOutput(); \ No newline at end of file