docs(treesitter): improve 'no parser' error message for InspectTree

Improve error messages for `:InspectTree`, when no parsers are available
for the current buffer and filetype. We can show more informative and
helpful error message for users (e.g., which lang was searched for):

```
 ... No parser available for the given buffer:
+... no parser for 'custom_ft' language, see :help treesitter-parsers
```

Also improve the relevant docs for *treesitter-parsers*.
This commit is contained in:
Jongwook Choi 2024-01-06 07:18:13 -05:00 committed by Lewis Russell
parent 367e52cc79
commit fbe40caa7c
3 changed files with 22 additions and 6 deletions

View File

@ -20,15 +20,23 @@ PARSER FILES *treesitter-parsers*
Parsers are the heart of tree-sitter. They are libraries that tree-sitter will Parsers are the heart of tree-sitter. They are libraries that tree-sitter will
search for in the `parser` runtime directory. By default, Nvim bundles parsers search for in the `parser` runtime directory. By default, Nvim bundles parsers
for C, Lua, Vimscript, Vimdoc and Treesitter query files, but parsers can be for C, Lua, Vimscript, Vimdoc and Treesitter query files, but parsers can be
installed manually or via a plugin like installed via a plugin like https://github.com/nvim-treesitter/nvim-treesitter
https://github.com/nvim-treesitter/nvim-treesitter. Parsers are searched for or even manually.
as `parser/{lang}.*` in any 'runtimepath' directory. If multiple parsers for
the same language are found, the first one is used. (This typically implies Parsers are searched for as `parser/{lang}.*` in any 'runtimepath' directory.
the priority "user config > plugins > bundled". If multiple parsers for the same language are found, the first one is used.
(NOTE: This typically implies the priority "user config > plugins > bundled".)
A parser can also be loaded manually using a full path: >lua A parser can also be loaded manually using a full path: >lua
vim.treesitter.language.add('python', { path = "/path/to/python.so" }) vim.treesitter.language.add('python', { path = "/path/to/python.so" })
< <
To associate certain |filetypes| with a treesitter language (name of parser),
use |vim.treesitter.language.register()|. For example, to use the `xml`
treesitter parser for buffers with filetype `svg` or `xslt`, use: >lua
vim.treesitter.language.register('xml', { 'svg', 'xslt' })
<
============================================================================== ==============================================================================
TREESITTER TREES *treesitter-tree* TREESITTER TREES *treesitter-tree*
*TSTree* *TSTree*
@ -833,6 +841,9 @@ inspect({lang}) *vim.treesitter.language.inspect()*
register({lang}, {filetype}) *vim.treesitter.language.register()* register({lang}, {filetype}) *vim.treesitter.language.register()*
Register a parser named {lang} to be used for {filetype}(s). Register a parser named {lang} to be used for {filetype}(s).
Note: this adds or overrides the mapping for {filetype}, any existing
mappings from other filetypes to {lang} will be preserved.
Parameters: ~ Parameters: ~
• {lang} (string) Name of parser • {lang} (string) Name of parser
• {filetype} string|string[] Filetype(s) to associate with lang • {filetype} string|string[] Filetype(s) to associate with lang

View File

@ -75,7 +75,8 @@ end
function TSTreeView:new(bufnr, lang) function TSTreeView:new(bufnr, lang)
local ok, parser = pcall(vim.treesitter.get_parser, bufnr or 0, lang) local ok, parser = pcall(vim.treesitter.get_parser, bufnr or 0, lang)
if not ok then if not ok then
return nil, 'No parser available for the given buffer' local err = parser --[[ @as string ]]
return nil, 'No parser available for the given buffer:\n' .. err
end end
-- For each child tree (injected language), find the root of the tree and locate the node within -- For each child tree (injected language), find the root of the tree and locate the node within

View File

@ -119,6 +119,10 @@ local function ensure_list(x)
end end
--- Register a parser named {lang} to be used for {filetype}(s). --- Register a parser named {lang} to be used for {filetype}(s).
---
--- Note: this adds or overrides the mapping for {filetype}, any existing mappings from other
--- filetypes to {lang} will be preserved.
---
--- @param lang string Name of parser --- @param lang string Name of parser
--- @param filetype string|string[] Filetype(s) to associate with lang --- @param filetype string|string[] Filetype(s) to associate with lang
function M.register(lang, filetype) function M.register(lang, filetype)