Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 47 additions & 3 deletions lua/inlay-hints/hints.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ local ih = require("inlay-hints")

local M = {}

local BUFFER_AUTOCMDS = {}

M.namespace = vim.api.nvim_create_namespace("textDocument/inlayHints")

local function clear_ns(bufnr)
Expand All @@ -25,10 +27,26 @@ function M.unset()
clear_ns(0)
end

local function detach_buf(bufnr)
BUFFER_AUTOCMDS[bufnr] = nil
ih.hint_cache:del(bufnr)
end

function M.on_attach(_, bufnr)
M.enable(bufnr)
end

-- Enable inlay-hints for bufnr
function M.enable(bufnr)
local opts = ih.config.options or {}

vim.api.nvim_create_autocmd({
if BUFFER_AUTOCMDS[bufnr] then
return -- Already enabled
end

BUFFER_AUTOCMDS[bufnr] = {}

local autocmd_id = vim.api.nvim_create_autocmd({
"BufWritePost",
"BufReadPost",
"BufEnter",
Expand All @@ -43,24 +61,50 @@ function M.on_attach(_, bufnr)
end,
})

table.insert(BUFFER_AUTOCMDS[bufnr], autocmd_id)

vim.api.nvim_buf_attach(bufnr, false, {
on_detach = function()
ih.hint_cache:del(bufnr)
detach_buf(bufnr)
end,
})

if opts.only_current_line then
vim.api.nvim_create_autocmd("CursorHold", {
autocmd_id = vim.api.nvim_create_autocmd("CursorHold", {
buffer = bufnr,
callback = function()
ih.render()
end,
})
table.insert(BUFFER_AUTOCMDS[bufnr], autocmd_id)
end

ih.cache()
end

-- Disable inlay-hints for bufnr
function M.disable(bufnr)
if BUFFER_AUTOCMDS[bufnr] == nil then
return -- Already disabled
end

for _, autocmd_id in ipairs(BUFFER_AUTOCMDS[bufnr]) do
vim.api.nvim_del_autocmd(autocmd_id)
end

detach_buf(bufnr)
clear_ns(bufnr)
end

-- Toggle inlay-hints for bufnr
function M.toggle(bufnr)
if BUFFER_AUTOCMDS[bufnr] then
M.disable(bufnr)
else
M.enable(bufnr)
end
end

-- Parses the result into a easily usable format
-- example:
-- {
Expand Down
10 changes: 10 additions & 0 deletions lua/inlay-hints/init.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
local Cache = require("inlay-hints.cache")
local BufUtils = require("inlay-hints.utils.buf")

local M = {
adapter = nil,
Expand Down Expand Up @@ -49,6 +50,15 @@ function M.setup(opts)
M.on_attach = function(client, bufnr)
inlay.on_attach(client, bufnr)
end
M.enable = function(bufnr)
inlay.enable(BufUtils.parse_buf(bufnr))
end
M.disable = function(bufnr)
inlay.disable(BufUtils.parse_buf(bufnr))
end
M.toggle = function(bufnr)
inlay.toggle(BufUtils.parse_buf(bufnr))
end
end

return M
14 changes: 14 additions & 0 deletions lua/inlay-hints/utils/buf.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
local M = {}

---Return current bufnr if given bufnr is 0 or nil otherwise given bufnr
---@param bufnr number
---@return number
function M.parse_buf(bufnr)
if bufnr == 0 or bufnr == nil then
return vim.api.nvim_get_current_buf()
end

return bufnr
end

return M