From c78361a6155dd53cd1098f7fdf33acfea20dc903 Mon Sep 17 00:00:00 2001 From: Marcelo Date: Mon, 3 Mar 2025 21:05:55 -0300 Subject: Initial commit. --- lua/config/plugins/treesitter.lua | 179 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 lua/config/plugins/treesitter.lua (limited to 'lua/config/plugins/treesitter.lua') diff --git a/lua/config/plugins/treesitter.lua b/lua/config/plugins/treesitter.lua new file mode 100644 index 0000000..654c688 --- /dev/null +++ b/lua/config/plugins/treesitter.lua @@ -0,0 +1,179 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + dependencies = { + "nvim-treesitter/nvim-treesitter-textobjects", + { + "nvim-treesitter/nvim-treesitter-context", + enabled = false, + config = function() + require("treesitter-context").setup({ + mode = "cursor", + max_lines = 5, + multiline_threshold = 5, + }) + end, + }, + }, + build = ":TSUpdate", + config = function() + require("nvim-treesitter.configs").setup({ + ensure_installed = { + "bash", + "c", + "css", + "diff", + "gitcommit", + "html", + "http", + "javascript", + "json", + "lua", + "make", + "markdown", + "markdown_inline", + "query", + "ruby", + "vim", + "vimdoc", + "xml", + "yaml", + }, + auto_install = false, + indent = { enable = true }, + + highlight = { + enable = true, + disable = function(_, buf) + local max_filesize = 100 * 1024 -- 100 KB + local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf)) + if ok and stats and stats.size > max_filesize then + return true + end + end, + additional_vim_regex_highlighting = false, + }, + + textobjects = { + select = { + enable = true, + lookahead = true, + keymaps = { + ["aa"] = "@parameter.outer", + ["ia"] = "@parameter.inner", + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + ["ai"] = "@conditional.outer", + ["ii"] = "@conditional.inner", + ["al"] = "@loop.outer", + ["il"] = "@loop.inner", + ["ab"] = "@block.outer", + ["ib"] = "@loop.inner", + ["at"] = "@comment.outer", + }, + }, + + move = { + enable = true, + set_jumps = true, + goto_next_start = { + ["]p"] = "@parameter.inner", + ["]m"] = "@function.outer", + ["]]"] = "@class.outer", + ["]l"] = "@loop.outer", + ["]i"] = "@conditional.outer", + ["]b"] = "@block.outer", + ["]t"] = "@comment.outer", + }, + goto_next_end = { + ["]P"] = "@parameter.inner", + ["]M"] = "@function.outer", + ["]["] = "@class.outer", + ["]L"] = "@loop.outer", + ["]B"] = "@block.outer", + }, + goto_previous_start = { + ["[p"] = "@parameter.inner", + ["[m"] = "@function.outer", + ["[["] = "@class.outer", + ["[l"] = "@loop.outer", + ["[i"] = "@conditional.outer", + ["[b"] = "@block.outer", + ["[t"] = "@comment.outer", + }, + goto_previous_end = { + ["[P"] = "@parameter.inner", + ["[M"] = "@function.outer", + ["[]"] = "@class.outer", + ["[L"] = "@loop.outer", + ["[B"] = "@block.outer", + }, + }, + + swap = { + enable = true, + swap_next = { + ["a"] = "@parameter.inner", + }, + swap_previous = { + ["A"] = "@parameter.inner", + }, + }, + + lsp_interop = { + enable = true, + border = "single", + floating_preview_opts = {}, + peek_definition_code = { + ["df"] = "@function.outer", + ["dF"] = "@class.outer", + }, + }, + }, + }) + + -- Crystal parser + local parsers = require("nvim-treesitter.parsers") + local parser_config = parsers.get_parser_configs() + parser_config.crystal = { + install_info = { + url = "~/Downloads/src/tree-sitter-crystal", + files = { "src/parser.c", "src/scanner.c" }, + branch = "main", + }, + filetype = "cr", + } + + parser_config.haml = { + install_info = { + url = "https://github.com/vitallium/tree-sitter-haml", + files = { "src/parser.c", "src/scanner.c" }, + branch = "main", + }, + filetype = "haml", + } + + -- Code folding + vim.opt.foldlevel = 99 + vim.opt.foldlevelstart = 1 + vim.opt.foldnestmax = 4 + vim.opt.foldcolumn = "1" + vim.opt.foldenable = false + vim.api.nvim_create_autocmd("FileType", { + callback = function() + if parsers.has_parser() then + vim.opt.foldmethod = "expr" + vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()" + vim.opt.foldtext = "" + else + vim.opt.foldmethod = "indent" + vim.opt.foldtext = "" + end + end, + desc = "Set foldmethod", + }) + end, + }, +} -- cgit v1.2.3