From d92a7a969099a0a2db61a0ba5e6275e71e09c637 Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Tue, 27 Feb 2024 16:48:33 -0500 Subject: [PATCH] test: add test case for parse stack merging with incorrect error cost bug --- cli/src/tests/parser_test.rs | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/cli/src/tests/parser_test.rs b/cli/src/tests/parser_test.rs index ecd54fcf..cb95b0e2 100644 --- a/cli/src/tests/parser_test.rs +++ b/cli/src/tests/parser_test.rs @@ -1,7 +1,6 @@ use super::helpers::{ allocations, - edits::invert_edit, - edits::ReadRecorder, + edits::{invert_edit, ReadRecorder}, fixtures::{get_language, get_test_language}, }; use crate::{ @@ -1381,6 +1380,39 @@ fn test_grammars_that_can_hang_on_eof() { parser.parse("\"", None).unwrap(); } +#[test] +fn test_parse_stack_recursive_merge_error_cost_calculation_bug() { + let source_code = r#" +fn main() { + if n == 1 { + } else if n == 2 { + } else { + } +} + +let y = if x == 5 { 10 } else { 15 }; + +if foo && bar {} + +if foo && bar || baz {} +"#; + + let mut parser = Parser::new(); + parser.set_language(&get_language("rust")).unwrap(); + + let mut tree = parser.parse(source_code, None).unwrap(); + + let edit = Edit { + position: 60, + deleted_length: 63, + inserted_text: Vec::new(), + }; + let mut input = source_code.as_bytes().to_vec(); + perform_edit(&mut tree, &mut input, &edit).unwrap(); + + parser.parse(&input, Some(&tree)).unwrap(); +} + const fn simple_range(start: usize, end: usize) -> Range { Range { start_byte: start,