summaryrefslogtreecommitdiff
path: root/cli/flags.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/flags.rs')
-rw-r--r--cli/flags.rs76
1 files changed, 71 insertions, 5 deletions
diff --git a/cli/flags.rs b/cli/flags.rs
index cdd90fa33..b0e4b32ed 100644
--- a/cli/flags.rs
+++ b/cli/flags.rs
@@ -144,6 +144,7 @@ pub struct LintFlags {
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
pub struct ReplFlags {
+ pub eval_files: Option<Vec<String>>,
pub eval: Option<String>,
}
@@ -216,7 +217,10 @@ pub enum DenoSubcommand {
impl Default for DenoSubcommand {
fn default() -> DenoSubcommand {
- DenoSubcommand::Repl(ReplFlags { eval: None })
+ DenoSubcommand::Repl(ReplFlags {
+ eval_files: None,
+ eval: None,
+ })
}
}
@@ -556,7 +560,13 @@ where
Some(("uninstall", m)) => uninstall_parse(&mut flags, m),
Some(("upgrade", m)) => upgrade_parse(&mut flags, m),
Some(("vendor", m)) => vendor_parse(&mut flags, m),
- _ => handle_repl_flags(&mut flags, ReplFlags { eval: None }),
+ _ => handle_repl_flags(
+ &mut flags,
+ ReplFlags {
+ eval_files: None,
+ eval: None,
+ },
+ ),
}
Ok(flags)
@@ -1361,6 +1371,16 @@ fn repl_subcommand<'a>() -> Command<'a> {
runtime_args(Command::new("repl"), false, true)
.about("Read Eval Print Loop")
.arg(
+ Arg::new("eval-file")
+ .long("eval-file")
+ .min_values(1)
+ .takes_value(true)
+ .use_value_delimiter(true)
+ .require_equals(true)
+ .help("Evaluates the provided file(s) as scripts when the REPL starts. Accepts file paths and URLs.")
+ .value_hint(ValueHint::AnyPath),
+ )
+ .arg(
Arg::new("eval")
.long("eval")
.help("Evaluates the provided code when the REPL starts.")
@@ -2446,9 +2466,15 @@ fn repl_parse(flags: &mut Flags, matches: &clap::ArgMatches) {
flags.type_check_mode = TypeCheckMode::None;
runtime_args_parse(flags, matches, false, true);
unsafely_ignore_certificate_errors_parse(flags, matches);
+
+ let eval_files: Option<Vec<String>> = matches
+ .values_of("eval-file")
+ .map(|values| values.map(String::from).collect());
+
handle_repl_flags(
flags,
ReplFlags {
+ eval_files,
eval: matches.value_of("eval").map(ToOwned::to_owned),
},
);
@@ -3884,7 +3910,10 @@ mod tests {
r.unwrap(),
Flags {
repl: true,
- subcommand: DenoSubcommand::Repl(ReplFlags { eval: None }),
+ subcommand: DenoSubcommand::Repl(ReplFlags {
+ eval_files: None,
+ eval: None
+ }),
allow_net: Some(vec![]),
unsafely_ignore_certificate_errors: None,
allow_env: Some(vec![]),
@@ -3906,7 +3935,10 @@ mod tests {
r.unwrap(),
Flags {
repl: true,
- subcommand: DenoSubcommand::Repl(ReplFlags { eval: None }),
+ subcommand: DenoSubcommand::Repl(ReplFlags {
+ eval_files: None,
+ eval: None
+ }),
import_map_path: Some("import_map.json".to_string()),
no_remote: true,
config_path: Some("tsconfig.json".to_string()),
@@ -3942,6 +3974,7 @@ mod tests {
Flags {
repl: true,
subcommand: DenoSubcommand::Repl(ReplFlags {
+ eval_files: None,
eval: Some("console.log('hello');".to_string()),
}),
allow_net: Some(vec![]),
@@ -3958,6 +3991,35 @@ mod tests {
}
#[test]
+ fn repl_with_eval_file_flag() {
+ #[rustfmt::skip]
+ let r = flags_from_vec(svec!["deno", "repl", "--eval-file=./a.js,./b.ts,https://examples.deno.land/hello-world.ts"]);
+ assert_eq!(
+ r.unwrap(),
+ Flags {
+ repl: true,
+ subcommand: DenoSubcommand::Repl(ReplFlags {
+ eval_files: Some(vec![
+ "./a.js".to_string(),
+ "./b.ts".to_string(),
+ "https://examples.deno.land/hello-world.ts".to_string()
+ ]),
+ eval: None,
+ }),
+ allow_net: Some(vec![]),
+ allow_env: Some(vec![]),
+ allow_run: Some(vec![]),
+ allow_read: Some(vec![]),
+ allow_write: Some(vec![]),
+ allow_ffi: Some(vec![]),
+ allow_hrtime: true,
+ type_check_mode: TypeCheckMode::None,
+ ..Flags::default()
+ }
+ );
+ }
+
+ #[test]
fn allow_read_allowlist() {
use test_util::TempDir;
let temp_dir_guard = TempDir::new();
@@ -4590,6 +4652,7 @@ mod tests {
Flags {
repl: true,
subcommand: DenoSubcommand::Repl(ReplFlags {
+ eval_files: None,
eval: Some("console.log('hello');".to_string()),
}),
unsafely_ignore_certificate_errors: Some(vec![]),
@@ -4663,7 +4726,10 @@ mod tests {
r.unwrap(),
Flags {
repl: true,
- subcommand: DenoSubcommand::Repl(ReplFlags { eval: None }),
+ subcommand: DenoSubcommand::Repl(ReplFlags {
+ eval_files: None,
+ eval: None
+ }),
unsafely_ignore_certificate_errors: Some(svec![
"deno.land",
"localhost",