aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-08-31 14:11:15 +0100
committerLewis Russell <me@lewisr.dev>2023-08-31 15:12:17 +0100
commitdd0e77d48a843fc9730fe4ef7567330daf8dfb81 (patch)
tree2384878b06c27f01f5499dbcbbeb5f1c99247a7b
parent845d5b8b64190e0e09a6a6dd97bdbc0e6f96eb02 (diff)
downloadrneovim-dd0e77d48a843fc9730fe4ef7567330daf8dfb81.tar.gz
rneovim-dd0e77d48a843fc9730fe4ef7567330daf8dfb81.tar.bz2
rneovim-dd0e77d48a843fc9730fe4ef7567330daf8dfb81.zip
fix(query_error): multiline bug
-rw-r--r--src/nvim/lua/treesitter.c18
-rw-r--r--test/functional/treesitter/parser_spec.lua8
2 files changed, 10 insertions, 16 deletions
diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c
index 48057b0c65..45fe7f6129 100644
--- a/src/nvim/lua/treesitter.c
+++ b/src/nvim/lua/treesitter.c
@@ -1582,25 +1582,19 @@ static void query_err_string(const char *src, int error_offset, TSQueryError err
int error_line_len = 0;
const char *end_str;
- const char *src_tmp = src;
- while ((end_str = strchr(src_tmp, '\n')) != NULL) {
- int line_length = (int)(end_str - src_tmp) + 1;
+ do {
+ const char *src_tmp = src + line_start;
+ end_str = strchr(src_tmp, '\n');
+ int line_length = end_str != NULL ? (int)(end_str - src_tmp) : (int)strlen(src_tmp);
int line_end = line_start + line_length;
if (line_end > error_offset) {
error_line = src_tmp;
error_line_len = line_length;
break;
}
- line_start = line_end;
+ line_start = line_end + 1;
row++;
- src_tmp += line_length;
- }
-
- // Additional check for the last line
- if (line_start <= error_offset) {
- error_line = src_tmp;
- error_line_len = (int)strlen(src_tmp);
- }
+ } while (end_str != NULL);
int column = error_offset - line_start;
diff --git a/test/functional/treesitter/parser_spec.lua b/test/functional/treesitter/parser_spec.lua
index 37dde37a64..8222bb59c4 100644
--- a/test/functional/treesitter/parser_spec.lua
+++ b/test/functional/treesitter/parser_spec.lua
@@ -1090,9 +1090,9 @@ int x = INT_MAX;
-- Invalid capture name
test(
- '.../query.lua:0: Query error at 1:30. Invalid capture name "ok.capture":\n'..
- '((identifier) @id (#eq? @id @ok.capture))\n'..
- ' ^',
- '((identifier) @id (#eq? @id @ok.capture))')
+ '.../query.lua:0: Query error at 3:2. Invalid capture name "ok.capture":\n'..
+ '@ok.capture\n'..
+ ' ^',
+ '((identifier) @id \n(#eq? @id\n@ok.capture\n))')
end)
end)