Skip to content

Commit 63dd2dd

Browse files
authored
fix(flagset): correctly parse shorthand flags with values (#7)
1 parent fdbfa92 commit 63dd2dd

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

src/lib.rs

+32-4
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ impl FlagSet {
195195
}
196196

197197
/// args returns the non-flag arguments.
198-
pub fn args(self) -> Vec<String> {
198+
pub fn args(&self) -> Vec<String> {
199199
self.args.clone()
200200
}
201201

@@ -419,14 +419,14 @@ impl FlagSet {
419419
let c = arg.unwrap();
420420
if *c == '=' {
421421
args.next();
422-
self.set(name, scan_arg(args))?;
422+
return self.set(name, scan_arg(args));
423423
} else if no_opt_def_value != "" {
424424
self.set(name, no_opt_def_value)?;
425425
} else if *c != ' ' {
426-
self.set(name, scan_arg(args))?;
426+
return self.set(name, scan_arg(args));
427427
} else {
428428
args.next();
429-
self.set(name, scan_arg(args))?;
429+
return self.set(name, scan_arg(args));
430430
}
431431
}
432432
}
@@ -839,4 +839,32 @@ mod tests {
839839
let bools = flags.value_of::<Slice<bool>>("bools").unwrap();
840840
assert_eq!(bools.len(), 1);
841841
}
842+
843+
#[test]
844+
fn parse_arg_after_shorthand() {
845+
let mut flags = FlagSet::new("test");
846+
flags.int8_p("int", 'i', 0, "test");
847+
848+
if let Err(err) = flags.parse(vec!["-i=1", "test"]) {
849+
panic!(err);
850+
}
851+
852+
let int = flags.value_of::<i8>("int").unwrap();
853+
assert_eq!(int, 1);
854+
assert_eq!(flags.args().len(), 1);
855+
}
856+
857+
#[test]
858+
fn parse_arg_after_shorthand_with_space() {
859+
let mut flags = FlagSet::new("test");
860+
flags.int8_p("int", 'i', 0, "test");
861+
862+
if let Err(err) = flags.parse(vec!["-i", "1", "test"]) {
863+
panic!(err);
864+
}
865+
866+
let int = flags.value_of::<i8>("int").unwrap();
867+
assert_eq!(int, 1);
868+
assert_eq!(flags.args().len(), 1);
869+
}
842870
}

0 commit comments

Comments
 (0)