mirror of
https://github.com/nushell/nushell
synced 2024-11-14 00:47:09 +00:00
Merge pull request #177 from jonathandturner/fix_numeric_filenames
Check for barewords that start with a number
This commit is contained in:
commit
59e3ca69f3
1 changed files with 28 additions and 11 deletions
|
@ -80,7 +80,7 @@ pub fn raw_integer(input: NomSpan) -> IResult<NomSpan, Spanned<i64>> {
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
pub fn integer(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
pub fn integer(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
||||||
trace_step(input, "integer", move |input| {
|
trace_step(input, "integer", move |input| {
|
||||||
let (input, int) = raw_integer(input)?;
|
let (input, int) = raw_integer(input)?;
|
||||||
|
@ -88,6 +88,7 @@ pub fn integer(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
||||||
Ok((input, TokenTreeBuilder::spanned_int(*int, int.span)))
|
Ok((input, TokenTreeBuilder::spanned_int(*int, int.span)))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
pub fn operator(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
pub fn operator(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
||||||
trace_step(input, "operator", |input| {
|
trace_step(input, "operator", |input| {
|
||||||
|
@ -243,22 +244,37 @@ pub fn raw_unit(input: NomSpan) -> IResult<NomSpan, Spanned<Unit>> {
|
||||||
|
|
||||||
pub fn size(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
pub fn size(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
||||||
trace_step(input, "size", move |input| {
|
trace_step(input, "size", move |input| {
|
||||||
|
let mut is_size = false;
|
||||||
let start = input.offset;
|
let start = input.offset;
|
||||||
let (input, int) = raw_integer(input)?;
|
let (input, int) = raw_integer(input)?;
|
||||||
let (input, unit) = raw_unit(input)?;
|
if let Ok((input, Some(size))) = opt(raw_unit)(input) {
|
||||||
let end = input.offset;
|
let end = input.offset;
|
||||||
|
|
||||||
|
// Check to make sure there is no trailing parseable characters
|
||||||
|
if let Ok((input, Some(extra))) = opt(bare)(input) {
|
||||||
|
return Err(nom::Err::Error((input, nom::error::ErrorKind::Char)));
|
||||||
|
}
|
||||||
|
|
||||||
Ok((
|
Ok((
|
||||||
input,
|
input,
|
||||||
TokenTreeBuilder::spanned_size((*int, *unit), (start, end)),
|
TokenTreeBuilder::spanned_size((*int, *size), (start, end)),
|
||||||
))
|
))
|
||||||
|
} else {
|
||||||
|
let end = input.offset;
|
||||||
|
|
||||||
|
// Check to make sure there is no trailing parseable characters
|
||||||
|
if let Ok((input, Some(extra))) = opt(bare)(input) {
|
||||||
|
return Err(nom::Err::Error((input, nom::error::ErrorKind::Char)));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok((input, TokenTreeBuilder::spanned_int((*int), (start, end))))
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn leaf(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
pub fn leaf(input: NomSpan) -> IResult<NomSpan, TokenNode> {
|
||||||
trace_step(input, "leaf", move |input| {
|
trace_step(input, "leaf", move |input| {
|
||||||
let (input, node) =
|
let (input, node) = alt((size, string, operator, flag, shorthand, var, bare))(input)?;
|
||||||
alt((size, integer, string, operator, flag, shorthand, var, bare))(input)?;
|
|
||||||
|
|
||||||
Ok((input, node))
|
Ok((input, node))
|
||||||
})
|
})
|
||||||
|
@ -515,6 +531,7 @@ fn int<T>(frag: &str, neg: Option<T>) -> i64 {
|
||||||
fn is_start_bare_char(c: char) -> bool {
|
fn is_start_bare_char(c: char) -> bool {
|
||||||
match c {
|
match c {
|
||||||
_ if c.is_alphabetic() => true,
|
_ if c.is_alphabetic() => true,
|
||||||
|
_ if c.is_numeric() => true,
|
||||||
'.' => true,
|
'.' => true,
|
||||||
'\\' => true,
|
'\\' => true,
|
||||||
'/' => true,
|
'/' => true,
|
||||||
|
@ -598,12 +615,12 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_integer() {
|
fn test_integer() {
|
||||||
assert_leaf! {
|
assert_leaf! {
|
||||||
parsers [ integer ]
|
parsers [ size ]
|
||||||
"123" -> 0..3 { Integer(123) }
|
"123" -> 0..3 { Integer(123) }
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_leaf! {
|
assert_leaf! {
|
||||||
parsers [ integer ]
|
parsers [ size ]
|
||||||
"-123" -> 0..4 { Integer(-123) }
|
"-123" -> 0..4 { Integer(-123) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue