lib.nvim · Foundation · vimdoc
:help lib.nvim-treesitter
Filetype allowlist gate + parser install policy
doc/lib.nvim-treesitter.txt — rendered from the plugin's own vimdoc
*lib.nvim-treesitter.txt* Filetype allowlist gate + parser install policy lib.nvim.treesitter *lib.nvim-treesitter* Two independent submodules for treesitter-dependent features: -guardfiletype allowlist gate (highlighting, foldexpr, indentexpr) — see |lib.nvim-treesitter-guard| -parser_policyprompt-or-auto-install policy for missing-but-available parsers — see |lib.nvim-treesitter-parser_policy|
CONTENTS
1. Guard ................................. |lib.nvim-treesitter-guard| Usage .............................. |lib.nvim-treesitter-guard-usage| Functions .......................... |lib.nvim-treesitter-guard-functions| is_enabled ....................... |lib.nvim-treesitter-is_enabled| 2. Parser Policy .......................... |lib.nvim-treesitter-parser_policy| Usage .............................. |lib.nvim-treesitter-parser_policy-usage| Modes .............................. |lib.nvim-treesitter-parser_policy-modes| Functions .......................... |lib.nvim-treesitter-parser_policy-functions| setup ............................ |lib.nvim-treesitter-parser_policy-setup| get_mode ......................... |lib.nvim-treesitter-parser_policy-get_mode| set_mode ......................... |lib.nvim-treesitter-parser_policy-set_mode| declined ......................... |lib.nvim-treesitter-parser_policy-declined| reset_declined ................... |lib.nvim-treesitter-parser_policy-reset_declined| ensure ........................... |lib.nvim-treesitter-parser_policy-ensure|
1. GUARD
Filetype allowlist gate for treesitter-dependent features (highlighting, foldexpr, indentexpr). Not a parser-availability probe — a curated allowlist of filetypes considered safe/desired for treesitter activation, kept centrally so multiple activation hooks share one list.
USAGE
local guard = require("lib.nvim.treesitter.guard")
vim.api.nvim_create_autocmd("FileType", {
callback = function(args)
if guard.is_enabled(args.buf) then
vim.treesitter.start(args.buf)
end
end,
})
FUNCTIONS
is_enabled({bufnr}, {whitelist}) *lib.nvim-treesitter-is_enabled*
Whether treesitter should be enabled for bufnr. whitelist defaults to
guard.DEFAULT_WHITELIST (table<string, boolean>, keyed by filetype).
guard.is_enabled(bufnr)
guard.is_enabled(bufnr, { lua = true, python = true })
2. PARSER POLICY
Prompt-or-auto-install policy for missing-but-available treesitter parsers. The modernnvim-treesitter(mainbranch) never auto-installs anything — without a mechanism like this, a missing parser degrades silently to no highlighting at all, with no error anywhere (this is how---@moduleLuaCATS annotations went unhighlighted for a while: theluadocinjection parser was simply never installed). This module never calls|vim.treesitter.start()|itself. Callers passopts.on_installedtoensure()and decide what "the parser just became available" means for their buffer(s).
USAGE
local policy = require("lib.nvim.treesitter.parser_policy")
policy.setup({ mode = "prompt" })
vim.api.nvim_create_autocmd("FileType", {
callback = function(args)
local lang = vim.treesitter.language.get_lang(vim.bo[args.buf].filetype)
policy.ensure(lang, {
on_installed = function()
pcall(vim.treesitter.start, args.buf)
end,
})
end,
})
MODES
"off" Do nothing.
"prompt" (default) Ask once per language via a themed select prompt
(|lib.nvim-kit|): Yes / No / Never for this language.
"auto" Install immediately, no prompt — just a short notify.
A "Never for <lang>" answer is remembered via lib.nvim.cache (disk
backend) and survives restarts, so the same language never re-prompts.
"No" is not remembered — it asks again next time.
FUNCTIONS
setup({opts}) *lib.nvim-treesitter-parser_policy-setup*
opts.mode sets the initial mode (default "prompt").
get_mode()
Returns the current mode ("off"|"prompt"|"auto").
set_mode({mode})
Switch mode at runtime. Returns ok, err?.
declined()
Sorted string[] of languages the user said "never" to.
reset_declined()
Clears the declined list, in memory and on disk.
ensure({lang}, {opts})
Runs the policy forlang. No-op iflangis empty, already installed, not a known installable parser, mid-install/mid-prompt already, or (in"prompt"mode) declined.opts.on_installed(lang)fires once, only on a real successful install.