From 52168114594d791a3ae6092ab2489758da7b3ae8 Mon Sep 17 00:00:00 2001 From: Stephan Seitz Date: Sun, 16 Aug 2020 14:50:54 +0200 Subject: chore(textobjects): split up into submodules --- lua/nvim-treesitter/textobjects/attach.lua | 61 ++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 lua/nvim-treesitter/textobjects/attach.lua (limited to 'lua/nvim-treesitter/textobjects/attach.lua') diff --git a/lua/nvim-treesitter/textobjects/attach.lua b/lua/nvim-treesitter/textobjects/attach.lua new file mode 100644 index 00000000..22d6b650 --- /dev/null +++ b/lua/nvim-treesitter/textobjects/attach.lua @@ -0,0 +1,61 @@ +local configs = require'nvim-treesitter.configs' +local parsers = require'nvim-treesitter.parsers' +local queries = require'nvim-treesitter.query' +local api = vim.api +local M = {} + +function M.make_attach(normal_mode_functions, submodule) + return function(bufnr, lang) + local buf = bufnr or api.nvim_get_current_buf() + local config = configs.get_module("textobjects."..submodule) + local lang = lang or parsers.get_buf_lang(buf) + + for _, function_call in pairs(normal_mode_functions) do + for mapping, query in pairs(config[function_call] or {}) do + if type(query) == 'table' then + query = query[lang] + elseif not queries.get_query(lang, 'textobjects') then + query = nil + end + if query then + local cmd = ":lua require'nvim-treesitter.textobjects."..submodule.."'."..function_call.."('"..query.."')" + api.nvim_buf_set_keymap(buf, "n", mapping, cmd, {silent = true, noremap = true }) + end + end + end + end +end + +function M.make_detach(normal_mode_functions, submodule) + return function(bufnr) + local buf = bufnr or api.nvim_get_current_buf() + local config = configs.get_module("textobjects."..submodule) + local lang = parsers.get_buf_lang(bufnr) + + for mapping, query in pairs(config.keymaps) do + if type(query) == 'table' then + query = query[lang] + elseif not queries.get_query(lang, 'textobjects') then + query = nil + end + if query then + api.nvim_buf_del_keymap(buf, "o", mapping) + api.nvim_buf_del_keymap(buf, "v", mapping) + end + end + for _, function_call in pairs(normal_mode_functions) do + for mapping, query in pairs(config[function_call] or {}) do + if type(query) == 'table' then + query = query[lang] + elseif not queries.get_query(lang, 'textobjects') then + query = nil + end + if query then + api.nvim_buf_del_keymap(buf, "n", mapping) + end + end + end + end +end + +return M -- cgit v1.2.3