diff options
| author | Elvis Claros Castro <elvis@claros.ar> | 2024-07-12 11:18:14 -0300 |
|---|---|---|
| committer | Elvis Claros Castro <elvis@claros.ar> | 2024-07-12 11:18:14 -0300 |
| commit | ea0f4bf8ffade657b1d45152dbc183d4679e75c4 (patch) | |
| tree | cc1fb023bc308e019ddce33a4b0aed39f56805dc /lua/pi/telescope/my_actions.lua | |
| parent | 1fd0af14d592d612c2aaab7717c04c8806ba3daa (diff) | |
| download | nvim-conf-ea0f4bf8ffade657b1d45152dbc183d4679e75c4.tar.gz nvim-conf-ea0f4bf8ffade657b1d45152dbc183d4679e75c4.zip | |
Feat: PI
Diffstat (limited to 'lua/pi/telescope/my_actions.lua')
| -rw-r--r-- | lua/pi/telescope/my_actions.lua | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/lua/pi/telescope/my_actions.lua b/lua/pi/telescope/my_actions.lua new file mode 100644 index 0000000..2afb8aa --- /dev/null +++ b/lua/pi/telescope/my_actions.lua @@ -0,0 +1,170 @@ +local M = {} + +local action_state = require "telescope.actions.state" +local actions = require "telescope.actions" + +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/plugins/%s.lua", new_plugin)) +end + + +local get_disable_stm_node = function(bufnr, tree) + vim.treesitter.query.set( + "lua", + "pi_plugin_is_disabled", + [[ +(return_statement + (expression_list + (table_constructor + (field + name: (identifier) @enabled (#eq? @enabled "enabled") + value: (false) @is_false + ) + ) + ) + ) + ]] + ) + + local query = vim.treesitter.query.get("lua", "pi_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.query.set( + "lua", + "pi_plugin_has_enable_property", + [[ +(return_statement + (expression_list + (table_constructor + (field + name: (identifier) @enabled (#eq? @enabled "enabled") + ) + ) + ) + ) + ]] + ) + + local query = vim.treesitter.query.get("lua", "pi_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.query.set( + "lua", + "pi_plugin_return_table_constructor", + [[ +(return_statement + (expression_list + (table_constructor) @table_constructor + ) + ) + ]] + ) + + local query = vim.treesitter.query.get("lua", "pi_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) + local tree = parser:parse()[1] + + 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) + + local tree = parser:parse()[1] + + 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 + +M.create_scratch_file = function(prompt_bufnr) + local new_scratch = action_state.get_current_line() + actions.close(prompt_bufnr) + vim.cmd(string.format("edit ~/.config/nvim/lua/scratchs/%s.lua", new_scratch)) +end + +return M |