return { -- Highlight, edit, and navigate code "nvim-treesitter/nvim-treesitter", lazy = false, build = ":TSUpdate", config = function() local ts = require("nvim-treesitter") ts.setup({ install_dir = vim.fn.stdpath("data") .. "/site", }) -- Install parsers (async, no-op if already installed) ts.install({ "vimdoc", "javascript", "typescript", "tsx", "c", "lua", "rust", "jsdoc", "bash", "svelte", "astro", "vue", "css", "scss", "gdscript", "nix", }) vim.api.nvim_create_autocmd("FileType", { pattern = { "svelte", "javascript", "typescript", "tsx", "html", "css", "lua", "nix", }, callback = function() pcall(vim.treesitter.start) end, }) -- Workaround: some svelte parser/query combos don't inject JS for ((script_element (raw_text) @injection.content) (#set! injection.language "javascript")) ((script_element (start_tag (attribute (attribute_name) @_attr (quoted_attribute_value (attribute_value) @_lang))) (raw_text) @injection.content) (#eq? @_attr "lang") (#any-of? @_lang "ts" "typescript") (#set! injection.language "typescript")) ((script_element (start_tag (attribute (attribute_name) @_attr (quoted_attribute_value (attribute_value) @_lang))) (raw_text) @injection.content) (#eq? @_attr "lang") (#any-of? @_lang "js" "javascript") (#set! injection.language "javascript")) ((element (start_tag (attribute (attribute_name) @_attr (quoted_attribute_value (attribute_value) @injection.language))) (text) @injection.content) (#eq? @_attr "lang") (#eq? @injection.language "pug")) ]=]) end, }