mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 10:45:41 +02:00
Short-hand flags (#1378)
* typo fixes * Change signature to take in short-hand flags * update help information * Parse short-hand flags as their long counterparts * lints * Modified a couple tests to use shorthand flags
This commit is contained in:
@ -183,7 +183,11 @@ fn with_empty_context(source: &Text, callback: impl FnOnce(ExpandContext)) {
|
||||
SyntaxShape::Pattern,
|
||||
"a path to get the directory contents from",
|
||||
)
|
||||
.switch("full", "list all available columns for each entry"),
|
||||
.switch(
|
||||
"full",
|
||||
"list all available columns for each entry",
|
||||
Some('f'),
|
||||
),
|
||||
);
|
||||
|
||||
callback(ExpandContext::new(Box::new(registry), source, None))
|
||||
|
@ -361,9 +361,20 @@ impl SpannedToken {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn as_flag(&self, value: &str, source: &Text) -> Option<Flag> {
|
||||
pub(crate) fn as_flag(&self, value: &str, short: Option<char>, source: &Text) -> Option<Flag> {
|
||||
match self.unspanned() {
|
||||
Token::Flag(flag @ Flag { .. }) if value == flag.name().slice(source) => Some(*flag),
|
||||
Token::Flag(flag @ Flag { .. }) => {
|
||||
let name = flag.name().slice(source);
|
||||
let is_long = flag.kind == FlagKind::Longhand && value == name;
|
||||
let is_short = flag.kind == FlagKind::Shorthand
|
||||
&& short.is_some()
|
||||
&& short == name.chars().nth(0);
|
||||
if is_long || is_short {
|
||||
Some(*flag)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
@ -31,8 +31,8 @@ pub fn parse_command_tail(
|
||||
trace!(target: "nu::parse::trace_remaining", "looking for {} : {:?}", name, kind);
|
||||
|
||||
match &kind.0 {
|
||||
NamedType::Switch => {
|
||||
let switch = extract_switch(name, tail);
|
||||
NamedType::Switch(s) => {
|
||||
let switch = extract_switch(name, *s, tail);
|
||||
|
||||
match switch {
|
||||
None => named.insert_switch(name, None),
|
||||
@ -45,8 +45,8 @@ pub fn parse_command_tail(
|
||||
}
|
||||
}
|
||||
}
|
||||
NamedType::Mandatory(syntax_type) => {
|
||||
match extract_mandatory(config, name, tail, command_span) {
|
||||
NamedType::Mandatory(s, syntax_type) => {
|
||||
match extract_mandatory(config, name, *s, tail, command_span) {
|
||||
Err(err) => {
|
||||
// remember this error, but continue coloring
|
||||
found_error = Some(err);
|
||||
@ -71,8 +71,8 @@ pub fn parse_command_tail(
|
||||
}
|
||||
}
|
||||
}
|
||||
NamedType::Optional(syntax_type) => {
|
||||
match extract_optional(name, tail) {
|
||||
NamedType::Optional(s, syntax_type) => {
|
||||
match extract_optional(name, *s, tail) {
|
||||
Err(err) => {
|
||||
// remember this error, but continue coloring
|
||||
found_error = Some(err);
|
||||
@ -270,10 +270,14 @@ fn expand_spaced_expr<
|
||||
|
||||
fn extract_switch(
|
||||
name: &str,
|
||||
short: Option<char>,
|
||||
tokens: &mut hir::TokensIterator<'_>,
|
||||
) -> Option<(usize, Spanned<Flag>)> {
|
||||
let source = tokens.source();
|
||||
let switch = tokens.extract(|t| t.as_flag(name, &source).map(|flag| flag.spanned(t.span())));
|
||||
let switch = tokens.extract(|t| {
|
||||
t.as_flag(name, short, &source)
|
||||
.map(|flag| flag.spanned(t.span()))
|
||||
});
|
||||
|
||||
match switch {
|
||||
None => None,
|
||||
@ -287,11 +291,15 @@ fn extract_switch(
|
||||
fn extract_mandatory(
|
||||
config: &Signature,
|
||||
name: &str,
|
||||
short: Option<char>,
|
||||
tokens: &mut hir::TokensIterator<'_>,
|
||||
span: Span,
|
||||
) -> Result<(usize, Spanned<Flag>), ParseError> {
|
||||
let source = tokens.source();
|
||||
let flag = tokens.extract(|t| t.as_flag(name, &source).map(|flag| flag.spanned(t.span())));
|
||||
let flag = tokens.extract(|t| {
|
||||
t.as_flag(name, short, &source)
|
||||
.map(|flag| flag.spanned(t.span()))
|
||||
});
|
||||
|
||||
match flag {
|
||||
None => Err(ParseError::argument_error(
|
||||
@ -308,10 +316,14 @@ fn extract_mandatory(
|
||||
|
||||
fn extract_optional(
|
||||
name: &str,
|
||||
short: Option<char>,
|
||||
tokens: &mut hir::TokensIterator<'_>,
|
||||
) -> Result<Option<(usize, Spanned<Flag>)>, ParseError> {
|
||||
let source = tokens.source();
|
||||
let flag = tokens.extract(|t| t.as_flag(name, &source).map(|flag| flag.spanned(t.span())));
|
||||
let flag = tokens.extract(|t| {
|
||||
t.as_flag(name, short, &source)
|
||||
.map(|flag| flag.spanned(t.span()))
|
||||
});
|
||||
|
||||
match flag {
|
||||
None => Ok(None),
|
||||
|
Reference in New Issue
Block a user