mirror of
https://github.com/nushell/nushell
synced 2025-01-15 14:44:14 +00:00
Simple short flag parse
This commit is contained in:
parent
4249c5b3e0
commit
aa7f23e1e1
2 changed files with 40 additions and 3 deletions
|
@ -60,9 +60,9 @@ fn main() -> std::io::Result<()> {
|
||||||
.required("block", SyntaxShape::Block, "body of the definition");
|
.required("block", SyntaxShape::Block, "body of the definition");
|
||||||
working_set.add_decl(sig.into());
|
working_set.add_decl(sig.into());
|
||||||
|
|
||||||
let file = std::fs::read(&path)?;
|
// let file = std::fs::read(&path)?;
|
||||||
let (output, err) = working_set.parse_file(&path, file);
|
// let (output, err) = working_set.parse_file(&path, file);
|
||||||
//let (output, err) = working_set.parse_source(path.as_bytes());
|
let (output, err) = working_set.parse_source(path.as_bytes());
|
||||||
println!("{:#?}", output);
|
println!("{:#?}", output);
|
||||||
println!("error: {:?}", err);
|
println!("error: {:?}", err);
|
||||||
|
|
||||||
|
|
|
@ -994,6 +994,43 @@ impl ParserWorkingSet {
|
||||||
short: None,
|
short: None,
|
||||||
required: false,
|
required: false,
|
||||||
}));
|
}));
|
||||||
|
} else if contents.starts_with(b"-") {
|
||||||
|
// Short flag
|
||||||
|
|
||||||
|
let short_flag = &contents[1..];
|
||||||
|
let short_flag =
|
||||||
|
String::from_utf8_lossy(short_flag).to_string();
|
||||||
|
let chars: Vec<char> = short_flag.chars().collect();
|
||||||
|
|
||||||
|
if chars.len() > 1 {
|
||||||
|
error = error.or(Some(ParseError::Mismatch(
|
||||||
|
"short flag".into(),
|
||||||
|
*span,
|
||||||
|
)));
|
||||||
|
|
||||||
|
args.push(Arg::Flag(Flag {
|
||||||
|
arg: None,
|
||||||
|
desc: String::new(),
|
||||||
|
long: String::new(),
|
||||||
|
short: None,
|
||||||
|
required: false,
|
||||||
|
}));
|
||||||
|
} else if chars.is_empty() {
|
||||||
|
// Positional arg
|
||||||
|
args.push(Arg::Positional(PositionalArg {
|
||||||
|
desc: String::new(),
|
||||||
|
name: String::from_utf8_lossy(contents).to_string(),
|
||||||
|
shape: SyntaxShape::Any,
|
||||||
|
}))
|
||||||
|
} else {
|
||||||
|
args.push(Arg::Flag(Flag {
|
||||||
|
arg: None,
|
||||||
|
desc: String::new(),
|
||||||
|
long: String::new(),
|
||||||
|
short: Some(chars[0]),
|
||||||
|
required: false,
|
||||||
|
}));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Positional arg
|
// Positional arg
|
||||||
args.push(Arg::Positional(PositionalArg {
|
args.push(Arg::Positional(PositionalArg {
|
||||||
|
|
Loading…
Reference in a new issue