Skip to content

Commit e6b18f4

Browse files
committed
test: assert else block is not garbage
1 parent 32618ef commit e6b18f4

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

crates/nu-parser/src/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,7 +821,7 @@ fn parse_oneof(
821821
}
822822

823823
// if best_guess results in new errors further than current span, then accept it
824-
// or propagate_error is marked as true for `best_guess`
824+
// or propagate_error is marked as true for it
825825
if max_first_error_offset > spans[starting_spans_idx].start || propagate_error {
826826
working_set.parse_errors.extend(best_guess_errors);
827827
best_guess.expect("best_guess should not be None here!")

crates/nu-parser/tests/test_parser.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2426,7 +2426,7 @@ mod input_types {
24262426
add_declarations(&mut engine_state);
24272427

24282428
let mut working_set = StateWorkingSet::new(&engine_state);
2429-
parse(
2429+
let block = parse(
24302430
&mut working_set,
24312431
None,
24322432
b"if false { 'a' } else { $foo }",
@@ -2437,6 +2437,30 @@ mod input_types {
24372437
working_set.parse_errors.first(),
24382438
Some(ParseError::VariableNotFound(_, _))
24392439
));
2440+
2441+
let element = &block
2442+
.pipelines
2443+
.first()
2444+
.unwrap()
2445+
.elements
2446+
.first()
2447+
.unwrap()
2448+
.expr;
2449+
let Expr::Call(call) = &element.expr else {
2450+
eprintln!("{:?}", element.expr);
2451+
panic!("Expected Expr::Call");
2452+
};
2453+
let Expr::Keyword(else_kwd) = &call
2454+
.arguments
2455+
.get(2)
2456+
.expect("This call of `if` should have 3 arguments")
2457+
.expr()
2458+
.unwrap()
2459+
.expr
2460+
else {
2461+
panic!("Expected Expr::Keyword");
2462+
};
2463+
assert!(!matches!(else_kwd.expr.expr, Expr::Garbage))
24402464
}
24412465

24422466
#[test]
@@ -2597,7 +2621,7 @@ mod record {
25972621
let engine_state = EngineState::new();
25982622
let mut working_set = StateWorkingSet::new(&engine_state);
25992623
let block = parse(&mut working_set, None, expr, false);
2600-
assert!(working_set.parse_errors.first().is_none());
2624+
assert!(working_set.parse_errors.is_empty());
26012625
let pipeline_el_expr = &block
26022626
.pipelines
26032627
.first()

0 commit comments

Comments
 (0)