aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-03-25 15:19:22 +0100
committerLuuk van Baal <luukvbaal@gmail.com>2023-04-02 19:14:23 +0200
commita93024555720325ecede9d2d15e4bd0f1fd82739 (patch)
treeda1cd96b0cbb0c69e6ca00117e8ba76164f2ad87
parent3a4db8154ff043f044ab18d5fced42bffb1002fd (diff)
downloadrneovim-a93024555720325ecede9d2d15e4bd0f1fd82739.tar.gz
rneovim-a93024555720325ecede9d2d15e4bd0f1fd82739.tar.bz2
rneovim-a93024555720325ecede9d2d15e4bd0f1fd82739.zip
refactor(lua): get all marks instead of iterating over namespaces
Inspector now also includes highlights set in anonymous namespaces. Close #22732
-rw-r--r--runtime/lua/vim/_inspector.lua22
-rw-r--r--test/functional/lua/inspector_spec.lua41
2 files changed, 51 insertions, 12 deletions
diff --git a/runtime/lua/vim/_inspector.lua b/runtime/lua/vim/_inspector.lua
index 92d380b08c..05983d3f0d 100644
--- a/runtime/lua/vim/_inspector.lua
+++ b/runtime/lua/vim/_inspector.lua
@@ -81,6 +81,12 @@ function vim.inspect_pos(bufnr, row, col, filter)
end
end
+ -- namespace id -> name map
+ local nsmap = {}
+ for name, id in pairs(vim.api.nvim_get_namespaces()) do
+ nsmap[id] = name
+ end
+
--- Convert an extmark tuple into a map-like table
--- @private
local function to_map(extmark)
@@ -90,6 +96,8 @@ function vim.inspect_pos(bufnr, row, col, filter)
col = extmark[3],
opts = resolve_hl(extmark[4]),
}
+ extmark.ns_id = extmark.opts.ns_id
+ extmark.ns = nsmap[extmark.ns_id] or ''
extmark.end_row = extmark.opts.end_row or extmark.row -- inclusive
extmark.end_col = extmark.opts.end_col or (extmark.col + 1) -- exclusive
return extmark
@@ -104,17 +112,9 @@ function vim.inspect_pos(bufnr, row, col, filter)
end
-- all extmarks at this position
- local extmarks = {}
- for ns, nsid in pairs(vim.api.nvim_get_namespaces()) do
- local ns_marks = vim.api.nvim_buf_get_extmarks(bufnr, nsid, 0, -1, { details = true })
- ns_marks = vim.tbl_map(to_map, ns_marks)
- ns_marks = vim.tbl_filter(is_here, ns_marks)
- for _, mark in ipairs(ns_marks) do
- mark.ns_id = nsid
- mark.ns = ns
- end
- vim.list_extend(extmarks, ns_marks)
- end
+ local extmarks = vim.api.nvim_buf_get_extmarks(bufnr, -1, 0, -1, { details = true })
+ extmarks = vim.tbl_map(to_map, extmarks)
+ extmarks = vim.tbl_filter(is_here, extmarks)
if filter.semantic_tokens then
results.semantic_tokens = vim.tbl_filter(function(extmark)
diff --git a/test/functional/lua/inspector_spec.lua b/test/functional/lua/inspector_spec.lua
index 5e488bb082..edc0519471 100644
--- a/test/functional/lua/inspector_spec.lua
+++ b/test/functional/lua/inspector_spec.lua
@@ -12,9 +12,13 @@ describe('vim.inspect_pos', function()
it('it returns items', function()
local ret = exec_lua([[
local buf = vim.api.nvim_create_buf(true, false)
+ local ns1 = vim.api.nvim_create_namespace("ns1")
+ local ns2 = vim.api.nvim_create_namespace("")
vim.api.nvim_set_current_buf(buf)
vim.api.nvim_buf_set_lines(0, 0, -1, false, {"local a = 123"})
vim.api.nvim_buf_set_option(buf, "filetype", "lua")
+ vim.api.nvim_buf_set_extmark(buf, ns1, 0, 10, { hl_group = "Normal" })
+ vim.api.nvim_buf_set_extmark(buf, ns2, 0, 10, { hl_group = "Normal" })
vim.cmd("syntax on")
return {buf, vim.inspect_pos(0, 0, 10)}
]])
@@ -24,7 +28,42 @@ describe('vim.inspect_pos', function()
buffer = buf,
col = 10,
row = 0,
- extmarks = {},
+ extmarks = {
+ {
+ col = 10,
+ end_col = 11,
+ end_row = 0,
+ id = 1,
+ ns = 'ns1',
+ ns_id = 1,
+ opts = {
+ hl_eol = false,
+ hl_group = 'Normal',
+ hl_group_link = 'Normal',
+ ns_id = 1,
+ priority = 4096,
+ right_gravity = true
+ },
+ row = 0
+ },
+ {
+ col = 10,
+ end_col = 11,
+ end_row = 0,
+ id = 1,
+ ns = '',
+ ns_id = 2,
+ opts = {
+ hl_eol = false,
+ hl_group = 'Normal',
+ hl_group_link = 'Normal',
+ ns_id = 2,
+ priority = 4096,
+ right_gravity = true
+ },
+ row = 0
+ }
+ },
treesitter = {},
semantic_tokens = {},
syntax = {