From c510df1a53b4b549f3c343092e9be132f5bc025f Mon Sep 17 00:00:00 2001 From: Alexander T Date: Tue, 18 Sep 2018 12:17:21 +0300 Subject: [PATCH 1/2] deny using allowJs option with composite --- src/compiler/program.ts | 4 ++-- ...ationWithEnabledCompositeOption.errors.txt | 12 ++++++++++ ...leCompilationWithEnabledCompositeOption.js | 24 +++++++++++++++++++ ...pilationWithEnabledCompositeOption.symbols | 10 ++++++++ ...ompilationWithEnabledCompositeOption.types | 10 ++++++++ ...leCompilationWithEnabledCompositeOption.ts | 10 ++++++++ 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.errors.txt create mode 100644 tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.js create mode 100644 tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.symbols create mode 100644 tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.types create mode 100644 tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts diff --git a/src/compiler/program.ts b/src/compiler/program.ts index c7599e9bd6b..8b5d4b6a6e7 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2609,8 +2609,8 @@ namespace ts { } } - if (!options.noEmit && options.allowJs && options.declaration) { - createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "allowJs", "declaration"); + if (!options.noEmit && options.allowJs && (options.declaration || options.composite)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "allowJs", options.declaration ? "declaration" : "composite"); } if (options.checkJs && !options.allowJs) { diff --git a/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.errors.txt b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.errors.txt new file mode 100644 index 00000000000..7133188adc0 --- /dev/null +++ b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.errors.txt @@ -0,0 +1,12 @@ +error TS5053: Option 'allowJs' cannot be specified with option 'composite'. + + +!!! error TS5053: Option 'allowJs' cannot be specified with option 'composite'. +==== tests/cases/compiler/a.ts (0 errors) ==== + class c { + } + +==== tests/cases/compiler/b.js (0 errors) ==== + function foo() { + } + \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.js b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.js new file mode 100644 index 00000000000..e34edb10ff4 --- /dev/null +++ b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.js @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts] //// + +//// [a.ts] +class c { +} + +//// [b.js] +function foo() { +} + + +//// [out.js] +var c = /** @class */ (function () { + function c() { + } + return c; +}()); +function foo() { +} + + +//// [out.d.ts] +declare class c { +} diff --git a/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.symbols b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.symbols new file mode 100644 index 00000000000..5260b8d6cf3 --- /dev/null +++ b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.symbols @@ -0,0 +1,10 @@ +=== tests/cases/compiler/a.ts === +class c { +>c : Symbol(c, Decl(a.ts, 0, 0)) +} + +=== tests/cases/compiler/b.js === +function foo() { +>foo : Symbol(foo, Decl(b.js, 0, 0)) +} + diff --git a/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.types b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.types new file mode 100644 index 00000000000..dce83eeb8eb --- /dev/null +++ b/tests/baselines/reference/jsFileCompilationWithEnabledCompositeOption.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/a.ts === +class c { +>c : c +} + +=== tests/cases/compiler/b.js === +function foo() { +>foo : () => void +} + diff --git a/tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts b/tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts new file mode 100644 index 00000000000..90340ef5d3a --- /dev/null +++ b/tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts @@ -0,0 +1,10 @@ +// @allowJs: true +// @out: out.js +// @composite: true +// @filename: a.ts +class c { +} + +// @filename: b.js +function foo() { +} From 5b5af23b4196364a66a00eff58be8e57d92d8477 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Tue, 18 Sep 2018 14:46:42 +0300 Subject: [PATCH 2/2] use getEmitDeclarations helper --- 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 8b5d4b6a6e7..d8c852c996b 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2609,7 +2609,7 @@ namespace ts { } } - if (!options.noEmit && options.allowJs && (options.declaration || options.composite)) { + if (!options.noEmit && options.allowJs && getEmitDeclarations(options)) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "allowJs", options.declaration ? "declaration" : "composite"); }