aboutsummaryrefslogtreecommitdiffstats
path: root/lua/alpha
diff options
context:
space:
mode:
authorAriel D'Alessandro <dalessandro.ariel@gmail.com>2023-01-22 00:37:18 +0100
committerAriel D'Alessandro <dalessandro.ariel@gmail.com>2023-01-22 00:37:18 +0100
commitbf157b642c2910abae1810c985817e42502000b5 (patch)
treef51fdba02926914b8b5d57e0315978eae5e7fa77 /lua/alpha
parente33750c6612e645ab3ca934cc936ccc02f0b4690 (diff)
downloadnvim-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.lua6
-rw-r--r--lua/alpha/telescope/actions.lua182
-rw-r--r--lua/alpha/telescope/init.lua9
-rw-r--r--lua/alpha/utils.lua5
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 = {