diff options
author | Lewis Russell <lewis6991@gmail.com> | 2023-08-31 14:11:15 +0100 |
---|---|---|
committer | Lewis Russell <me@lewisr.dev> | 2023-08-31 15:12:17 +0100 |
commit | dd0e77d48a843fc9730fe4ef7567330daf8dfb81 (patch) | |
tree | 2384878b06c27f01f5499dbcbbeb5f1c99247a7b | |
parent | 845d5b8b64190e0e09a6a6dd97bdbc0e6f96eb02 (diff) | |
download | rneovim-dd0e77d48a843fc9730fe4ef7567330daf8dfb81.tar.gz rneovim-dd0e77d48a843fc9730fe4ef7567330daf8dfb81.tar.bz2 rneovim-dd0e77d48a843fc9730fe4ef7567330daf8dfb81.zip |
fix(query_error): multiline bug
-rw-r--r-- | src/nvim/lua/treesitter.c | 18 | ||||
-rw-r--r-- | test/functional/treesitter/parser_spec.lua | 8 |
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) |