104 lines
2.2 KiB
Lua
104 lines
2.2 KiB
Lua
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>
|
|
-- blocks without an explicit lang attribute, which leaves raw_text as @none.
|
|
vim.treesitter.query.set("svelte", "injections", [=[
|
|
; inherits: html_tags
|
|
|
|
((style_element
|
|
(start_tag
|
|
(attribute
|
|
(attribute_name) @_attr
|
|
(quoted_attribute_value
|
|
(attribute_value) @_lang)))
|
|
(raw_text) @injection.content)
|
|
(#eq? @_attr "lang")
|
|
(#any-of? @_lang "scss" "postcss" "less")
|
|
(#set! injection.language "scss"))
|
|
|
|
; fallback for plain <script>...</script>
|
|
((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,
|
|
}
|