diff --git a/lua/conf/plugins/treesitter.lua b/lua/conf/plugins/treesitter.lua index fbe620c..17588f6 100644 --- a/lua/conf/plugins/treesitter.lua +++ b/lua/conf/plugins/treesitter.lua @@ -1,58 +1,59 @@ -local map = core.misc.map +local map, auto = core.misc.map, core.misc.auto + +local function highlight(buf) + local lang = vim.bo[buf].ft + if table.contains({ "diff", "tex" }, lang) then + return false + end + + -- disable in big files + local ok, stats = pcall(vim.uv.fs_stat, + vim.api.nvim_buf_get_name(buf)) + if ok and stats and stats.size > (1024 * 100 * 10) --[[1MB]] then + return false + end + + return true +end + +local function indent(buf) + local lang = vim.bo[buf].ft + -- disable indenting in php (it's more broken with than without) + return not table.contains({ "php" }, lang) +end return { { "nvim-treesitter/nvim-treesitter", + branch = "main", config = function() vim.cmd("TSUpdate") end, load = function() - require("nvim-treesitter.configs").setup { - -- good default parsers - ensure_installed = { "c", "lua", "vim", "vimdoc", "markdown", - "markdown_inline", "java", "bash", "css", "html", "luadoc", - "make", "zig" - }, + local treesitter = require("nvim-treesitter") + treesitter.setup {} + treesitter.install({ + "c", "lua", "vim", "vimdoc", "markdown", + "markdown_inline", "java", "bash", "css", "html", "luadoc", + "make", "zig" + }, { + force = false, + summary = false, + }) - -- indentation - indent = { - enable = true, - - disable = function(lang, _) - -- disable indenting in php (it's more broken with than without) - return table.contains(({ - "php" - }), lang) + auto("FileType", { + callback = function(ev) + if highlight(ev.buf) then + pcall(vim.treesitter.start) + vim.bo[ev.buf].syntax = "ON" end - }, - - -- enable highlighting - highlight = { - enable = true, - -- use vim highlighting in addition to treesitter - additional_vim_regex_highlighting = true, - - disable = function(lang, buf) - -- disable in some files where vim's builtin highlighting is better - if table.contains(({ - "diff", "tex" - }), lang) then - return true - end - - -- disable in big files - local ok, stats = pcall(vim.uv.fs_stat, - vim.api.nvim_buf_get_name(buf)) - if ok and stats and stats.size > (1024 * 100 * 10) --[[1MB]] then - return true - end + if indent(ev.buf) then + vim.bo[ev.buf].indentexpr = "v:lua.require('nvim-treesitter').indentexpr()" end - } - } + end, + }) core.misc.map("n", "t", function() - pcall(vim.cmd.TSInstall, vim.api.nvim_get_option_value("ft", { - buf = vim.api.nvim_get_current_buf() - })) + treesitter.install { vim.bo[0].ft } end) end },