2021-07-13 03:11:43 +02:00
|
|
|
local M = {}
|
2021-10-10 21:07:41 +02:00
|
|
|
local Log = require "lvim.core.log"
|
2021-08-22 20:03:19 +02:00
|
|
|
|
2022-11-16 11:13:41 +01:00
|
|
|
function M.config()
|
2021-07-25 03:17:11 +02:00
|
|
|
lvim.builtin.treesitter = {
|
2021-08-22 20:03:19 +02:00
|
|
|
on_config_done = nil,
|
2022-11-16 11:13:41 +01:00
|
|
|
|
|
|
|
-- A list of parser names, or "all"
|
|
|
|
ensure_installed = {},
|
|
|
|
|
|
|
|
-- List of parsers to ignore installing (for "all")
|
2021-07-13 03:11:43 +02:00
|
|
|
ignore_install = {},
|
2022-11-16 11:13:41 +01:00
|
|
|
|
|
|
|
-- A directory to install the parsers into.
|
|
|
|
-- By default parsers are installed to either the package dir, or the "site" dir.
|
|
|
|
-- If a custom path is used (not nil) it must be added to the runtimepath.
|
|
|
|
parser_install_dir = nil,
|
|
|
|
|
|
|
|
-- Install parsers synchronously (only applied to `ensure_installed`)
|
|
|
|
sync_install = false,
|
|
|
|
|
|
|
|
-- Automatically install missing parsers when entering buffer
|
2023-01-10 16:32:41 +01:00
|
|
|
auto_install = true,
|
2022-11-16 11:13:41 +01:00
|
|
|
|
2021-07-13 03:11:43 +02:00
|
|
|
matchup = {
|
|
|
|
enable = false, -- mandatory, false will disable the whole extension
|
|
|
|
-- disable = { "c", "ruby" }, -- optional, list of language that will be disabled
|
|
|
|
},
|
|
|
|
highlight = {
|
|
|
|
enable = true, -- false will disable the whole extension
|
2022-05-11 17:15:00 +02:00
|
|
|
additional_vim_regex_highlighting = false,
|
2022-11-01 10:37:50 +01:00
|
|
|
disable = function(lang, buf)
|
|
|
|
if vim.tbl_contains({ "latex" }, lang) then
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2022-11-28 19:11:06 +01:00
|
|
|
local status_ok, big_file_detected = pcall(vim.api.nvim_buf_get_var, buf, "bigfile_disable_treesitter")
|
|
|
|
return status_ok and big_file_detected
|
2022-11-01 10:37:50 +01:00
|
|
|
end,
|
2021-07-13 03:11:43 +02:00
|
|
|
},
|
|
|
|
context_commentstring = {
|
2021-11-05 23:15:10 +01:00
|
|
|
enable = true,
|
2022-05-11 17:15:00 +02:00
|
|
|
enable_autocmd = false,
|
2021-11-05 23:15:10 +01:00
|
|
|
config = {
|
|
|
|
-- Languages that have a single comment style
|
|
|
|
typescript = "// %s",
|
|
|
|
css = "/* %s */",
|
|
|
|
scss = "/* %s */",
|
|
|
|
html = "<!-- %s -->",
|
|
|
|
svelte = "<!-- %s -->",
|
|
|
|
vue = "<!-- %s -->",
|
|
|
|
json = "",
|
|
|
|
},
|
2021-07-13 03:11:43 +02:00
|
|
|
},
|
2023-01-09 21:34:48 +01:00
|
|
|
indent = { enable = true, disable = { "yaml", "python", "c", "cpp" } },
|
2021-07-13 03:11:43 +02:00
|
|
|
autotag = { enable = false },
|
|
|
|
textobjects = {
|
|
|
|
swap = {
|
|
|
|
enable = false,
|
|
|
|
-- swap_next = textobj_swap_keymaps,
|
|
|
|
},
|
|
|
|
-- move = textobj_move_keymaps,
|
|
|
|
select = {
|
|
|
|
enable = false,
|
|
|
|
-- keymaps = textobj_sel_keymaps,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
textsubjects = {
|
|
|
|
enable = false,
|
|
|
|
keymaps = { ["."] = "textsubjects-smart", [";"] = "textsubjects-big" },
|
|
|
|
},
|
|
|
|
playground = {
|
|
|
|
enable = false,
|
|
|
|
disable = {},
|
|
|
|
updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code
|
|
|
|
persist_queries = false, -- Whether the query persists across vim sessions
|
|
|
|
keybindings = {
|
|
|
|
toggle_query_editor = "o",
|
|
|
|
toggle_hl_groups = "i",
|
|
|
|
toggle_injected_languages = "t",
|
|
|
|
toggle_anonymous_nodes = "a",
|
|
|
|
toggle_language_display = "I",
|
|
|
|
focus_language = "f",
|
|
|
|
unfocus_language = "F",
|
|
|
|
update = "R",
|
|
|
|
goto_node = "<cr>",
|
|
|
|
show_help = "?",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
rainbow = {
|
|
|
|
enable = false,
|
|
|
|
extended_mode = true, -- Highlight also non-parentheses delimiters, boolean or table: lang -> boolean
|
|
|
|
max_file_lines = 1000, -- Do not enable for files with more than 1000 lines, int
|
|
|
|
},
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2022-11-16 11:13:41 +01:00
|
|
|
function M.setup()
|
2021-12-28 09:48:42 +01:00
|
|
|
-- avoid running in headless mode since it's harder to detect failures
|
|
|
|
if #vim.api.nvim_list_uis() == 0 then
|
|
|
|
Log:debug "headless mode detected, skipping running setup for treesitter"
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2021-07-13 03:11:43 +02:00
|
|
|
local status_ok, treesitter_configs = pcall(require, "nvim-treesitter.configs")
|
|
|
|
if not status_ok then
|
2021-12-28 09:48:42 +01:00
|
|
|
Log:error "Failed to load nvim-treesitter.configs"
|
2021-07-13 03:11:43 +02:00
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2021-11-03 12:30:34 +01:00
|
|
|
local opts = vim.deepcopy(lvim.builtin.treesitter)
|
|
|
|
|
|
|
|
treesitter_configs.setup(opts)
|
2021-08-22 20:03:19 +02:00
|
|
|
|
|
|
|
if lvim.builtin.treesitter.on_config_done then
|
|
|
|
lvim.builtin.treesitter.on_config_done(treesitter_configs)
|
|
|
|
end
|
2021-07-13 03:11:43 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
return M
|