diff --git a/Cargo.lock b/Cargo.lock index 7ab6733dca..a4eae70e48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1374,9 +1374,9 @@ dependencies = [ [[package]] name = "deno_config" -version = "0.32.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c774f2e49b4ca47f1fe5c39e1775d1434280a4f168252fed8f4a3f2230868448" +checksum = "495df7ebed4feee5c0eb7631b0b86432bb6370638cf81d5eeb5769aab55fb2de" dependencies = [ "anyhow", "deno_package_json", @@ -1388,6 +1388,7 @@ dependencies = [ "jsonc-parser", "log", "percent-encoding", + "phf 0.11.2", "serde", "serde_json", "thiserror", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index d7d8eeb7c6..016488e5c2 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -65,7 +65,7 @@ winres.workspace = true [dependencies] deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_cache_dir = { workspace = true } -deno_config = { version = "=0.32.0", features = ["workspace", "sync"] } +deno_config = { version = "=0.33.1", features = ["workspace", "sync"] } deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } deno_doc = { version = "0.148.0", features = ["html", "syntect"] } deno_graph = { version = "=0.82.0" } diff --git a/cli/args/deno_json.rs b/cli/args/deno_json.rs index cbc33aa0b2..e9ab0189f5 100644 --- a/cli/args/deno_json.rs +++ b/cli/args/deno_json.rs @@ -2,6 +2,7 @@ use std::collections::HashSet; +use deno_config::deno_json::TsConfigForEmit; use deno_core::serde_json; use deno_semver::jsr::JsrDepPackageReq; use deno_semver::jsr::JsrPackageReqReference; @@ -105,3 +106,18 @@ fn values_to_set<'a>( } entries } + +pub fn check_warn_tsconfig(ts_config: &TsConfigForEmit) { + if let Some(ignored_options) = &ts_config.maybe_ignored_options { + log::warn!("{}", ignored_options); + } + let serde_json::Value::Object(obj) = &ts_config.ts_config.0 else { + return; + }; + if obj.get("experimentalDecorators") == Some(&serde_json::Value::Bool(true)) { + log::warn!( + "{} experimentalDecorators compiler option is deprecated and may be removed at any time", + deno_runtime::colors::yellow("Warning"), + ); + } +} diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 4927cf7d02..f7623323fe 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -42,6 +42,7 @@ pub use deno_config::deno_json::TsConfigForEmit; pub use deno_config::deno_json::TsConfigType; pub use deno_config::deno_json::TsTypeLib; pub use deno_config::glob::FilePatterns; +pub use deno_json::check_warn_tsconfig; pub use flags::*; pub use lockfile::CliLockfile; pub use package_json::NpmInstallDepsProvider; @@ -1220,7 +1221,7 @@ impl CliOptions { if let Some(flag) = self.flags.node_modules_dir { return Ok(Some(flag)); } - self.workspace().node_modules_dir_mode().map_err(Into::into) + self.workspace().node_modules_dir().map_err(Into::into) } pub fn vendor_dir_path(&self) -> Option<&PathBuf> { @@ -1731,7 +1732,7 @@ fn resolve_node_modules_folder( Some(mode.uses_node_modules_dir()) } else { workspace - .node_modules_dir_mode()? + .node_modules_dir()? .map(|m| m.uses_node_modules_dir()) .or(flags.vendor) .or_else(|| root_folder.deno_json.as_ref().and_then(|c| c.json.vendor)) diff --git a/cli/factory.rs b/cli/factory.rs index 4215530584..81212c7885 100644 --- a/cli/factory.rs +++ b/cli/factory.rs @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +use crate::args::check_warn_tsconfig; use crate::args::get_root_cert_store; use crate::args::CaData; use crate::args::CliOptions; @@ -520,9 +521,7 @@ impl CliFactory { let cli_options = self.cli_options()?; let ts_config_result = cli_options.resolve_ts_config_for_emit(TsConfigType::Emit)?; - if let Some(ignored_options) = ts_config_result.maybe_ignored_options { - warn!("{}", ignored_options); - } + check_warn_tsconfig(&ts_config_result); let (transpile_options, emit_options) = crate::args::ts_config_to_transpile_and_emit_options( ts_config_result.ts_config, diff --git a/cli/lsp/config.rs b/cli/lsp/config.rs index f9262d12e8..fcea96aa5d 100644 --- a/cli/lsp/config.rs +++ b/cli/lsp/config.rs @@ -1387,10 +1387,8 @@ impl ConfigData { } } - let node_modules_dir = member_dir - .workspace - .node_modules_dir_mode() - .unwrap_or_default(); + let node_modules_dir = + member_dir.workspace.node_modules_dir().unwrap_or_default(); let byonm = match node_modules_dir { Some(mode) => mode == NodeModulesDirMode::Manual, None => member_dir.workspace.root_pkg_json().is_some(), @@ -1873,7 +1871,7 @@ fn resolve_node_modules_dir( // `nodeModulesDir: true` setting in the deno.json file. This is to // reduce the chance of modifying someone's node_modules directory // without them having asked us to do so. - let node_modules_mode = workspace.node_modules_dir_mode().ok().flatten(); + let node_modules_mode = workspace.node_modules_dir().ok().flatten(); let explicitly_disabled = node_modules_mode == Some(NodeModulesDirMode::None); if explicitly_disabled { return None; diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 05c54dfc67..2bb13e5e4c 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -966,9 +966,8 @@ impl Inner { .await; for config_file in self.config.tree.config_files() { (|| { - let compiler_options = config_file.to_compiler_options().ok()?.0; - let compiler_options_obj = compiler_options.as_object()?; - let jsx_import_source = compiler_options_obj.get("jsxImportSource")?; + let compiler_options = config_file.to_compiler_options().ok()?.options; + let jsx_import_source = compiler_options.get("jsxImportSource")?; let jsx_import_source = jsx_import_source.as_str()?; let referrer = config_file.specifier.clone(); let specifier = Url::parse(&format!( diff --git a/cli/tools/check.rs b/cli/tools/check.rs index a2bfb9d9bb..9232f324be 100644 --- a/cli/tools/check.rs +++ b/cli/tools/check.rs @@ -14,6 +14,7 @@ use deno_terminal::colors; use once_cell::sync::Lazy; use regex::Regex; +use crate::args::check_warn_tsconfig; use crate::args::CliOptions; use crate::args::TsConfig; use crate::args::TsConfigType; @@ -118,9 +119,7 @@ impl TypeChecker { .cli_options .resolve_ts_config_for_emit(TsConfigType::Check { lib: options.lib })?; if options.log_ignored_options { - if let Some(ignored_options) = ts_config_result.maybe_ignored_options { - log::warn!("{}", ignored_options); - } + check_warn_tsconfig(&ts_config_result); } let type_check_mode = options.type_check_mode; diff --git a/cli/tools/compile.rs b/cli/tools/compile.rs index 90ee0e2706..b9620cfded 100644 --- a/cli/tools/compile.rs +++ b/cli/tools/compile.rs @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +use crate::args::check_warn_tsconfig; use crate::args::CompileFlags; use crate::args::Flags; use crate::factory::CliFactory; @@ -79,6 +80,7 @@ pub async fn compile( let ts_config_for_emit = cli_options .resolve_ts_config_for_emit(deno_config::deno_json::TsConfigType::Emit)?; + check_warn_tsconfig(&ts_config_for_emit); let (transpile_options, emit_options) = crate::args::ts_config_to_transpile_and_emit_options( ts_config_for_emit.ts_config, diff --git a/tests/integration/run_tests.rs b/tests/integration/run_tests.rs index 47fcdb657b..117e5709e4 100644 --- a/tests/integration/run_tests.rs +++ b/tests/integration/run_tests.rs @@ -483,11 +483,6 @@ itest!(dynamic_import_concurrent_non_statically_analyzable { http_server: true, }); -itest!(no_check_imports_not_used_as_values { - args: "run --config run/no_check_imports_not_used_as_values/preserve_imports.tsconfig.json --no-check run/no_check_imports_not_used_as_values/main.ts", - output: "run/no_check_imports_not_used_as_values/main.out", - }); - itest!(_088_dynamic_import_already_evaluating { args: "run --allow-read run/088_dynamic_import_already_evaluating.ts", output: "run/088_dynamic_import_already_evaluating.ts.out", diff --git a/tests/testdata/run/checkjs.tsconfig.json b/tests/testdata/run/checkjs.tsconfig.json index 46d96db9ed..08ac60b6cd 100644 --- a/tests/testdata/run/checkjs.tsconfig.json +++ b/tests/testdata/run/checkjs.tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "allowJs": true, "checkJs": true } } diff --git a/tests/testdata/run/decorators/experimental/ts/main.out b/tests/testdata/run/decorators/experimental/ts/main.out index ee77417cf2..ea64fbaa63 100644 --- a/tests/testdata/run/decorators/experimental/ts/main.out +++ b/tests/testdata/run/decorators/experimental/ts/main.out @@ -1,2 +1,3 @@ +Warning experimentalDecorators compiler option is deprecated and may be removed at any time Check [WILDCARD] SomeClass { someField: "asdf" } diff --git a/tests/testdata/run/no_check_imports_not_used_as_values/hello.ts b/tests/testdata/run/no_check_imports_not_used_as_values/hello.ts deleted file mode 100644 index 1a9d8f114f..0000000000 --- a/tests/testdata/run/no_check_imports_not_used_as_values/hello.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type SomeType = unknown; -console.log("Hello, world!"); diff --git a/tests/testdata/run/no_check_imports_not_used_as_values/main.out b/tests/testdata/run/no_check_imports_not_used_as_values/main.out deleted file mode 100644 index f744c41839..0000000000 --- a/tests/testdata/run/no_check_imports_not_used_as_values/main.out +++ /dev/null @@ -1,2 +0,0 @@ -[WILDCARD]Hello, world! -Hi! diff --git a/tests/testdata/run/no_check_imports_not_used_as_values/main.ts b/tests/testdata/run/no_check_imports_not_used_as_values/main.ts deleted file mode 100644 index 80e17aa35d..0000000000 --- a/tests/testdata/run/no_check_imports_not_used_as_values/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { SomeType } from "./hello.ts"; - -const string: SomeType = "Hi!"; -console.log(string); diff --git a/tests/testdata/run/no_check_imports_not_used_as_values/preserve_imports.tsconfig.json b/tests/testdata/run/no_check_imports_not_used_as_values/preserve_imports.tsconfig.json deleted file mode 100644 index 9b19291aa0..0000000000 --- a/tests/testdata/run/no_check_imports_not_used_as_values/preserve_imports.tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "compilerOptions": { - "importsNotUsedAsValues": "preserve" - } -} diff --git a/tools/lint.js b/tools/lint.js index 08b551e984..4bffead0cc 100755 --- a/tools/lint.js +++ b/tools/lint.js @@ -221,7 +221,7 @@ async function ensureNoNewITests() { "pm_tests.rs": 0, "publish_tests.rs": 0, "repl_tests.rs": 0, - "run_tests.rs": 350, + "run_tests.rs": 349, "shared_library_tests.rs": 0, "task_tests.rs": 30, "test_tests.rs": 75,