From 9182ebef86f1227dbf53451475d34351c4212083 Mon Sep 17 00:00:00 2001 From: Cameron Forbis Date: Thu, 17 Jun 2021 16:42:25 -0700 Subject: [PATCH 1/3] update set_included_ranges to modify extent if the current position is at the very beginning of the included range --- cli/src/tests/parser_test.rs | 42 ++++++++++++++++++++++++++++++++++++ lib/src/lexer.c | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/cli/src/tests/parser_test.rs b/cli/src/tests/parser_test.rs index d623126f..ef2a8a19 100644 --- a/cli/src/tests/parser_test.rs +++ b/cli/src/tests/parser_test.rs @@ -872,6 +872,48 @@ fn test_parsing_with_multiple_included_ranges() { ); } +#[test] +fn test_parsing_with_included_range_at_the_beginning_of_file() { + let source_code = "
test
{_ignore_this_part_}"; + + let mut parser = Parser::new(); + parser.set_language(get_language("html")).unwrap(); + + let end_byte = source_code.find("{_ignore_this_part_").unwrap(); + + let range_to_parse = Range { + start_byte: 0, + start_point: Point { + row: 10, + column: 12, + }, + end_byte, + end_point: Point { + row: 10, + column: 12 + end_byte, + }, + }; + + parser.set_included_ranges(&[range_to_parse]).unwrap(); + + let mut callback = |offset, _point| { + if offset == 0 { + source_code.as_bytes() + } else { + &[] + } + }; + + let html_tree = parser.parse_with(&mut callback, None).unwrap(); + + assert_eq!(html_tree.root_node().range(), range_to_parse,); + + assert_eq!( + html_tree.root_node().to_sexp(), + "(fragment (element (start_tag (tag_name)) (text) (end_tag (tag_name))))" + ); +} + #[test] fn test_parsing_error_in_invalid_included_ranges() { let mut parser = Parser::new(); diff --git a/lib/src/lexer.c b/lib/src/lexer.c index 5d1965ad..033f93e9 100644 --- a/lib/src/lexer.c +++ b/lib/src/lexer.c @@ -110,7 +110,7 @@ static void ts_lexer_goto(Lexer *self, Length position) { for (unsigned i = 0; i < self->included_range_count; i++) { TSRange *included_range = &self->included_ranges[i]; if (included_range->end_byte > position.bytes) { - if (included_range->start_byte > position.bytes) { + if (included_range->start_byte >= position.bytes) { self->current_position = (Length) { .bytes = included_range->start_byte, .extent = included_range->start_point, From ae5340901e0c86b2ff8b4f3f1507060e7d459631 Mon Sep 17 00:00:00 2001 From: Cameron Forbis Date: Tue, 29 Jun 2021 13:49:43 -0700 Subject: [PATCH 2/3] address code review comments --- cli/src/tests/parser_test.rs | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/cli/src/tests/parser_test.rs b/cli/src/tests/parser_test.rs index ef2a8a19..339d9d28 100644 --- a/cli/src/tests/parser_test.rs +++ b/cli/src/tests/parser_test.rs @@ -873,7 +873,7 @@ fn test_parsing_with_multiple_included_ranges() { } #[test] -fn test_parsing_with_included_range_at_the_beginning_of_file() { +fn test_parsing_with_included_range_containing_mismatched_positions() { let source_code = "
test
{_ignore_this_part_}"; let mut parser = Parser::new(); @@ -896,17 +896,10 @@ fn test_parsing_with_included_range_at_the_beginning_of_file() { parser.set_included_ranges(&[range_to_parse]).unwrap(); - let mut callback = |offset, _point| { - if offset == 0 { - source_code.as_bytes() - } else { - &[] - } - }; - let html_tree = parser.parse_with(&mut callback, None).unwrap(); + let html_tree = parser.parse(source_code, None).unwrap(); - assert_eq!(html_tree.root_node().range(), range_to_parse,); + assert_eq!(html_tree.root_node().range(), range_to_parse); assert_eq!( html_tree.root_node().to_sexp(), From 1ea797fbd29105016b77a8ce2afe08ca2400a094 Mon Sep 17 00:00:00 2001 From: Cameron Forbis Date: Tue, 29 Jun 2021 13:59:21 -0700 Subject: [PATCH 3/3] run fmt --- cli/src/tests/parser_test.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/cli/src/tests/parser_test.rs b/cli/src/tests/parser_test.rs index 339d9d28..58cd1880 100644 --- a/cli/src/tests/parser_test.rs +++ b/cli/src/tests/parser_test.rs @@ -896,7 +896,6 @@ fn test_parsing_with_included_range_containing_mismatched_positions() { parser.set_included_ranges(&[range_to_parse]).unwrap(); - let html_tree = parser.parse(source_code, None).unwrap(); assert_eq!(html_tree.root_node().range(), range_to_parse);