diff --git a/cli/src/query_testing.rs b/cli/src/query_testing.rs index 6dc35c8d..9950f12f 100644 --- a/cli/src/query_testing.rs +++ b/cli/src/query_testing.rs @@ -48,40 +48,38 @@ pub fn parse_position_comments( if node.kind().contains("comment") { if let Ok(text) = node.utf8_text(source) { let mut position = node.start_position(); - if position.row == 0 { - continue; - } - - // Find the arrow character ("^" or '<-") in the comment. A left arrow - // refers to the column where the comment node starts. An up arrow refers - // to its own column. - let mut has_left_caret = false; - let mut has_arrow = false; - let mut arrow_end = 0; - for (i, c) in text.char_indices() { - arrow_end = i + 1; - if c == '-' && has_left_caret { - has_arrow = true; - break; + if position.row > 0 { + // Find the arrow character ("^" or '<-") in the comment. A left arrow + // refers to the column where the comment node starts. An up arrow refers + // to its own column. + let mut has_left_caret = false; + let mut has_arrow = false; + let mut arrow_end = 0; + for (i, c) in text.char_indices() { + arrow_end = i + 1; + if c == '-' && has_left_caret { + has_arrow = true; + break; + } + if c == '^' { + has_arrow = true; + position.column += i; + break; + } + has_left_caret = c == '<'; } - if c == '^' { - has_arrow = true; - position.column += i; - break; - } - has_left_caret = c == '<'; - } - // If the comment node contains an arrow and a highlight name, record the - // highlight name and the position. - if let (true, Some(mat)) = - (has_arrow, CAPTURE_NAME_REGEX.find(&text[arrow_end..])) - { - assertion_ranges.push((node.start_position(), node.end_position())); - result.push(Assertion { - position: position, - expected_capture_name: mat.as_str().to_string(), - }); + // If the comment node contains an arrow and a highlight name, record the + // highlight name and the position. + if let (true, Some(mat)) = + (has_arrow, CAPTURE_NAME_REGEX.find(&text[arrow_end..])) + { + assertion_ranges.push((node.start_position(), node.end_position())); + result.push(Assertion { + position: position, + expected_capture_name: mat.as_str().to_string(), + }); + } } } } diff --git a/cli/src/tests/test_highlight_test.rs b/cli/src/tests/test_highlight_test.rs index 1a658281..af2c15c5 100644 --- a/cli/src/tests/test_highlight_test.rs +++ b/cli/src/tests/test_highlight_test.rs @@ -17,6 +17,7 @@ fn test_highlight_test_with_basic_test() { ], ); let source = [ + "// hi", "var abc = function(d) {", " // ^ function", " // ^ keyword", @@ -32,15 +33,15 @@ fn test_highlight_test_with_basic_test() { assertions, &[ Assertion { - position: Point::new(0, 5), + position: Point::new(1, 5), expected_capture_name: "function".to_string() }, Assertion { - position: Point::new(0, 11), + position: Point::new(1, 11), expected_capture_name: "keyword".to_string() }, Assertion { - position: Point::new(3, 9), + position: Point::new(4, 9), expected_capture_name: "variable.parameter".to_string() }, ] @@ -53,12 +54,12 @@ fn test_highlight_test_with_basic_test() { assert_eq!( highlight_positions, &[ - (Point::new(0, 0), Point::new(0, 3), Highlight(2)), // "var" - (Point::new(0, 4), Point::new(0, 7), Highlight(0)), // "abc" - (Point::new(0, 10), Point::new(0, 18), Highlight(2)), // "function" - (Point::new(0, 19), Point::new(0, 20), Highlight(1)), // "d" - (Point::new(3, 2), Point::new(3, 8), Highlight(2)), // "return" - (Point::new(3, 9), Point::new(3, 10), Highlight(1)), // "d" + (Point::new(1, 0), Point::new(1, 3), Highlight(2)), // "var" + (Point::new(1, 4), Point::new(1, 7), Highlight(0)), // "abc" + (Point::new(1, 10), Point::new(1, 18), Highlight(2)), // "function" + (Point::new(1, 19), Point::new(1, 20), Highlight(1)), // "d" + (Point::new(4, 2), Point::new(4, 8), Highlight(2)), // "return" + (Point::new(4, 9), Point::new(4, 10), Highlight(1)), // "d" ] ); }