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:
parent
5400f1af6c
commit
07ad47da53
17 changed files with 36 additions and 39 deletions
5
Cargo.lock
generated
5
Cargo.lock
generated
|
@ -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",
|
||||||
|
|
|
@ -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" }
|
||||||
|
|
|
@ -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"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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!(
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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",
|
||||||
|
|
1
tests/testdata/run/checkjs.tsconfig.json
vendored
1
tests/testdata/run/checkjs.tsconfig.json
vendored
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"allowJs": true,
|
|
||||||
"checkJs": true
|
"checkJs": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" }
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
export type SomeType = unknown;
|
|
||||||
console.log("Hello, world!");
|
|
|
@ -1,2 +0,0 @@
|
||||||
[WILDCARD]Hello, world!
|
|
||||||
Hi!
|
|
|
@ -1,4 +0,0 @@
|
||||||
import { SomeType } from "./hello.ts";
|
|
||||||
|
|
||||||
const string: SomeType = "Hi!";
|
|
||||||
console.log(string);
|
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"importsNotUsedAsValues": "preserve"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue