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 }