Files
yadm/.config/nvim/lua/plugins/treesitter.lua
2026-03-04 10:32:14 +01:00

367 lines
8.9 KiB
Lua

return {
'nvim-treesitter/nvim-treesitter',
-- dependencies = {
-- 'mizlan/iswap.nvim',
-- 'romgrk/nvim-treesitter-context',
-- --"nvim-treesitter/nvim-treesitter-textobjects",
-- --"nvim-treesitter/playground",
-- },
-- build = ':TSUpdate',
-- opts = function()
-- -- Tree-sitter configuration
--
-- local ts = require'nvim-treesitter'
--
-- ts.setup {
-- ignore_install = {'javascript'},
-- sync_install = true,
-- auto_install = true,
-- ensure_installed = {},
-- modules = {},
-- highlight = {
-- enable = true,
-- -- disable = function(lang, 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,
-- },
-- indent = {
-- enable = true,
-- },
-- incremental_selection = {
-- enable = false,
-- keymaps = {
-- init_selection = "ti",
-- node_incremental = "ti",
-- scope_incremental = "ts",
-- node_decremental = "td",
-- },
-- },
-- matchup = {
-- enable = true,
-- -- disable = { "c", "ruby" },
-- },
-- }
-- vim.opt.foldmethod = "manual"
-- vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
-- vim.opt.foldlevelstart = 99
-- vim.opt.foldminlines = 50
-- end
dependencies = {
<<<<<<< HEAD
'mizlan/iswap.nvim',
'romgrk/nvim-treesitter-context',
--"nvim-treesitter/nvim-treesitter-textobjects",
--"nvim-treesitter/playground",
},
build = ':TSUpdate',
opts = function()
-- Tree-sitter configuration
local ts = require'nvim-treesitter.configs'
ts.setup {
ignore_install = {'javascript'},
sync_install = true,
auto_install = true,
ensure_installed = {
"arduino",
"awk",
"bash",
"bibtex",
"bitbake",
"c",
"cmake",
--"comment",
"cpp",
"csv",
"devicetree",
"diff",
"fish",
"gitattributes",
"gitcommit",
"gitignore",
"git_config",
"git_rebase",
"html",
"vimdoc",
"http",
"ini",
"jq",
"json",
--"latex",
"lua",
"make",
"markdown",
"markdown_inline",
"matlab",
"ninja",
"proto",
"python",
"regex",
"rust",
"toml",
"vim",
"yaml",
},
modules = {},
highlight = {
enable = true,
-- disable = function(lang, 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,
},
indent = {
enable = false,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "ti",
node_incremental = "ti",
scope_incremental = "ts",
node_decremental = "td",
},
},
matchup = {
enable = true,
-- disable = { "c", "ruby" },
||||||| parent of e4b1315 (Nvim: sync with coder setup)
'mizlan/iswap.nvim',
'romgrk/nvim-treesitter-context',
--"nvim-treesitter/nvim-treesitter-textobjects",
--"nvim-treesitter/playground",
},
build = ':TSUpdate',
opts = function()
-- Tree-sitter configuration
local ts = require'nvim-treesitter.configs'
ts.setup {
ignore_install = {'javascript'},
sync_install = true,
auto_install = true,
ensure_installed = {
"arduino",
"awk",
"bash",
"bibtex",
"bitbake",
"c",
"cmake",
--"comment",
"cpp",
"csv",
"devicetree",
"diff",
"fish",
"gitattributes",
"gitcommit",
"gitignore",
"git_config",
"git_rebase",
"html",
"vimdoc",
"http",
"ini",
"jq",
"json",
"latex",
"lua",
"make",
"markdown",
"markdown_inline",
"matlab",
"ninja",
"proto",
"python",
"regex",
"rust",
"toml",
"vim",
"yaml",
},
modules = {},
highlight = {
enable = true,
-- disable = function(lang, 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,
},
indent = {
enable = false,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "ti",
node_incremental = "ti",
scope_incremental = "ts",
node_decremental = "td",
},
},
matchup = {
enable = true,
-- disable = { "c", "ruby" },
=======
{
'nvim-treesitter/nvim-treesitter-context',
opts = {
max_lines = 4,
multiline_threshold = 2,
>>>>>>> e4b1315 (Nvim: sync with coder setup)
},
},
{
'mizlan/iswap.nvim',
enabled = false,
}
},
lazy = false,
branch = 'main',
--build = ':TSUpdate',
config = function()
local ts = require('nvim-treesitter')
-- State tracking for async parser loading
local parsers_loaded = {}
local parsers_pending = {}
local parsers_failed = {}
local ns = vim.api.nvim_create_namespace('treesitter.async')
-- Helper to start highlighting and indentation
local function start(buf, lang)
local ok = pcall(vim.treesitter.start, buf, lang)
if ok then
-- vim.bo[buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
end
return ok
end
-- Install core parsers after lazy.nvim finishes loading all plugins
vim.api.nvim_create_autocmd('User', {
pattern = 'LazyDone',
once = true,
callback = function()
ts.install({
"arduino",
"awk",
"bash",
"bibtex",
"bitbake",
"c",
"cmake",
--"comment",
"cpp",
"csv",
"devicetree",
"diff",
"fish",
"gitattributes",
"gitcommit",
"gitignore",
"git_config",
"git_rebase",
"html",
"vimdoc",
"http",
"ini",
"jq",
"json",
--"latex",
"lua",
"make",
"markdown",
"markdown_inline",
"matlab",
"ninja",
"proto",
"python",
"regex",
"rust",
"toml",
"vim",
"yaml",
}, {
max_jobs = 8,
})
end,
})
-- Decoration provider for async parser loading
vim.api.nvim_set_decoration_provider(ns, {
on_start = vim.schedule_wrap(function()
if #parsers_pending == 0 then
return false
end
for _, data in ipairs(parsers_pending) do
if vim.api.nvim_buf_is_valid(data.buf) then
if start(data.buf, data.lang) then
parsers_loaded[data.lang] = true
else
parsers_failed[data.lang] = true
end
end
end
parsers_pending = {}
end),
})
local group = vim.api.nvim_create_augroup('TreesitterSetup', { clear = true })
local ignore_filetypes = {
'checkhealth',
'lazy',
'mason',
'snacks_dashboard',
'snacks_notif',
'snacks_win',
}
-- Auto-install parsers and enable highlighting on FileType
vim.api.nvim_create_autocmd('FileType', {
group = group,
desc = 'Enable treesitter highlighting and indentation (non-blocking)',
callback = function(event)
if vim.tbl_contains(ignore_filetypes, event.match) then
return
end
local lang = vim.treesitter.language.get_lang(event.match) or event.match
local buf = event.buf
if parsers_failed[lang] then
return
end
if parsers_loaded[lang] then
-- Parser already loaded, start immediately (fast path)
start(buf, lang)
else
-- Queue for async loading
table.insert(parsers_pending, { buf = buf, lang = lang })
end
-- Auto-install missing parsers (async, no-op if already installed)
ts.install({ lang })
end,
})
end
}