aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/semantic_tokens.lua
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2024-11-11 14:23:38 +0000
committerGitHub <noreply@github.com>2024-11-11 14:23:38 +0000
commit3e855d533f4477ffddfe94ccea48255979c8b7fb (patch)
treef3f29ad97d1a15c9b379a1dce629267b9f1256e8 /runtime/lua/vim/lsp/semantic_tokens.lua
parentff575b38864022b0b27527f11636c49107acd1bc (diff)
downloadrneovim-3e855d533f4477ffddfe94ccea48255979c8b7fb.tar.gz
rneovim-3e855d533f4477ffddfe94ccea48255979c8b7fb.tar.bz2
rneovim-3e855d533f4477ffddfe94ccea48255979c8b7fb.zip
perf(lsp): use faster version of str_byteindex
Diffstat (limited to 'runtime/lua/vim/lsp/semantic_tokens.lua')
-rw-r--r--runtime/lua/vim/lsp/semantic_tokens.lua14
1 files changed, 7 insertions, 7 deletions
diff --git a/runtime/lua/vim/lsp/semantic_tokens.lua b/runtime/lua/vim/lsp/semantic_tokens.lua
index f23c694c4b..215e5f41aa 100644
--- a/runtime/lua/vim/lsp/semantic_tokens.lua
+++ b/runtime/lua/vim/lsp/semantic_tokens.lua
@@ -99,11 +99,12 @@ local function tokens_to_ranges(data, bufnr, client, request)
local legend = client.server_capabilities.semanticTokensProvider.legend
local token_types = legend.tokenTypes
local token_modifiers = legend.tokenModifiers
+ local encoding = client.offset_encoding
local lines = api.nvim_buf_get_lines(bufnr, 0, -1, false)
local ranges = {} ---@type STTokenRange[]
local start = uv.hrtime()
- local ms_to_ns = 1000 * 1000
+ local ms_to_ns = 1e6
local yield_interval_ns = 5 * ms_to_ns
local co, is_main = coroutine.running()
@@ -135,14 +136,13 @@ local function tokens_to_ranges(data, bufnr, client, request)
-- data[i+3] +1 because Lua tables are 1-indexed
local token_type = token_types[data[i + 3] + 1]
- local modifiers = modifiers_from_number(data[i + 4], token_modifiers)
-
- local end_char = start_char + data[i + 2]
- local buf_line = lines and lines[line + 1] or ''
- local start_col = vim.str_byteindex(buf_line, client.offset_encoding, start_char, false)
- local end_col = vim.str_byteindex(buf_line, client.offset_encoding, end_char, false)
if token_type then
+ local modifiers = modifiers_from_number(data[i + 4], token_modifiers)
+ local end_char = start_char + data[i + 2]
+ local buf_line = lines and lines[line + 1] or ''
+ local start_col = vim.str_byteindex(buf_line, encoding, start_char, false)
+ local end_col = vim.str_byteindex(buf_line, encoding, end_char, false)
ranges[#ranges + 1] = {
line = line,
start_col = start_col,