aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/lsp/semantic_tokens.lua26
-rw-r--r--test/functional/plugin/lsp/semantic_tokens_spec.lua23
2 files changed, 13 insertions, 36 deletions
diff --git a/runtime/lua/vim/lsp/semantic_tokens.lua b/runtime/lua/vim/lsp/semantic_tokens.lua
index 11e62ee793..f06d136801 100644
--- a/runtime/lua/vim/lsp/semantic_tokens.lua
+++ b/runtime/lua/vim/lsp/semantic_tokens.lua
@@ -55,22 +55,22 @@ end
---@private
---@return string[]
local function modifiers_from_number(x, modifiers_table)
- ---@private
- local function _get_bit(n, k)
- --TODO(jdrouhard): remove once `bit` module is available for non-LuaJIT
+ local modifiers = {}
+ local idx = 1
+ while x > 0 do
if _G.bit then
- return _G.bit.band(_G.bit.rshift(n, k), 1)
+ if _G.bit.band(x, 1) == 1 then
+ modifiers[#modifiers + 1] = modifiers_table[idx]
+ end
+ x = _G.bit.rshift(x, 1)
else
- return math.floor((n / math.pow(2, k)) % 2)
- end
- end
-
- local modifiers = {}
- for i = 0, #modifiers_table - 1 do
- local b = _get_bit(x, i)
- if b == 1 then
- modifiers[#modifiers + 1] = modifiers_table[i + 1]
+ --TODO(jdrouhard): remove this branch once `bit` module is available for non-LuaJIT (#21222)
+ if x % 2 == 1 then
+ modifiers[#modifiers + 1] = modifiers_table[idx]
+ end
+ x = math.floor(x / 2)
end
+ idx = idx + 1
end
return modifiers
diff --git a/test/functional/plugin/lsp/semantic_tokens_spec.lua b/test/functional/plugin/lsp/semantic_tokens_spec.lua
index 7a5494e9a5..e87e2a3334 100644
--- a/test/functional/plugin/lsp/semantic_tokens_spec.lua
+++ b/test/functional/plugin/lsp/semantic_tokens_spec.lua
@@ -459,29 +459,6 @@ describe('semantic token highlighting', function()
{1:~ }|
|
]] }
-
- exec_lua([[
- vim.lsp.semantic_tokens.start(bufnr, client_id)
- ]])
-
- screen:expect { grid = [[
- #include <iostream> |
- |
- int main() |
- { |
- int x; |
- #ifdef __cplusplus |
- std::cout << x << "\n"; |
- #else |
- printf("%d\n", x); |
- #endif |
- } |
- ^} |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- |
- ]], unchanged = true }
end)
it('does not send delta requests if not supported by server', function()