367 lines
8.9 KiB
Lua
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
|
|
}
|