0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-04 01:44:26 -05:00

BREAKING(config): make supported compilerOptions an allow list (#25432)

Deno has been using a deny list, which doesn't make sense because a lot
of these options don't even work.

Closes #25363
This commit is contained in:
David Sherret 2024-09-04 17:39:30 +02:00 committed by GitHub
parent 5400f1af6c
commit 07ad47da53
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 36 additions and 39 deletions

5
Cargo.lock generated
View file

@ -1374,9 +1374,9 @@ dependencies = [
[[package]] [[package]]
name = "deno_config" name = "deno_config"
version = "0.32.0" version = "0.33.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c774f2e49b4ca47f1fe5c39e1775d1434280a4f168252fed8f4a3f2230868448" checksum = "495df7ebed4feee5c0eb7631b0b86432bb6370638cf81d5eeb5769aab55fb2de"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"deno_package_json", "deno_package_json",
@ -1388,6 +1388,7 @@ dependencies = [
"jsonc-parser", "jsonc-parser",
"log", "log",
"percent-encoding", "percent-encoding",
"phf 0.11.2",
"serde", "serde",
"serde_json", "serde_json",
"thiserror", "thiserror",

View file

@ -65,7 +65,7 @@ winres.workspace = true
[dependencies] [dependencies]
deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] }
deno_cache_dir = { workspace = true } 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_core = { workspace = true, features = ["include_js_files_for_snapshotting"] }
deno_doc = { version = "0.148.0", features = ["html", "syntect"] } deno_doc = { version = "0.148.0", features = ["html", "syntect"] }
deno_graph = { version = "=0.82.0" } deno_graph = { version = "=0.82.0" }

View file

@ -2,6 +2,7 @@
use std::collections::HashSet; use std::collections::HashSet;
use deno_config::deno_json::TsConfigForEmit;
use deno_core::serde_json; use deno_core::serde_json;
use deno_semver::jsr::JsrDepPackageReq; use deno_semver::jsr::JsrDepPackageReq;
use deno_semver::jsr::JsrPackageReqReference; use deno_semver::jsr::JsrPackageReqReference;
@ -105,3 +106,18 @@ fn values_to_set<'a>(
} }
entries 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"),
);
}
}

View file

@ -42,6 +42,7 @@ pub use deno_config::deno_json::TsConfigForEmit;
pub use deno_config::deno_json::TsConfigType; pub use deno_config::deno_json::TsConfigType;
pub use deno_config::deno_json::TsTypeLib; pub use deno_config::deno_json::TsTypeLib;
pub use deno_config::glob::FilePatterns; pub use deno_config::glob::FilePatterns;
pub use deno_json::check_warn_tsconfig;
pub use flags::*; pub use flags::*;
pub use lockfile::CliLockfile; pub use lockfile::CliLockfile;
pub use package_json::NpmInstallDepsProvider; pub use package_json::NpmInstallDepsProvider;
@ -1220,7 +1221,7 @@ impl CliOptions {
if let Some(flag) = self.flags.node_modules_dir { if let Some(flag) = self.flags.node_modules_dir {
return Ok(Some(flag)); 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> { pub fn vendor_dir_path(&self) -> Option<&PathBuf> {
@ -1731,7 +1732,7 @@ fn resolve_node_modules_folder(
Some(mode.uses_node_modules_dir()) Some(mode.uses_node_modules_dir())
} else { } else {
workspace workspace
.node_modules_dir_mode()? .node_modules_dir()?
.map(|m| m.uses_node_modules_dir()) .map(|m| m.uses_node_modules_dir())
.or(flags.vendor) .or(flags.vendor)
.or_else(|| root_folder.deno_json.as_ref().and_then(|c| c.json.vendor)) .or_else(|| root_folder.deno_json.as_ref().and_then(|c| c.json.vendor))

View file

@ -1,5 +1,6 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // 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::get_root_cert_store;
use crate::args::CaData; use crate::args::CaData;
use crate::args::CliOptions; use crate::args::CliOptions;
@ -520,9 +521,7 @@ impl CliFactory {
let cli_options = self.cli_options()?; let cli_options = self.cli_options()?;
let ts_config_result = let ts_config_result =
cli_options.resolve_ts_config_for_emit(TsConfigType::Emit)?; cli_options.resolve_ts_config_for_emit(TsConfigType::Emit)?;
if let Some(ignored_options) = ts_config_result.maybe_ignored_options { check_warn_tsconfig(&ts_config_result);
warn!("{}", ignored_options);
}
let (transpile_options, emit_options) = let (transpile_options, emit_options) =
crate::args::ts_config_to_transpile_and_emit_options( crate::args::ts_config_to_transpile_and_emit_options(
ts_config_result.ts_config, ts_config_result.ts_config,

View file

@ -1387,10 +1387,8 @@ impl ConfigData {
} }
} }
let node_modules_dir = member_dir let node_modules_dir =
.workspace member_dir.workspace.node_modules_dir().unwrap_or_default();
.node_modules_dir_mode()
.unwrap_or_default();
let byonm = match node_modules_dir { let byonm = match node_modules_dir {
Some(mode) => mode == NodeModulesDirMode::Manual, Some(mode) => mode == NodeModulesDirMode::Manual,
None => member_dir.workspace.root_pkg_json().is_some(), 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 // `nodeModulesDir: true` setting in the deno.json file. This is to
// reduce the chance of modifying someone's node_modules directory // reduce the chance of modifying someone's node_modules directory
// without them having asked us to do so. // 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); let explicitly_disabled = node_modules_mode == Some(NodeModulesDirMode::None);
if explicitly_disabled { if explicitly_disabled {
return None; return None;

View file

@ -966,9 +966,8 @@ impl Inner {
.await; .await;
for config_file in self.config.tree.config_files() { for config_file in self.config.tree.config_files() {
(|| { (|| {
let compiler_options = config_file.to_compiler_options().ok()?.0; let compiler_options = config_file.to_compiler_options().ok()?.options;
let compiler_options_obj = compiler_options.as_object()?; let jsx_import_source = compiler_options.get("jsxImportSource")?;
let jsx_import_source = compiler_options_obj.get("jsxImportSource")?;
let jsx_import_source = jsx_import_source.as_str()?; let jsx_import_source = jsx_import_source.as_str()?;
let referrer = config_file.specifier.clone(); let referrer = config_file.specifier.clone();
let specifier = Url::parse(&format!( let specifier = Url::parse(&format!(

View file

@ -14,6 +14,7 @@ use deno_terminal::colors;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use regex::Regex; use regex::Regex;
use crate::args::check_warn_tsconfig;
use crate::args::CliOptions; use crate::args::CliOptions;
use crate::args::TsConfig; use crate::args::TsConfig;
use crate::args::TsConfigType; use crate::args::TsConfigType;
@ -118,9 +119,7 @@ impl TypeChecker {
.cli_options .cli_options
.resolve_ts_config_for_emit(TsConfigType::Check { lib: options.lib })?; .resolve_ts_config_for_emit(TsConfigType::Check { lib: options.lib })?;
if options.log_ignored_options { if options.log_ignored_options {
if let Some(ignored_options) = ts_config_result.maybe_ignored_options { check_warn_tsconfig(&ts_config_result);
log::warn!("{}", ignored_options);
}
} }
let type_check_mode = options.type_check_mode; let type_check_mode = options.type_check_mode;

View file

@ -1,5 +1,6 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use crate::args::check_warn_tsconfig;
use crate::args::CompileFlags; use crate::args::CompileFlags;
use crate::args::Flags; use crate::args::Flags;
use crate::factory::CliFactory; use crate::factory::CliFactory;
@ -79,6 +80,7 @@ pub async fn compile(
let ts_config_for_emit = cli_options let ts_config_for_emit = cli_options
.resolve_ts_config_for_emit(deno_config::deno_json::TsConfigType::Emit)?; .resolve_ts_config_for_emit(deno_config::deno_json::TsConfigType::Emit)?;
check_warn_tsconfig(&ts_config_for_emit);
let (transpile_options, emit_options) = let (transpile_options, emit_options) =
crate::args::ts_config_to_transpile_and_emit_options( crate::args::ts_config_to_transpile_and_emit_options(
ts_config_for_emit.ts_config, ts_config_for_emit.ts_config,

View file

@ -483,11 +483,6 @@ itest!(dynamic_import_concurrent_non_statically_analyzable {
http_server: true, 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 { itest!(_088_dynamic_import_already_evaluating {
args: "run --allow-read run/088_dynamic_import_already_evaluating.ts", args: "run --allow-read run/088_dynamic_import_already_evaluating.ts",
output: "run/088_dynamic_import_already_evaluating.ts.out", output: "run/088_dynamic_import_already_evaluating.ts.out",

View file

@ -1,6 +1,5 @@
{ {
"compilerOptions": { "compilerOptions": {
"allowJs": true,
"checkJs": true "checkJs": true
} }
} }

View file

@ -1,2 +1,3 @@
Warning experimentalDecorators compiler option is deprecated and may be removed at any time
Check [WILDCARD] Check [WILDCARD]
SomeClass { someField: "asdf" } SomeClass { someField: "asdf" }

View file

@ -1,2 +0,0 @@
export type SomeType = unknown;
console.log("Hello, world!");

View file

@ -1,2 +0,0 @@
[WILDCARD]Hello, world!
Hi!

View file

@ -1,4 +0,0 @@
import { SomeType } from "./hello.ts";
const string: SomeType = "Hi!";
console.log(string);

View file

@ -1,5 +0,0 @@
{
"compilerOptions": {
"importsNotUsedAsValues": "preserve"
}
}

View file

@ -221,7 +221,7 @@ async function ensureNoNewITests() {
"pm_tests.rs": 0, "pm_tests.rs": 0,
"publish_tests.rs": 0, "publish_tests.rs": 0,
"repl_tests.rs": 0, "repl_tests.rs": 0,
"run_tests.rs": 350, "run_tests.rs": 349,
"shared_library_tests.rs": 0, "shared_library_tests.rs": 0,
"task_tests.rs": 30, "task_tests.rs": 30,
"test_tests.rs": 75, "test_tests.rs": 75,