mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -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]]
|
||||
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",
|
||||
|
|
|
@ -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" }
|
||||
|
|
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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!(
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
|
|
1
tests/testdata/run/checkjs.tsconfig.json
vendored
1
tests/testdata/run/checkjs.tsconfig.json
vendored
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"checkJs": true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
Warning experimentalDecorators compiler option is deprecated and may be removed at any time
|
||||
Check [WILDCARD]
|
||||
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,
|
||||
"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,
|
||||
|
|
Loading…
Reference in a new issue