summaryrefslogtreecommitdiff
path: root/src/flags.rs
diff options
context:
space:
mode:
authorAndy Hayden <andyhayden1@gmail.com>2018-10-15 11:26:22 -0700
committerRyan Dahl <ry@tinyclouds.org>2018-10-15 14:26:22 -0400
commitfb90c6f52587e58378cb1ec7c97392efd3c42afa (patch)
tree5a1e173df78a8ad66389d25c767f37e0d08662f4 /src/flags.rs
parent28682a1d2c2601033fb524b37c2796d55f72f22b (diff)
Exit cleanly on unrecognized arguments (#990)
Refactor set_flags to return a Result
Diffstat (limited to 'src/flags.rs')
-rw-r--r--src/flags.rs35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/flags.rs b/src/flags.rs
index d766fee0c..0959248e1 100644
--- a/src/flags.rs
+++ b/src/flags.rs
@@ -68,7 +68,9 @@ DENO_DIR Set deno's base directory."
}
// Parses flags for deno. This does not do v8_set_flags() - call that separately.
-pub fn set_flags(args: Vec<String>) -> (DenoFlags, Vec<String>) {
+pub fn set_flags(
+ args: Vec<String>,
+) -> Result<(DenoFlags, Vec<String>), String> {
let args = v8_set_flags(args);
let mut flags = DenoFlags::default();
@@ -89,7 +91,7 @@ pub fn set_flags(args: Vec<String>) -> (DenoFlags, Vec<String>) {
"--deps" => flags.deps_flag = true,
"--types" => flags.types_flag = true,
"--" => break,
- _ => unimplemented!(),
+ other => return Err(format!("bad option {}", other)),
}
} else if a.len() > 1 && &a[0..1] == "-" {
let mut iter = a.chars().skip(1); // skip the "-"
@@ -99,7 +101,7 @@ pub fn set_flags(args: Vec<String>) -> (DenoFlags, Vec<String>) {
'D' => flags.log_debug = true,
'v' => flags.version = true,
'r' => flags.reload = true,
- _ => unimplemented!(),
+ other => return Err(format!("bad option -{}", other)),
}
}
} else {
@@ -109,12 +111,12 @@ pub fn set_flags(args: Vec<String>) -> (DenoFlags, Vec<String>) {
// add any remaining arguments to `rest`
rest.extend(arg_iter.map(|s| s.clone()));
- return (flags, rest);
+ return Ok((flags, rest));
}
#[test]
fn test_set_flags_1() {
- let (flags, rest) = set_flags(svec!["deno", "--version"]);
+ let (flags, rest) = set_flags(svec!["deno", "--version"]).unwrap();
assert_eq!(rest, svec!["deno"]);
assert_eq!(
flags,
@@ -127,7 +129,8 @@ fn test_set_flags_1() {
#[test]
fn test_set_flags_2() {
- let (flags, rest) = set_flags(svec!["deno", "-r", "-D", "script.ts"]);
+ let (flags, rest) =
+ set_flags(svec!["deno", "-r", "-D", "script.ts"]).unwrap();
assert_eq!(rest, svec!["deno", "script.ts"]);
assert_eq!(
flags,
@@ -142,7 +145,8 @@ fn test_set_flags_2() {
#[test]
fn test_set_flags_3() {
let (flags, rest) =
- set_flags(svec!["deno", "-r", "--deps", "script.ts", "--allow-write"]);
+ set_flags(svec!["deno", "-r", "--deps", "script.ts", "--allow-write"])
+ .unwrap();
assert_eq!(rest, svec!["deno", "script.ts"]);
assert_eq!(
flags,
@@ -158,7 +162,7 @@ fn test_set_flags_3() {
#[test]
fn test_set_flags_4() {
let (flags, rest) =
- set_flags(svec!["deno", "-Dr", "script.ts", "--allow-write"]);
+ set_flags(svec!["deno", "-Dr", "script.ts", "--allow-write"]).unwrap();
assert_eq!(rest, svec!["deno", "script.ts"]);
assert_eq!(
flags,
@@ -173,7 +177,7 @@ fn test_set_flags_4() {
#[test]
fn test_set_flags_5() {
- let (flags, rest) = set_flags(svec!["deno", "--types"]);
+ let (flags, rest) = set_flags(svec!["deno", "--types"]).unwrap();
assert_eq!(rest, svec!["deno"]);
assert_eq!(
flags,
@@ -184,6 +188,19 @@ fn test_set_flags_5() {
)
}
+#[test]
+fn test_set_bad_flags_1() {
+ let err = set_flags(svec!["deno", "--unknown-flag"]).unwrap_err();
+ assert_eq!(err, "bad option --unknown-flag");
+}
+
+#[test]
+fn test_set_bad_flags_2() {
+ // This needs to be changed if -z is added as a flag
+ let err = set_flags(svec!["deno", "-z"]).unwrap_err();
+ assert_eq!(err, "bad option -z");
+}
+
// Returns args passed to V8, followed by args passed to JS
fn v8_set_flags_preprocess(args: Vec<String>) -> (Vec<String>, Vec<String>) {
let mut rest = vec![];