From 7031c439782b523c1ced19be452769ccc83a6b5e Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Fri, 20 Jul 2018 00:16:59 +0200 Subject: [PATCH 1/2] correctly detect if strictNullChecks is enabled Fixes: #25808 --- src/compiler/program.ts | 2 +- .../convertCompilerOptionsFromJson.ts | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 857ac30656a..334c054a8fb 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2366,7 +2366,7 @@ namespace ts { } function verifyCompilerOptions() { - if (options.strictPropertyInitialization && !options.strictNullChecks) { + if (options.strictPropertyInitialization && !getStrictOptionValue(options, "strictNullChecks")) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks"); } diff --git a/src/testRunner/unittests/convertCompilerOptionsFromJson.ts b/src/testRunner/unittests/convertCompilerOptionsFromJson.ts index 3b422e9a645..5189a73caf2 100644 --- a/src/testRunner/unittests/convertCompilerOptionsFromJson.ts +++ b/src/testRunner/unittests/convertCompilerOptionsFromJson.ts @@ -436,6 +436,51 @@ namespace ts { ); }); + it("Correctly detects implicitly enabled strictNullChecks ", () => { + assertCompilerOptions( + { + compilerOptions: { + strict: true, + strictPropertyInitialization: true + } + }, "tsconfig.json", + { + compilerOptions: { + strict: true, + strictPropertyInitialization: true + }, + errors: [] + } + ); + }); + + it("Checks dependency of strict options ", () => { + assertCompilerOptions( + { + compilerOptions: { + strict: true, + strictNullChecks: false, + strictPropertyInitialization: true + } + }, "tsconfig.json", + { + compilerOptions: { + strict: true, + strictNullChecks: false, + strictPropertyInitialization: true + }, + errors: [{ + file: undefined, + start: 0, + length: 0, + messageText: "Option 'strictPropertyInitialization' cannot be specified without specifying option 'strictNullChecks'.", + code: Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1.code, + category: Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1.category + }] + } + ); + }); + // jsconfig.json it("Convert correctly format jsconfig.json to compiler-options ", () => { assertCompilerOptions( From 99d123a72d7acc682a552813c4c0f94efb2acd39 Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Fri, 20 Jul 2018 00:30:11 +0200 Subject: [PATCH 2/2] add correct test --- .../convertCompilerOptionsFromJson.ts | 45 ------------------- ...tionsStrictPropertyInitializationStrict.js | 7 +++ ...StrictPropertyInitializationStrict.symbols | 4 ++ ...nsStrictPropertyInitializationStrict.types | 4 ++ ...tionsStrictPropertyInitializationStrict.ts | 4 ++ 5 files changed, 19 insertions(+), 45 deletions(-) create mode 100644 tests/baselines/reference/optionsStrictPropertyInitializationStrict.js create mode 100644 tests/baselines/reference/optionsStrictPropertyInitializationStrict.symbols create mode 100644 tests/baselines/reference/optionsStrictPropertyInitializationStrict.types create mode 100644 tests/cases/compiler/optionsStrictPropertyInitializationStrict.ts diff --git a/src/testRunner/unittests/convertCompilerOptionsFromJson.ts b/src/testRunner/unittests/convertCompilerOptionsFromJson.ts index 5189a73caf2..3b422e9a645 100644 --- a/src/testRunner/unittests/convertCompilerOptionsFromJson.ts +++ b/src/testRunner/unittests/convertCompilerOptionsFromJson.ts @@ -436,51 +436,6 @@ namespace ts { ); }); - it("Correctly detects implicitly enabled strictNullChecks ", () => { - assertCompilerOptions( - { - compilerOptions: { - strict: true, - strictPropertyInitialization: true - } - }, "tsconfig.json", - { - compilerOptions: { - strict: true, - strictPropertyInitialization: true - }, - errors: [] - } - ); - }); - - it("Checks dependency of strict options ", () => { - assertCompilerOptions( - { - compilerOptions: { - strict: true, - strictNullChecks: false, - strictPropertyInitialization: true - } - }, "tsconfig.json", - { - compilerOptions: { - strict: true, - strictNullChecks: false, - strictPropertyInitialization: true - }, - errors: [{ - file: undefined, - start: 0, - length: 0, - messageText: "Option 'strictPropertyInitialization' cannot be specified without specifying option 'strictNullChecks'.", - code: Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1.code, - category: Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1.category - }] - } - ); - }); - // jsconfig.json it("Convert correctly format jsconfig.json to compiler-options ", () => { assertCompilerOptions( diff --git a/tests/baselines/reference/optionsStrictPropertyInitializationStrict.js b/tests/baselines/reference/optionsStrictPropertyInitializationStrict.js new file mode 100644 index 00000000000..ee255ea52eb --- /dev/null +++ b/tests/baselines/reference/optionsStrictPropertyInitializationStrict.js @@ -0,0 +1,7 @@ +//// [optionsStrictPropertyInitializationStrict.ts] +var x; + + +//// [optionsStrictPropertyInitializationStrict.js] +"use strict"; +var x; diff --git a/tests/baselines/reference/optionsStrictPropertyInitializationStrict.symbols b/tests/baselines/reference/optionsStrictPropertyInitializationStrict.symbols new file mode 100644 index 00000000000..00636220b9c --- /dev/null +++ b/tests/baselines/reference/optionsStrictPropertyInitializationStrict.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/optionsStrictPropertyInitializationStrict.ts === +var x; +>x : Symbol(x, Decl(optionsStrictPropertyInitializationStrict.ts, 0, 3)) + diff --git a/tests/baselines/reference/optionsStrictPropertyInitializationStrict.types b/tests/baselines/reference/optionsStrictPropertyInitializationStrict.types new file mode 100644 index 00000000000..7c7c9bd2a72 --- /dev/null +++ b/tests/baselines/reference/optionsStrictPropertyInitializationStrict.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/optionsStrictPropertyInitializationStrict.ts === +var x; +>x : any + diff --git a/tests/cases/compiler/optionsStrictPropertyInitializationStrict.ts b/tests/cases/compiler/optionsStrictPropertyInitializationStrict.ts new file mode 100644 index 00000000000..acef5e44165 --- /dev/null +++ b/tests/cases/compiler/optionsStrictPropertyInitializationStrict.ts @@ -0,0 +1,4 @@ +// @strict: true +// @strictPropertyInitialization: true + +var x;