From dd250b05d41e16f4e2a8d27270b035125dc27dc5 Mon Sep 17 00:00:00 2001 From: Christian Clason Date: Sun, 1 May 2022 15:46:01 +0200 Subject: [PATCH] feat!: update to Neovim 0.7 APIs (#75) --- lua/nvim-treesitter-playground.lua | 7 - lua/nvim-treesitter-playground/hl-info.lua | 23 ++-- lua/nvim-treesitter-playground/internal.lua | 120 +++++++++--------- .../query_linter.lua | 25 ++-- plugin/nvim-treesitter-playground.lua | 28 ++++ plugin/nvim-treesitter-playground.vim | 9 -- 6 files changed, 110 insertions(+), 102 deletions(-) create mode 100644 plugin/nvim-treesitter-playground.lua delete mode 100644 plugin/nvim-treesitter-playground.vim diff --git a/lua/nvim-treesitter-playground.lua b/lua/nvim-treesitter-playground.lua index 9c2f39f..d4b3d3e 100644 --- a/lua/nvim-treesitter-playground.lua +++ b/lua/nvim-treesitter-playground.lua @@ -29,13 +29,6 @@ function M.init() end, }, } - - vim.cmd [[ - command! TSHighlightCapturesUnderCursor :lua require'nvim-treesitter-playground.hl-info'.show_hl_captures() - ]] - vim.cmd [[ - command! TSNodeUnderCursor :lua require'nvim-treesitter-playground.hl-info'.show_ts_node() - ]] end return M diff --git a/lua/nvim-treesitter-playground/hl-info.lua b/lua/nvim-treesitter-playground/hl-info.lua index 96a9f86..d604eaa 100644 --- a/lua/nvim-treesitter-playground/hl-info.lua +++ b/lua/nvim-treesitter-playground/hl-info.lua @@ -158,21 +158,18 @@ function M.show_ts_node(opts) lines[#lines + 1] = "* Node not found" end - local ns = vim.api.nvim_create_namespace "nvim-treesitter-current-node" - if opts.highlight_node and node_under_cursor then + local ns = vim.api.nvim_create_namespace "nvim-treesitter-current-node" + ts_utils.highlight_node(node_under_cursor, bufnr, ns, opts.hl_group) - vim.cmd(string.format( - [[ - augroup TreesitterNodeUnderCursor - au! - autocmd CursorMoved lua require'nvim-treesitter-playground.internal'.clear_highlights(%d, %d) - augroup END - ]], - bufnr, - bufnr, - ns - )) + vim.api.nvim_create_autocmd("CursorMoved", { + group = vim.api.nvim_create_augroup("TSNodeUnderCursor", {}), + buffer = bufnr, + callback = function() + require("nvim-treesitter-playground.internal").clear_highlights(bufnr, ns) + end, + desc = "TSPlayground: clear highlights", + }) end return vim.lsp.util.open_floating_preview(lines, "markdown", { border = "single", pad_left = 4, pad_right = 4 }) diff --git a/lua/nvim-treesitter-playground/internal.lua b/lua/nvim-treesitter-playground/internal.lua index f663f09..ad1124c 100644 --- a/lua/nvim-treesitter-playground/internal.lua +++ b/lua/nvim-treesitter-playground/internal.lua @@ -42,6 +42,8 @@ local query_buf_var_name = "TSPlaygroundForBuf" local playground_ns = api.nvim_create_namespace "nvim-treesitter-playground" local query_hl_ns = api.nvim_create_namespace "nvim-treesitter-playground-query" +local augroup = vim.api.nvim_create_augroup("TSPlayground", {}) + local function get_node_at_cursor(options) options = options or {} @@ -179,30 +181,31 @@ local function setup_buf(for_buf) api.nvim_buf_set_option(buf, "filetype", "tsplayground") api.nvim_buf_set_var(buf, query_buf_var_name, for_buf) - vim.cmd(string.format("augroup TreesitterPlayground_%d", buf)) - vim.cmd "au!" - vim.cmd( - string.format( - [[autocmd CursorMoved lua require'nvim-treesitter-playground.internal'.highlight_node(%d)]], - buf, - for_buf - ) - ) - vim.cmd( - string.format( - [[autocmd BufLeave lua require'nvim-treesitter-playground.internal'.clear_highlights(%d)]], - buf, - for_buf - ) - ) - vim.cmd( - string.format( - [[autocmd BufWinEnter lua require'nvim-treesitter-playground.internal'.update(%d)]], - buf, - for_buf - ) - ) - vim.cmd "augroup END" + vim.api.nvim_clear_autocmds { group = augroup, buffer = buf } + vim.api.nvim_create_autocmd("CursorMoved", { + group = augroup, + buffer = buf, + callback = function() + require("nvim-treesitter-playground.internal").highlight_node(for_buf) + end, + desc = "TSPlayground: highlight node", + }) + vim.api.nvim_create_autocmd("BufLeave", { + group = augroup, + buffer = buf, + callback = function() + require("nvim-treesitter-playground.internal").clear_highlights(for_buf) + end, + desc = "TSPlayground: clear highlights", + }) + vim.api.nvim_create_autocmd("BufWinEnter", { + group = augroup, + buffer = buf, + callback = function() + require("nvim-treesitter-playground.internal").update(for_buf) + end, + desc = "TSPlayground: update", + }) local config = configs.get_module "playground" @@ -256,21 +259,24 @@ local function setup_query_editor(bufnr) api.nvim_buf_set_option(buf, "filetype", "query") api.nvim_buf_set_var(buf, query_buf_var_name, bufnr) - vim.cmd( - string.format( - [[autocmd CursorMoved lua require'nvim-treesitter-playground.internal'.on_query_cursor_move(%d)]], - buf, - bufnr - ) - ) - - api.nvim_buf_set_keymap( - buf, - "n", - "R", - string.format(':lua require "nvim-treesitter-playground.internal".update_query(%d, %d)', bufnr, buf), - { silent = true } - ) + vim.api.nvim_create_autocmd("CursorMoved", { + group = augroup, + buffer = buf, + callback = function() + require("nvim-treesitter-playground.internal").on_query_cursor_move(bufnr) + end, + desc = "TSPlayground: on query cursor move", + }) + + api.nvim_buf_set_keymap(buf, "n", "R", { + silent = true, + noremap = true, + callback = function() + require("nvim-treesitter-playground.internal").update_query(bufnr, buf) + end, + desc = "TSPlayground: update query", + }) + api.nvim_buf_attach(buf, false, { on_lines = utils.debounce(function() M.update_query(bufnr, buf) @@ -743,28 +749,28 @@ function M.attach(bufnr) end, get_update_time)), }) - vim.cmd(string.format("augroup TreesitterPlayground_%d", bufnr)) - vim.cmd "au!" - vim.cmd(string.format( - -- luacheck: no max line length - [[autocmd CursorMoved lua require'nvim-treesitter-playground.internal'._highlight_playground_node_debounced(%d)]], - bufnr, - bufnr - )) - vim.cmd( - string.format( - [[autocmd BufLeave lua require'nvim-treesitter-playground.internal'.clear_playground_highlights(%d)]], - bufnr, - bufnr - ) - ) - vim.cmd "augroup END" + vim.api.nvim_clear_autocmds { group = augroup, buffer = bufnr } + vim.api.nvim_create_autocmd("CursorMoved", { + group = augroup, + buffer = bufnr, + callback = function() + require("nvim-treesitter-playground.internal")._highlight_playground_node_debounced(bufnr) + end, + desc = "TSPlayground: highlight playground node debounce", + }) + vim.api.nvim_create_autocmd("BufLeave", { + group = augroup, + buffer = bufnr, + callback = function() + require("nvim-treesitter-playground.internal").clear_playground_highlights(bufnr) + end, + desc = "TSPlayground: clear playground highlights", + }) end function M.detach(bufnr) clear_entry(bufnr) - vim.cmd(string.format("autocmd! TreesitterPlayground_%d CursorMoved", bufnr)) - vim.cmd(string.format("autocmd! TreesitterPlayground_%d BufLeave", bufnr)) + vim.api.nvim_clear_autocmds { group = augroup, buffer = bufnr, event = { "CursorMoved", "BufLeave" } } end return M diff --git a/lua/nvim-treesitter-playground/query_linter.lua b/lua/nvim-treesitter-playground/query_linter.lua index 5f990a2..cf63ea5 100644 --- a/lua/nvim-treesitter-playground/query_linter.lua +++ b/lua/nvim-treesitter-playground/query_linter.lua @@ -139,27 +139,20 @@ function M.attach(buf, _) M.use_virtual_text = config.use_virtual_text M.lint_events = config.lint_events - vim.cmd(string.format("augroup TreesitterPlaygroundLint_%d", buf)) - vim.cmd "au!" - for _, e in pairs(M.lint_events) do - vim.cmd( - string.format( - [[autocmd! %s lua require'nvim-treesitter-playground.query_linter'.lint(%d)]], - e, - buf, - buf - ) - ) - end - vim.cmd "augroup END" + vim.api.nvim_create_autocmd(M.lint_events, { + group = vim.api.nvim_create_augroup("TSPlaygroundLint", {}), + buffer = buf, + callback = function() + require("nvim-treesitter-playground.query_linter").lint(buf) + end, + desc = "TSPlayground: lint query", + }) end function M.detach(buf) M.lints[buf] = nil M.clear_virtual_text(buf) - for _, e in pairs(M.lint_events) do - vim.cmd(string.format("autocmd! TreesitterPlaygroundLint_%d %s", buf, e)) - end + vim.api.nvim_clear_autocmds { group = "TSPlaygroundLint", buffer = buf, event = M.lint_events } end return M diff --git a/plugin/nvim-treesitter-playground.lua b/plugin/nvim-treesitter-playground.lua new file mode 100644 index 0000000..8f98962 --- /dev/null +++ b/plugin/nvim-treesitter-playground.lua @@ -0,0 +1,28 @@ +-- setup playground module +require("nvim-treesitter-playground").init() +local api = vim.api + +-- define highlights +local highlights = { + TSPlaygroundFocus = { link = "Visual", default = true }, + TSQueryLinterError = { link = "Error", default = true }, + TSPlaygroundLang = { link = "String", default = true }, +} +for k, v in pairs(highlights) do + api.nvim_set_hl(0, k, v) +end + +-- define commands +api.nvim_create_user_command("TSPlaygroundToggle", function() + require("nvim-treesitter-playground.internal").toggle() +end, {}) +api.nvim_create_user_command("TSNodeUnderCursor", function() + require("nvim-treesitter-playground.hl-info").show_ts_node() +end, {}) +api.nvim_create_user_command("TSCaptureUnderCursor", function() + require("nvim-treesitter-playground.hl-info").show_hl_captures() +end, {}) +---@deprecated +api.nvim_create_user_command("TSHighlightCapturesUnderCursor", function() + require("nvim-treesitter-playground.hl-info").show_hl_captures() +end, {}) diff --git a/plugin/nvim-treesitter-playground.vim b/plugin/nvim-treesitter-playground.vim deleted file mode 100644 index dec3ee4..0000000 --- a/plugin/nvim-treesitter-playground.vim +++ /dev/null @@ -1,9 +0,0 @@ -lua << EOF -require "nvim-treesitter-playground".init() -EOF - -highlight default link TSPlaygroundFocus Visual -highlight default link TSQueryLinterError Error -highlight default link TSPlaygroundLang String - -command! TSPlaygroundToggle lua require "nvim-treesitter-playground.internal".toggle()