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