summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-01-22 18:37:28 +0100
committerGitHub <noreply@github.com>2024-01-22 17:37:28 +0000
commitd20c9e75d1540b1a27e721d0cf66d29ba6a2c3fb (patch)
tree83059b5759fad286d8131795d7d79d6fee5bb440 /cli
parentbc92f872988fd8b9cdf2ae1479278789911237a5 (diff)
refactor: add "UnstableConfig" struct to cli/args/flags.rs (#21993)
This commit adds "UnstableConfig" struct which centralizes handling of all "--unstable-*" flags. Closes https://github.com/denoland/deno/issues/21920
Diffstat (limited to 'cli')
-rw-r--r--cli/args/flags.rs57
-rw-r--r--cli/args/mod.rs12
-rw-r--r--cli/factory.rs4
-rw-r--r--cli/main.rs7
-rw-r--r--cli/standalone/binary.rs13
-rw-r--r--cli/standalone/mod.rs6
-rw-r--r--cli/tools/installer.rs8
7 files changed, 67 insertions, 40 deletions
diff --git a/cli/args/flags.rs b/cli/args/flags.rs
index 46560b9ba..3810d77a3 100644
--- a/cli/args/flags.rs
+++ b/cli/args/flags.rs
@@ -405,6 +405,17 @@ pub enum CaData {
Bytes(Vec<u8>),
}
+#[derive(
+ Clone, Default, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize,
+)]
+pub struct UnstableConfig {
+ pub legacy_flag_enabled: bool, // --unstable
+ pub bare_node_builtins: bool, // --unstable-bare-node-builts
+ pub byonm: bool,
+ pub sloppy_imports: bool,
+ pub features: Vec<String>, // --unstabe-kv --unstable-cron
+}
+
#[derive(Clone, Debug, Eq, PartialEq, Default)]
pub struct Flags {
/// Vector of CLI arguments - these are user script arguments, all Deno
@@ -460,12 +471,7 @@ pub struct Flags {
pub reload: bool,
pub seed: Option<u64>,
pub strace_ops: Option<Vec<String>>,
- pub unstable: bool,
- pub unstable_bare_node_builtins: bool,
- pub unstable_byonm: bool,
- pub unstable_sloppy_imports: bool,
- pub unstable_workspaces: bool,
- pub unstable_features: Vec<String>,
+ pub unstable_config: UnstableConfig,
pub unsafely_ignore_certificate_errors: Option<Vec<String>>,
pub v8_flags: Vec<String>,
}
@@ -865,19 +871,20 @@ pub fn flags_from_vec(args: Vec<String>) -> clap::error::Result<Flags> {
let mut flags = Flags::default();
if matches.get_flag("unstable") {
- flags.unstable = true;
+ flags.unstable_config.legacy_flag_enabled = true;
}
for (name, _, _) in crate::UNSTABLE_GRANULAR_FLAGS {
if matches.get_flag(&format!("unstable-{}", name)) {
- flags.unstable_features.push(name.to_string());
+ flags.unstable_config.features.push(name.to_string());
}
}
- flags.unstable_bare_node_builtins =
+ flags.unstable_config.bare_node_builtins =
matches.get_flag("unstable-bare-node-builtins");
- flags.unstable_byonm = matches.get_flag("unstable-byonm");
- flags.unstable_sloppy_imports = matches.get_flag("unstable-sloppy-imports");
+ flags.unstable_config.byonm = matches.get_flag("unstable-byonm");
+ flags.unstable_config.sloppy_imports =
+ matches.get_flag("unstable-sloppy-imports");
if matches.get_flag("quiet") {
flags.log_level = Some(Level::Error);
@@ -4199,7 +4206,10 @@ mod tests {
subcommand: DenoSubcommand::Run(RunFlags::new_default(
"script.ts".to_string()
)),
- unstable: true,
+ unstable_config: UnstableConfig {
+ legacy_flag_enabled: true,
+ ..Default::default()
+ },
log_level: Some(Level::Error),
..Flags::default()
}
@@ -7054,7 +7064,10 @@ mod tests {
reporter: Default::default(),
junit_path: None,
}),
- unstable: true,
+ unstable_config: UnstableConfig {
+ legacy_flag_enabled: true,
+ ..Default::default()
+ },
no_prompt: true,
no_npm: true,
no_remote: true,
@@ -8189,7 +8202,10 @@ mod tests {
cwd: None,
task: Some("build".to_string()),
}),
- unstable: true,
+ unstable_config: UnstableConfig {
+ legacy_flag_enabled: true,
+ ..Default::default()
+ },
log_level: Some(log::Level::Error),
..Flags::default()
}
@@ -8286,7 +8302,10 @@ mod tests {
},
watch: Default::default(),
}),
- unstable: true,
+ unstable_config: UnstableConfig {
+ legacy_flag_enabled: true,
+ ..Default::default()
+ },
no_npm: true,
no_remote: true,
type_check_mode: TypeCheckMode::Local,
@@ -8430,7 +8449,7 @@ mod tests {
#[test]
fn jupyter() {
- let r = flags_from_vec(svec!["deno", "jupyter", "--unstable"]);
+ let r = flags_from_vec(svec!["deno", "jupyter"]);
assert_eq!(
r.unwrap(),
Flags {
@@ -8439,12 +8458,11 @@ mod tests {
kernel: false,
conn_file: None,
}),
- unstable: true,
..Flags::default()
}
);
- let r = flags_from_vec(svec!["deno", "jupyter", "--unstable", "--install"]);
+ let r = flags_from_vec(svec!["deno", "jupyter", "--install"]);
assert_eq!(
r.unwrap(),
Flags {
@@ -8453,7 +8471,6 @@ mod tests {
kernel: false,
conn_file: None,
}),
- unstable: true,
..Flags::default()
}
);
@@ -8461,7 +8478,6 @@ mod tests {
let r = flags_from_vec(svec![
"deno",
"jupyter",
- "--unstable",
"--kernel",
"--conn",
"path/to/conn/file"
@@ -8474,7 +8490,6 @@ mod tests {
kernel: true,
conn_file: Some(PathBuf::from("path/to/conn/file")),
}),
- unstable: true,
..Flags::default()
}
);
diff --git a/cli/args/mod.rs b/cli/args/mod.rs
index 1fdd2f503..c6bc712f8 100644
--- a/cli/args/mod.rs
+++ b/cli/args/mod.rs
@@ -1409,12 +1409,12 @@ impl CliOptions {
&self.flags.unsafely_ignore_certificate_errors
}
- pub fn unstable(&self) -> bool {
- self.flags.unstable
+ pub fn legacy_unstable_flag(&self) -> bool {
+ self.flags.unstable_config.legacy_flag_enabled
}
pub fn unstable_bare_node_builtins(&self) -> bool {
- self.flags.unstable_bare_node_builtins
+ self.flags.unstable_config.bare_node_builtins
|| self
.maybe_config_file()
.as_ref()
@@ -1423,7 +1423,7 @@ impl CliOptions {
}
pub fn unstable_byonm(&self) -> bool {
- self.flags.unstable_byonm
+ self.flags.unstable_config.byonm
|| NPM_PROCESS_STATE
.as_ref()
.map(|s| matches!(s.kind, NpmProcessStateKind::Byonm))
@@ -1436,7 +1436,7 @@ impl CliOptions {
}
pub fn unstable_sloppy_imports(&self) -> bool {
- self.flags.unstable_sloppy_imports
+ self.flags.unstable_config.sloppy_imports
|| self
.maybe_config_file()
.as_ref()
@@ -1451,7 +1451,7 @@ impl CliOptions {
.map(|c| c.json.unstable.clone())
.unwrap_or_default();
- from_config_file.extend_from_slice(&self.flags.unstable_features);
+ from_config_file.extend_from_slice(&self.flags.unstable_config.features);
from_config_file
}
diff --git a/cli/factory.rs b/cli/factory.rs
index ed5232470..1b084fc28 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -603,7 +603,7 @@ impl CliFactory {
// TODO(bartlomieju): enable, once we deprecate `--unstable` in favor
// of granular --unstable-* flags.
// feature_checker.set_warn_cb(Box::new(crate::unstable_warn_cb));
- if self.options.unstable() {
+ if self.options.legacy_unstable_flag() {
checker.enable_legacy_unstable();
}
let unstable_features = self.options.unstable_features();
@@ -709,7 +709,7 @@ impl CliFactory {
.options
.unsafely_ignore_certificate_errors()
.clone(),
- unstable: self.options.unstable(),
+ unstable: self.options.legacy_unstable_flag(),
maybe_root_package_json_deps: self.options.maybe_package_json_deps(),
})
}
diff --git a/cli/main.rs b/cli/main.rs
index 53c7bdf5a..cd065f81e 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -401,8 +401,11 @@ pub fn main() {
// https://github.com/microsoft/vscode/blob/48d4ba271686e8072fc6674137415bc80d936bc7/extensions/typescript-language-features/src/configuration/configuration.ts#L213-L214
DenoSubcommand::Lsp => vec!["--max-old-space-size=3072".to_string()],
_ => {
- if flags.unstable
- || flags.unstable_features.contains(&"temporal".to_string())
+ if flags.unstable_config.legacy_flag_enabled
+ || flags
+ .unstable_config
+ .features
+ .contains(&"temporal".to_string())
{
vec!["--harmony-temporal".to_string()]
} else {
diff --git a/cli/standalone/binary.rs b/cli/standalone/binary.rs
index cdf86fffa..3204ca397 100644
--- a/cli/standalone/binary.rs
+++ b/cli/standalone/binary.rs
@@ -33,6 +33,7 @@ use crate::args::CaData;
use crate::args::CliOptions;
use crate::args::CompileFlags;
use crate::args::PackageJsonDepsProvider;
+use crate::args::UnstableConfig;
use crate::cache::DenoDir;
use crate::file_fetcher::FileFetcher;
use crate::http_util::HttpClient;
@@ -137,8 +138,6 @@ pub enum NodeModules {
#[derive(Deserialize, Serialize)]
pub struct Metadata {
pub argv: Vec<String>,
- pub unstable: bool,
- pub unstable_features: Vec<String>,
pub seed: Option<u64>,
pub permissions: PermissionsOptions,
pub location: Option<Url>,
@@ -151,6 +150,7 @@ pub struct Metadata {
pub entrypoint: ModuleSpecifier,
pub node_modules: Option<NodeModules>,
pub disable_deprecated_api_warning: bool,
+ pub unstable_config: UnstableConfig,
}
pub fn load_npm_vfs(root_dir_path: PathBuf) -> Result<FileBackedVfs, AnyError> {
@@ -543,8 +543,6 @@ impl<'a> DenoCompileBinaryWriter<'a> {
let metadata = Metadata {
argv: compile_flags.args.clone(),
- unstable: cli_options.unstable(),
- unstable_features: cli_options.unstable_features(),
seed: cli_options.seed(),
location: cli_options.location_flag().clone(),
permissions: cli_options.permissions_options(),
@@ -560,6 +558,13 @@ impl<'a> DenoCompileBinaryWriter<'a> {
node_modules,
disable_deprecated_api_warning: cli_options
.disable_deprecated_api_warning,
+ unstable_config: UnstableConfig {
+ legacy_flag_enabled: cli_options.legacy_unstable_flag(),
+ bare_node_builtins: cli_options.unstable_bare_node_builtins(),
+ byonm: cli_options.unstable_byonm(),
+ sloppy_imports: cli_options.unstable_sloppy_imports(),
+ features: cli_options.unstable_features(),
+ },
};
write_binary_bytes(
diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs
index 8a98636a4..7054e3451 100644
--- a/cli/standalone/mod.rs
+++ b/cli/standalone/mod.rs
@@ -487,10 +487,10 @@ pub async fn run(
// TODO(bartlomieju): enable, once we deprecate `--unstable` in favor
// of granular --unstable-* flags.
// feature_checker.set_warn_cb(Box::new(crate::unstable_warn_cb));
- if metadata.unstable {
+ if metadata.unstable_config.legacy_flag_enabled {
checker.enable_legacy_unstable();
}
- for feature in metadata.unstable_features {
+ for feature in metadata.unstable_config.features {
// `metadata` is valid for the whole lifetime of the program, so we
// can leak the string here.
checker.enable_feature(feature.leak());
@@ -535,7 +535,7 @@ pub async fn run(
seed: metadata.seed,
unsafely_ignore_certificate_errors: metadata
.unsafely_ignore_certificate_errors,
- unstable: metadata.unstable,
+ unstable: metadata.unstable_config.legacy_flag_enabled,
maybe_root_package_json_deps: package_json_deps_provider.deps().cloned(),
},
None,
diff --git a/cli/tools/installer.rs b/cli/tools/installer.rs
index fa39b4596..f854eafe4 100644
--- a/cli/tools/installer.rs
+++ b/cli/tools/installer.rs
@@ -378,7 +378,7 @@ async fn resolve_shim_data(
TypeCheckMode::Local => executable_args.push("--check".to_string()),
}
- if flags.unstable {
+ if flags.unstable_config.legacy_flag_enabled {
executable_args.push("--unstable".to_string());
}
@@ -499,6 +499,7 @@ fn is_in_path(dir: &Path) -> bool {
mod tests {
use super::*;
+ use crate::args::UnstableConfig;
use crate::util::fs::canonicalize_path;
use deno_config::ConfigFlag;
use std::process::Command;
@@ -647,7 +648,10 @@ mod tests {
create_install_shim(
Flags {
- unstable: true,
+ unstable_config: UnstableConfig {
+ legacy_flag_enabled: true,
+ ..Default::default()
+ },
..Flags::default()
},
InstallFlags {