summaryrefslogtreecommitdiff
path: root/cli/flags.rs
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2022-01-17 20:10:17 -0500
committerGitHub <noreply@github.com>2022-01-17 20:10:17 -0500
commit39ea4abff4bfa09c4e98e00ad0d4e0e7b78f1187 (patch)
tree501ac70cd048f0a197f2accf1cf01234d54cf143 /cli/flags.rs
parentb10563cb2083f7af9d4320662d6aa1897b6db23e (diff)
feat: auto-discover config file (#13313)
Diffstat (limited to 'cli/flags.rs')
-rw-r--r--cli/flags.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/cli/flags.rs b/cli/flags.rs
index 854b54416..8b308658d 100644
--- a/cli/flags.rs
+++ b/cli/flags.rs
@@ -361,6 +361,28 @@ impl Flags {
args
}
+
+ /// Extract path arguments for config search paths.
+ pub fn config_path_args(&self) -> Vec<PathBuf> {
+ use DenoSubcommand::*;
+ if let Fmt(FmtFlags { files, .. }) = &self.subcommand {
+ files.clone()
+ } else if let Lint(LintFlags { files, .. }) = &self.subcommand {
+ files.clone()
+ } else if let Run(RunFlags { script }) = &self.subcommand {
+ if let Ok(module_specifier) = deno_core::resolve_url_or_path(script) {
+ if let Ok(p) = module_specifier.to_file_path() {
+ vec![p]
+ } else {
+ vec![]
+ }
+ } else {
+ vec![]
+ }
+ } else {
+ vec![]
+ }
+ }
}
impl From<Flags> for PermissionsOptions {
@@ -4628,4 +4650,30 @@ mod tests {
}
);
}
+
+ #[test]
+ fn test_config_path_args() {
+ let flags = flags_from_vec(svec!["deno", "run", "foo.js"]).unwrap();
+ assert_eq!(
+ flags.config_path_args(),
+ vec![std::env::current_dir().unwrap().join("foo.js")]
+ );
+
+ let flags =
+ flags_from_vec(svec!["deno", "lint", "dir/a.js", "dir/b.js"]).unwrap();
+ assert_eq!(
+ flags.config_path_args(),
+ vec![PathBuf::from("dir/a.js"), PathBuf::from("dir/b.js")]
+ );
+
+ let flags = flags_from_vec(svec!["deno", "lint"]).unwrap();
+ assert!(flags.config_path_args().is_empty());
+
+ let flags =
+ flags_from_vec(svec!["deno", "fmt", "dir/a.js", "dir/b.js"]).unwrap();
+ assert_eq!(
+ flags.config_path_args(),
+ vec![PathBuf::from("dir/a.js"), PathBuf::from("dir/b.js")]
+ );
+ }
}