mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 00:54:56 +02:00
Parse integers as BigInt (#2642)
* Parse integer shape as BigInt * Use implicit serde from BigInt crate
This commit is contained in:
@ -735,7 +735,7 @@ fn parse_arg(
|
||||
|
||||
match expected_type {
|
||||
SyntaxShape::Number => {
|
||||
if let Ok(x) = lite_arg.item.parse::<i64>() {
|
||||
if let Ok(x) = lite_arg.item.parse::<BigInt>() {
|
||||
(
|
||||
SpannedExpression::new(Expression::integer(x), lite_arg.span),
|
||||
None,
|
||||
@ -757,7 +757,7 @@ fn parse_arg(
|
||||
}
|
||||
}
|
||||
SyntaxShape::Int => {
|
||||
if let Ok(x) = lite_arg.item.parse::<i64>() {
|
||||
if let Ok(x) = lite_arg.item.parse::<BigInt>() {
|
||||
(
|
||||
SpannedExpression::new(Expression::integer(x), lite_arg.span),
|
||||
None,
|
||||
@ -945,7 +945,7 @@ mod test {
|
||||
let registry = MockRegistry::new();
|
||||
let result = parse_arg(SyntaxShape::Int, ®istry, &input);
|
||||
assert_eq!(result.1, None);
|
||||
assert_eq!(result.0.expr, Expression::integer(32));
|
||||
assert_eq!(result.0.expr, Expression::integer(BigInt::from(32)));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -970,14 +970,24 @@ mod test {
|
||||
let registry = MockRegistry::new();
|
||||
let result = parse_arg(SyntaxShape::Number, ®istry, &input);
|
||||
assert_eq!(result.1, None);
|
||||
assert_eq!(result.0.expr, Expression::integer(-34));
|
||||
assert_eq!(result.0.expr, Expression::integer(BigInt::from(-34)));
|
||||
|
||||
let raw = "34".to_string();
|
||||
let input = raw.clone().spanned(Span::new(0, raw.len()));
|
||||
let registry = MockRegistry::new();
|
||||
let result = parse_arg(SyntaxShape::Number, ®istry, &input);
|
||||
assert_eq!(result.1, None);
|
||||
assert_eq!(result.0.expr, Expression::integer(34));
|
||||
assert_eq!(result.0.expr, Expression::integer(BigInt::from(34)));
|
||||
|
||||
let raw = "36893488147419103232".to_string();
|
||||
let input = raw.clone().spanned(Span::new(0, raw.len()));
|
||||
let registry = MockRegistry::new();
|
||||
let result = parse_arg(SyntaxShape::Number, ®istry, &input);
|
||||
assert_eq!(result.1, None);
|
||||
assert_eq!(
|
||||
result.0.expr,
|
||||
Expression::integer(BigInt::from(36893488147419103232 as u128))
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user