From d11117829d09bde9db4027dbdad35c8967362870 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Tue, 18 Sep 2018 11:33:56 +0300 Subject: [PATCH] allow using declarationDir with composite option --- src/compiler/program.ts | 2 +- ...onEmitToDeclarationDirWithCompositeOption.js | 17 +++++++++++++++++ ...tToDeclarationDirWithCompositeOption.symbols | 10 ++++++++++ ...mitToDeclarationDirWithCompositeOption.types | 8 ++++++++ ...EmitToDeclarationDirWithDeclarationOption.js | 17 +++++++++++++++++ ...oDeclarationDirWithDeclarationOption.symbols | 10 ++++++++++ ...tToDeclarationDirWithDeclarationOption.types | 8 ++++++++ ...outCompositeAndDeclarationOptions.errors.txt | 16 ++++++++++++++++ ...nDirWithoutCompositeAndDeclarationOptions.js | 10 ++++++++++ ...ithoutCompositeAndDeclarationOptions.symbols | 10 ++++++++++ ...rWithoutCompositeAndDeclarationOptions.types | 8 ++++++++ ...onEmitToDeclarationDirWithCompositeOption.ts | 11 +++++++++++ ...EmitToDeclarationDirWithDeclarationOption.ts | 11 +++++++++++ ...nDirWithoutCompositeAndDeclarationOptions.ts | 10 ++++++++++ 14 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.js create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.symbols create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.types create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.js create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.symbols create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.types create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.errors.txt create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.js create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.symbols create mode 100644 tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.types create mode 100644 tests/cases/compiler/declarationEmitToDeclarationDirWithCompositeOption.ts create mode 100644 tests/cases/compiler/declarationEmitToDeclarationDirWithDeclarationOption.ts create mode 100644 tests/cases/compiler/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.ts diff --git a/src/compiler/program.ts b/src/compiler/program.ts index c7599e9bd6b..75e111ace4c 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2532,7 +2532,7 @@ namespace ts { } if (options.declarationDir) { - if (!options.declaration) { + if (!getEmitDeclarations(options)) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "declarationDir", "declaration"); } if (options.out || options.outFile) { diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.js b/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.js new file mode 100644 index 00000000000..f048e6aceea --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.js @@ -0,0 +1,17 @@ +//// [test.ts] +interface Foo { + x: number; +} +export default Foo; + + +//// [test.js] +"use strict"; +exports.__esModule = true; + + +//// [test.d.ts] +interface Foo { + x: number; +} +export default Foo; diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.symbols b/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.symbols new file mode 100644 index 00000000000..74f9fba394b --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.symbols @@ -0,0 +1,10 @@ +=== /foo/test.ts === +interface Foo { +>Foo : Symbol(Foo, Decl(test.ts, 0, 0)) + + x: number; +>x : Symbol(Foo.x, Decl(test.ts, 0, 15)) +} +export default Foo; +>Foo : Symbol(Foo, Decl(test.ts, 0, 0)) + diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.types b/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.types new file mode 100644 index 00000000000..489a84bb9f1 --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithCompositeOption.types @@ -0,0 +1,8 @@ +=== /foo/test.ts === +interface Foo { + x: number; +>x : number +} +export default Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.js b/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.js new file mode 100644 index 00000000000..f048e6aceea --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.js @@ -0,0 +1,17 @@ +//// [test.ts] +interface Foo { + x: number; +} +export default Foo; + + +//// [test.js] +"use strict"; +exports.__esModule = true; + + +//// [test.d.ts] +interface Foo { + x: number; +} +export default Foo; diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.symbols b/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.symbols new file mode 100644 index 00000000000..74f9fba394b --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.symbols @@ -0,0 +1,10 @@ +=== /foo/test.ts === +interface Foo { +>Foo : Symbol(Foo, Decl(test.ts, 0, 0)) + + x: number; +>x : Symbol(Foo.x, Decl(test.ts, 0, 15)) +} +export default Foo; +>Foo : Symbol(Foo, Decl(test.ts, 0, 0)) + diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.types b/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.types new file mode 100644 index 00000000000..489a84bb9f1 --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithDeclarationOption.types @@ -0,0 +1,8 @@ +=== /foo/test.ts === +interface Foo { + x: number; +>x : number +} +export default Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.errors.txt b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.errors.txt new file mode 100644 index 00000000000..e2a5a20452c --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.errors.txt @@ -0,0 +1,16 @@ +/foo/tsconfig.json(2,26): error TS5052: Option 'declarationDir' cannot be specified without specifying option 'declaration'. + + +==== /foo/tsconfig.json (1 errors) ==== + { + "compilerOptions": { "declarationDir": "out" } + ~~~~~~~~~~~~~~~~ +!!! error TS5052: Option 'declarationDir' cannot be specified without specifying option 'declaration'. + } + +==== /foo/test.ts (0 errors) ==== + interface Foo { + x: number; + } + export default Foo; + \ No newline at end of file diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.js b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.js new file mode 100644 index 00000000000..48235293467 --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.js @@ -0,0 +1,10 @@ +//// [test.ts] +interface Foo { + x: number; +} +export default Foo; + + +//// [test.js] +"use strict"; +exports.__esModule = true; diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.symbols b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.symbols new file mode 100644 index 00000000000..74f9fba394b --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.symbols @@ -0,0 +1,10 @@ +=== /foo/test.ts === +interface Foo { +>Foo : Symbol(Foo, Decl(test.ts, 0, 0)) + + x: number; +>x : Symbol(Foo.x, Decl(test.ts, 0, 15)) +} +export default Foo; +>Foo : Symbol(Foo, Decl(test.ts, 0, 0)) + diff --git a/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.types b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.types new file mode 100644 index 00000000000..489a84bb9f1 --- /dev/null +++ b/tests/baselines/reference/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.types @@ -0,0 +1,8 @@ +=== /foo/test.ts === +interface Foo { + x: number; +>x : number +} +export default Foo; +>Foo : Foo + diff --git a/tests/cases/compiler/declarationEmitToDeclarationDirWithCompositeOption.ts b/tests/cases/compiler/declarationEmitToDeclarationDirWithCompositeOption.ts new file mode 100644 index 00000000000..77a4c3099cf --- /dev/null +++ b/tests/cases/compiler/declarationEmitToDeclarationDirWithCompositeOption.ts @@ -0,0 +1,11 @@ +// @composite: true +// @filename: /foo/tsconfig.json +{ + "compilerOptions": { "composite": true, "declarationDir": "out" } +} + +// @filename: /foo/test.ts +interface Foo { + x: number; +} +export default Foo; diff --git a/tests/cases/compiler/declarationEmitToDeclarationDirWithDeclarationOption.ts b/tests/cases/compiler/declarationEmitToDeclarationDirWithDeclarationOption.ts new file mode 100644 index 00000000000..e3d4231a8f6 --- /dev/null +++ b/tests/cases/compiler/declarationEmitToDeclarationDirWithDeclarationOption.ts @@ -0,0 +1,11 @@ +// @declaration: true +// @filename: /foo/tsconfig.json +{ + "compilerOptions": { "declaration": true, "declarationDir": "out" } +} + +// @filename: /foo/test.ts +interface Foo { + x: number; +} +export default Foo; diff --git a/tests/cases/compiler/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.ts b/tests/cases/compiler/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.ts new file mode 100644 index 00000000000..08405e5fc96 --- /dev/null +++ b/tests/cases/compiler/declarationEmitToDeclarationDirWithoutCompositeAndDeclarationOptions.ts @@ -0,0 +1,10 @@ +// @filename: /foo/tsconfig.json +{ + "compilerOptions": { "declarationDir": "out" } +} + +// @filename: /foo/test.ts +interface Foo { + x: number; +} +export default Foo;