From c4709834b37640fd3c9d492123e6add904546573 Mon Sep 17 00:00:00 2001 From: Nayeem Rahman Date: Sun, 14 Mar 2021 22:19:27 +0000 Subject: fix(cli/module_graph): Set useDefineForClassFields to true (#9774) Fixes #9773 --- cli/lsp/language_server.rs | 1 + cli/module_graph.rs | 2 ++ cli/tests/088_use_define_for_class_fields.ts | 4 ++++ cli/tests/088_use_define_for_class_fields.ts.out | 4 ++++ cli/tests/integration_tests.rs | 6 ++++++ cli/tsc_config.rs | 1 + 6 files changed, 18 insertions(+) create mode 100644 cli/tests/088_use_define_for_class_fields.ts create mode 100644 cli/tests/088_use_define_for_class_fields.ts.out (limited to 'cli') diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 96983dc52..cf4a95d38 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -314,6 +314,7 @@ impl Inner { "noEmit": true, "strict": true, "target": "esnext", + "useDefineForClassFields": true, })); let (maybe_config, maybe_root_uri) = { let config = &self.config; diff --git a/cli/module_graph.rs b/cli/module_graph.rs index ad6d01589..ddfc3ad84 100644 --- a/cli/module_graph.rs +++ b/cli/module_graph.rs @@ -809,6 +809,7 @@ impl Graph { "strict": true, "target": "esnext", "tsBuildInfoFile": "deno:///.tsbuildinfo", + "useDefineForClassFields": true, })); if options.emit { config.merge(&json!({ @@ -954,6 +955,7 @@ impl Graph { "module": "esnext", "strict": true, "target": "esnext", + "useDefineForClassFields": true, })); let opts = match options.bundle_type { BundleType::Esm | BundleType::Iife => json!({ diff --git a/cli/tests/088_use_define_for_class_fields.ts b/cli/tests/088_use_define_for_class_fields.ts new file mode 100644 index 000000000..9be984abf --- /dev/null +++ b/cli/tests/088_use_define_for_class_fields.ts @@ -0,0 +1,4 @@ +class A { + b = this.a; + constructor(public a: unknown) {} +} diff --git a/cli/tests/088_use_define_for_class_fields.ts.out b/cli/tests/088_use_define_for_class_fields.ts.out new file mode 100644 index 000000000..08f94a967 --- /dev/null +++ b/cli/tests/088_use_define_for_class_fields.ts.out @@ -0,0 +1,4 @@ +[WILDCARD]error: TS2729 [ERROR]: Property 'a' is used before its initialization. + b = this.a; + ^ +[WILDCARD] diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index 23d119d44..cddeb40f6 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -2841,6 +2841,12 @@ console.log("finish"); output: "087_no_check_imports_not_used_as_values.ts.out", }); + itest!(_088_use_define_for_class_fields { + args: "run 088_use_define_for_class_fields.ts", + output: "088_use_define_for_class_fields.ts.out", + exit_code: 1, + }); + itest!(js_import_detect { args: "run --quiet --reload js_import_detect.ts", output: "js_import_detect.ts.out", diff --git a/cli/tsc_config.rs b/cli/tsc_config.rs index 54ed34bf1..a3db12006 100644 --- a/cli/tsc_config.rs +++ b/cli/tsc_config.rs @@ -130,6 +130,7 @@ pub const IGNORED_RUNTIME_COMPILER_OPTIONS: &[&str] = &[ "traceResolution", "tsBuildInfoFile", "typeRoots", + "useDefineForClassFields", "version", "watch", ]; -- cgit v1.2.3