diff options
| author | Ariel D'Alessandro <dalessandro.ariel@gmail.com> | 2023-01-22 00:37:18 +0100 |
|---|---|---|
| committer | Ariel D'Alessandro <dalessandro.ariel@gmail.com> | 2023-01-22 00:37:18 +0100 |
| commit | bf157b642c2910abae1810c985817e42502000b5 (patch) | |
| tree | f51fdba02926914b8b5d57e0315978eae5e7fa77 /lua/alpha | |
| parent | e33750c6612e645ab3ca934cc936ccc02f0b4690 (diff) | |
| download | nvim-conf-bf157b642c2910abae1810c985817e42502000b5.tar.gz nvim-conf-bf157b642c2910abae1810c985817e42502000b5.zip | |
feat: add suport to enable and disable plugins from telescope actions
Diffstat (limited to 'lua/alpha')
| -rw-r--r-- | lua/alpha/plugins/notify.lua | 6 | ||||
| -rw-r--r-- | lua/alpha/telescope/actions.lua | 182 | ||||
| -rw-r--r-- | lua/alpha/telescope/init.lua | 9 | ||||
| -rw-r--r-- | lua/alpha/utils.lua | 5 |
4 files changed, 191 insertions, 11 deletions
diff --git a/lua/alpha/plugins/notify.lua b/lua/alpha/plugins/notify.lua index 38000b0..4b2a82c 100644 --- a/lua/alpha/plugins/notify.lua +++ b/lua/alpha/plugins/notify.lua @@ -1,4 +1,8 @@ return { "rcarriga/nvim-notify", - opts = { background_colour = "#000000" }, + config = function() + local notify = require("notify") + notify.setup({ background_colour = "#000000" }) + vim.notify = notify.notify + end } diff --git a/lua/alpha/telescope/actions.lua b/lua/alpha/telescope/actions.lua new file mode 100644 index 0000000..e877b34 --- /dev/null +++ b/lua/alpha/telescope/actions.lua @@ -0,0 +1,182 @@ +local M = {} + +local action_state = require("telescope.actions.state") +local actions = require("telescope.actions") +local get_node_text = vim.treesitter.get_node_text + +M.create_plugin = function(prompt_bufnr) + local new_plugin = action_state.get_current_line() + actions.close(prompt_bufnr) + vim.cmd(string.format("edit ~/.config/nvim/lua/alpha/plugins/%s.lua", new_plugin)) +end + +local get_disable_stm_node = function(bufnr, tree) + + vim.treesitter.set_query( + "lua", + "alpha_plugin_is_disabled", + [[ +(return_statement + (expression_list + (table_constructor + (field + name: (identifier) @enabled (#eq? @enabled "enabled") + value: (false) @is_false + ) + ) + ) + ) + ]] + ) + + local query = vim.treesitter.get_query("lua", "alpha_plugin_is_disabled") + + + for id, node in query:iter_captures(tree:root(), bufnr) do + if query.captures[id] == "enabled" then + + return node + end + end + + return nil +end + +local get_enabled_node = function(bufnr, tree) + vim.treesitter.set_query( + "lua", + "alpha_plugin_has_enable_property", + [[ +(return_statement + (expression_list + (table_constructor + (field + name: (identifier) @enabled (#eq? @enabled "enabled") + ) + ) + ) + ) + ]] + ) + + local query = vim.treesitter.get_query("lua", "alpha_plugin_has_enable_property") + + + for id, node in query:iter_captures(tree:root(), bufnr) do + if query.captures[id] == "enabled" then + + return node + end + end + + return nil +end + +local get_return_node = function(bufnr, tree) + vim.treesitter.set_query( + "lua", + "alpha_plugin_return_table_constructor", + [[ +(return_statement + (expression_list + (table_constructor) @table_constructor + ) + ) + ]] + ) + + local query = vim.treesitter.get_query("lua", "alpha_plugin_return_table_constructor") + + + for id, node in query:iter_captures(tree:root(), bufnr) do + if query.captures[id] == "table_constructor" then + + return node + end + end + + return nil +end + +M.disable_plugin = function(prompt_bufnr) + local entry = action_state.get_selected_entry() + local uri = vim.uri_from_fname(entry.cwd .. entry[1]) + local bufnr = vim.uri_to_bufnr(uri) + vim.fn.bufload(bufnr) + + local parsers = require("nvim-treesitter.parsers") + local parser = parsers.get_parser(bufnr) + if type(parser:parse()) == "table" then + vim.notify("Expected number but got table ???", vim.log.levels.ERROR, {}) + P(parser:parse()) + return + end + local tree = unpack(parser:parse()) + + local disabled_stm_node = get_disable_stm_node(bufnr, tree) + if disabled_stm_node ~= nil then + vim.notify("Plugin is already disable", vim.log.levels.WARN, {}) + return + end + + local start_line + local end_line + + local enable_node = get_enabled_node(bufnr, tree) + if enable_node == nil then + -- node does not exists need to assume line + local return_node = get_return_node(bufnr, tree) + + if return_node == nil then + vim.notify("Can determine how to diable the plugin", vim.log.levels.ERROR, {}) + return + end + + start_line = return_node:start() + 2 + end_line = start_line + else + start_line = enable_node:start() + end_line = start_line + 1 + end + + + vim.api.nvim_buf_set_lines(bufnr, start_line, end_line, false, { " enabled = false," }) + vim.notify("Plugin " .. entry[1] .. " Disabled", vim.log.levels.INFO, {}) + actions.close(prompt_bufnr) + vim.api.nvim_buf_call(bufnr, function() + vim.cmd("write") + end) +end + +M.enable_plugin = function (prompt_bufnr) + local entry = action_state.get_selected_entry() + local uri = vim.uri_from_fname(entry.cwd .. entry[1]) + local bufnr = vim.uri_to_bufnr(uri) + vim.fn.bufload(bufnr) + + local parsers = require("nvim-treesitter.parsers") + local parser = parsers.get_parser(bufnr) + + if type(parser:parse()) == "table" then + vim.notify("Expected number but got table ???", vim.log.levels.ERROR, {}) + P(parser:parse()) + return + end + local tree = unpack(parser:parse()) + + local disabled_stm_node = get_disable_stm_node(bufnr, tree) + if disabled_stm_node == nil then + vim.notify("Plugin is already Enable", vim.log.levels.WARN, {}) + return + end + + local enable_line = disabled_stm_node:start() + vim.api.nvim_buf_set_lines(bufnr, enable_line, enable_line + 1, false, {}) + vim.notify("Plugin " .. entry[1] .. " Enabled", vim.log.levels.INFO, {}) + actions.close(prompt_bufnr) + vim.api.nvim_buf_call(bufnr, function() + vim.cmd("write") + end) +end + +return M diff --git a/lua/alpha/telescope/init.lua b/lua/alpha/telescope/init.lua index 2b85cac..40f3b7b 100644 --- a/lua/alpha/telescope/init.lua +++ b/lua/alpha/telescope/init.lua @@ -11,6 +11,7 @@ end local action_state = require("telescope.actions.state") local fb_actions = require("telescope").extensions.file_browser.actions local actions = require("telescope.actions") +local my_actions = require("alpha.telescope.actions") local M = {} @@ -52,11 +53,9 @@ M.find_nvim_plugin = function() prompt_title = "< Plugins >", cwd = "$HOME/.config/nvim/lua/alpha/plugins/", attach_mappings = function(_, map) - map("i", "<C-t>", function(prompt_bufnr) - local new_plugin = action_state.get_current_line() - actions.close(prompt_bufnr) - vim.cmd(string.format("edit ~/.config/nvim/lua/alpha/plugins/%s.lua", new_plugin)) - end) + map("i", "<C-t>", my_actions.create_plugin) + map("i", "<C-d>", my_actions.disable_plugin) + map("i", "<C-e>", my_actions.enable_plugin) return true end, diff --git a/lua/alpha/utils.lua b/lua/alpha/utils.lua index cd7d2bb..b1911bc 100644 --- a/lua/alpha/utils.lua +++ b/lua/alpha/utils.lua @@ -1,9 +1,4 @@ local utils = {} --- TODO check to add to the notify configuration -local ok, notify = pcall(require, "notify") -if ok then - vim.notify = notify.notify -end utils.save_and_exec = function() local source_commands = { |