From c0f187a4e81bf3c29d29a733a5483b0deceb2263 Mon Sep 17 00:00:00 2001 From: Ben Lichtman Date: Tue, 6 Aug 2019 13:39:18 -0700 Subject: [PATCH] Allow compile on save with decorator emit --- src/server/session.ts | 8 ++++++-- src/testRunner/unittests/tsserver/compileOnSave.ts | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/server/session.ts b/src/server/session.ts index 66f21e88a76..2db58d67460 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -1599,6 +1599,10 @@ namespace ts.server { return emptyArray; } + function dtsChangeCanAffectEmit(compilationSettings: CompilerOptions) { + return getEmitDeclarations(compilationSettings) || !!compilationSettings.emitDecoratorMetadata; + } + return combineProjectOutput( info, path => this.projectService.getScriptInfoForPath(path)!, @@ -1610,8 +1614,8 @@ namespace ts.server { const compilationSettings = project.getCompilationSettings(); - if (!!compilationSettings.noEmit || fileExtensionIs(info.fileName, Extension.Dts) && !getEmitDeclarations(compilationSettings)) { - // avoid triggering emit when a change is made in a .d.ts when declaration emit is disabled + if (!!compilationSettings.noEmit || fileExtensionIs(info.fileName, Extension.Dts) && !dtsChangeCanAffectEmit(compilationSettings)) { + // avoid triggering emit when a change is made in a .d.ts when declaration emit and decorator metadata emit are disabled return undefined; } diff --git a/src/testRunner/unittests/tsserver/compileOnSave.ts b/src/testRunner/unittests/tsserver/compileOnSave.ts index 2773edb7d8d..b129c8ecdfc 100644 --- a/src/testRunner/unittests/tsserver/compileOnSave.ts +++ b/src/testRunner/unittests/tsserver/compileOnSave.ts @@ -598,6 +598,15 @@ namespace ts.projectSystem { /*expectDTSEmit*/ true ); }); + + it("should return results if change is made in a global declaration file with decorator emit enabled", () => { + testDTS( + /*dtsFileContents*/ "declare const x: string;", + /*tsFileContents*/ "var y = 1;", + /*opts*/ { experimentalDecorators: true, emitDecoratorMetadata: true }, + /*expectDTSEmit*/ true + ); + }); }); describe("tsserverProjectSystem emit with outFile or out setting", () => {