From ea0f4bf8ffade657b1d45152dbc183d4679e75c4 Mon Sep 17 00:00:00 2001 From: Elvis Claros Castro Date: Fri, 12 Jul 2024 11:18:14 -0300 Subject: Feat: PI --- lua/pi/telescope/my_actions.lua | 170 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 lua/pi/telescope/my_actions.lua (limited to 'lua/pi/telescope/my_actions.lua') 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 -- cgit v1.2.3