mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 06:28:35 +00:00
treesitter: use new on_bytes interface
This will significantly reduce the parsing work needed e.g. when rehighlighting after every keypress in insert mode. Also add safety check for tree-sitter trying to read past the end of a line. This can happen after we sent an incorrect buffer update.
This commit is contained in:
@@ -286,22 +286,21 @@ static const char *input_cb(void *payload, uint32_t byte_index,
|
||||
}
|
||||
char_u *line = ml_get_buf(bp, position.row+1, false);
|
||||
size_t len = STRLEN(line);
|
||||
|
||||
if (position.column > len) {
|
||||
*bytes_read = 0;
|
||||
} else {
|
||||
size_t tocopy = MIN(len-position.column, BUFSIZE);
|
||||
return "";
|
||||
}
|
||||
size_t tocopy = MIN(len-position.column, BUFSIZE);
|
||||
|
||||
memcpy(buf, line+position.column, tocopy);
|
||||
// Translate embedded \n to NUL
|
||||
memchrsub(buf, '\n', '\0', tocopy);
|
||||
*bytes_read = (uint32_t)tocopy;
|
||||
if (tocopy < BUFSIZE) {
|
||||
// now add the final \n. If it didn't fit, input_cb will be called again
|
||||
// on the same line with advanced column.
|
||||
buf[tocopy] = '\n';
|
||||
(*bytes_read)++;
|
||||
}
|
||||
memcpy(buf, line+position.column, tocopy);
|
||||
// Translate embedded \n to NUL
|
||||
memchrsub(buf, '\n', '\0', tocopy);
|
||||
*bytes_read = (uint32_t)tocopy;
|
||||
if (tocopy < BUFSIZE) {
|
||||
// now add the final \n. If it didn't fit, input_cb will be called again
|
||||
// on the same line with advanced column.
|
||||
buf[tocopy] = '\n';
|
||||
(*bytes_read)++;
|
||||
}
|
||||
return buf;
|
||||
#undef BUFSIZE
|
||||
|
Reference in New Issue
Block a user