Read more on each call to treesit's buffer reader
authorYuan Fu <casouri@gmail.com>
Mon, 9 Sep 2024 00:46:18 +0000 (17:46 -0700)
committerYuan Fu <casouri@gmail.com>
Mon, 9 Sep 2024 03:52:20 +0000 (20:52 -0700)
* src/treesit.c (treesit_read_buffer): Read until the gap or visible
end, instead of reading a single char.

src/treesit.c

index 970754f3c1bbdfded87186086d9ade6d21d93756..b047f0344ccfe400478791bac9e9311331d33b77 100644 (file)
@@ -1225,11 +1225,13 @@ treesit_read_buffer (void *parser, uint32_t byte_index,
       beg = NULL;
       len = 0;
     }
-  /* Normal case, read a character.  */
+  /* Normal case, read until the gap or visible end.  */
   else
     {
       beg = (char *) BUF_BYTE_ADDRESS (buffer, byte_pos);
-      len = BYTES_BY_CHAR_HEAD ((int) *beg);
+      ptrdiff_t gap_bytepos = buffer->text->gpt_byte;
+      len = (byte_pos < gap_bytepos)
+           ? gap_bytepos - byte_pos : visible_end - byte_pos;
     }
   /* We never let tree-sitter to parse buffers that large so this
      assertion should never hit.  */