From 87599366362b6960ed6fb02987c20260560f558e Mon Sep 17 00:00:00 2001 From: Wind Date: Fri, 17 Jan 2025 20:21:59 +0800 Subject: [PATCH] Fix variable names that end in a duration suffix can't be on the right part of a range (#14848) # Description Fixes: #14844 The issue occurs when nushell is parsing a value with `SyntaxShape::Any`, it checks `Duration` and `Filesize` first, then `Range`. Nushell raises errors too early while parsing `Duration/Filesize`. This pr changes the order of parsing to fix the issue. # User-Facing Changes The following code should be able to run after this pr ```nushell let runs = 10; 1..$runs ``` # Tests + Formatting Added 2 tests, one for filesize, one for duration. # After Submitting NaN --- crates/nu-parser/src/parser.rs | 2 +- tests/repl/test_parser.rs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/nu-parser/src/parser.rs b/crates/nu-parser/src/parser.rs index 6f4b1e1b81..4ef6b1f2b1 100644 --- a/crates/nu-parser/src/parser.rs +++ b/crates/nu-parser/src/parser.rs @@ -4950,9 +4950,9 @@ pub fn parse_value( } else { let shapes = [ SyntaxShape::Binary, + SyntaxShape::Range, SyntaxShape::Filesize, SyntaxShape::Duration, - SyntaxShape::Range, SyntaxShape::DateTime, SyntaxShape::Int, SyntaxShape::Number, diff --git a/tests/repl/test_parser.rs b/tests/repl/test_parser.rs index 988b34f18d..47529c69f0 100644 --- a/tests/repl/test_parser.rs +++ b/tests/repl/test_parser.rs @@ -94,6 +94,16 @@ fn range_iteration2() -> TestResult { run_test("4..1 | each { |y| $y + 100 } | get 3", "101") } +#[test] +fn range_ends_with_duration_suffix_variable_name() -> TestResult { + run_test("let runs = 10; 1..$runs | math sum", "55") +} + +#[test] +fn range_ends_with_filesize_suffix_variable_name() -> TestResult { + run_test("let sizekb = 10; 1..$sizekb | math sum", "55") +} + #[test] fn simple_value_iteration() -> TestResult { run_test("4 | each { |it| $it + 10 }", "14")