mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-17 02:40:09 -04:00
Docs: documentation for modules/submodules
This commit is contained in:
parent
393900b387
commit
7f81df4409
2 changed files with 694 additions and 311 deletions
430
README.md
430
README.md
|
|
@ -1,7 +1,6 @@
|
||||||

|
[](https://nvim-treesitter.zulipchat.com/)
|
||||||

|
[](https://github.com/nvim-treesitter/nvim-treesitter/actions?query=workflow%3A%22Linting+and+style+checking%22+branch%3Amaster)
|
||||||
|
[](https://github.com/nvim-treesitter/nvim-treesitter/actions?query=workflow%3A%22Check+loading+of+syntax+files%22+branch%3Amaster)
|
||||||
[Join us on Zulip !](https://nvim-treesitter.zulipchat.com/join/1twnvjqumn0t97p65eragu5o/)
|
|
||||||
|
|
||||||
# nvim-treesitter
|
# nvim-treesitter
|
||||||
|
|
||||||
|
|
@ -28,7 +27,7 @@ You can install `nvim-treesitter` with your favorite package manager, or using t
|
||||||
|
|
||||||
### Using a package manager
|
### Using a package manager
|
||||||
|
|
||||||
Simply add these lines to your `init.vim` :
|
If you are using [vim-plug](https://github.com/junegunn/vim-plug), put this in your `init.vim` file:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
Plug 'nvim-treesitter/nvim-treesitter'
|
Plug 'nvim-treesitter/nvim-treesitter'
|
||||||
|
|
@ -53,7 +52,7 @@ provides two command to tackle this issue:
|
||||||
`TSInstall <tab>` will give you a list of supported languages, or select `all` to install them all.
|
`TSInstall <tab>` will give you a list of supported languages, or select `all` to install them all.
|
||||||
- `TSInstallInfo` to know which parser is installed.
|
- `TSInstallInfo` to know which parser is installed.
|
||||||
|
|
||||||
Let's say you need parsers for `lua`, this is how you do with these commands:
|
Let's say you need parsers for `lua`, this is how you install it:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
:TSInstall lua
|
:TSInstall lua
|
||||||
|
|
@ -78,92 +77,198 @@ And now you should be ready to use every functionality `nvim-treesitter` provide
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
All modules are disabled by default,
|
All modules are disabled by default,
|
||||||
so you'll need to activate them by putting this in your `init.vim`:
|
so you'll need to activate them by putting this in your `init.vim` file:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
lua <<EOF
|
lua <<EOF
|
||||||
require'nvim-treesitter.configs'.setup {
|
require'nvim-treesitter.configs'.setup {
|
||||||
highlight = {
|
ensure_installed = "all" -- one of "all", "language", or a list of languages
|
||||||
enable = true, -- false will disable the whole extension
|
highlight = {
|
||||||
disable = { "c", "rust" }, -- list of language that will be disabled
|
enable = true, -- false will disable the whole extension
|
||||||
custom_captures = { -- mapping of user defined captures to highlight groups
|
disable = { "c", "rust" }, -- list of language that will be disabled
|
||||||
-- ["foo.bar"] = "Identifier" -- highlight own capture @foo.bar with highlight group "Identifier", see :h nvim-treesitter-query-extensions
|
},
|
||||||
},
|
}
|
||||||
},
|
EOF
|
||||||
incremental_selection = {
|
```
|
||||||
enable = true,
|
|
||||||
disable = { "cpp", "lua" },
|
Check [`:h nvim-treesitter-modules`](doc/nvim-treesitter.txt)
|
||||||
keymaps = { -- mappings for incremental selection (visual mappings)
|
for a list of available modules and its options.
|
||||||
init_selection = "gnn", -- maps in normal mode to init the node/scope selection
|
|
||||||
node_incremental = "grn", -- increment to the upper named parent
|
# Available Modules
|
||||||
scope_incremental = "grc", -- increment to the upper scope (as defined in locals.scm)
|
|
||||||
node_decremental = "grm", -- decrement to the previous node
|
## Highlight
|
||||||
}
|
|
||||||
},
|
Consistent syntax highlighting.
|
||||||
refactor = {
|
|
||||||
highlight_definitions = {
|
```lua
|
||||||
enable = true
|
lua <<EOF
|
||||||
},
|
require'nvim-treesitter.configs'.setup {
|
||||||
highlight_current_scope = {
|
highlight = {
|
||||||
enable = true
|
enable = true,
|
||||||
},
|
custom_captures = {
|
||||||
smart_rename = {
|
-- Highlight the @foo.bar capture group with the "Identifier" highlight group.
|
||||||
enable = true,
|
["foo.bar"] = "Identifier",
|
||||||
keymaps = {
|
},
|
||||||
smart_rename = "grr" -- mapping to rename reference under cursor
|
},
|
||||||
}
|
}
|
||||||
},
|
EOF
|
||||||
navigation = {
|
```
|
||||||
enable = true,
|
|
||||||
keymaps = {
|
## Incremental selection
|
||||||
goto_definition = "gnd", -- mapping to go to definition of symbol under cursor
|
|
||||||
list_definitions = "gnD" -- mapping to list all definitions in current file
|
Incremental selection based on the named nodes from the grammar.
|
||||||
}
|
|
||||||
}
|
```lua
|
||||||
},
|
lua <<EOF
|
||||||
textobjects = { -- syntax-aware textobjects
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
incremental_selection = {
|
||||||
enable = true,
|
enable = true,
|
||||||
disable = {},
|
|
||||||
keymaps = {
|
keymaps = {
|
||||||
["iL"] = { -- you can define your own textobjects directly here
|
init_selection = "gnn",
|
||||||
|
node_incremental = "grn",
|
||||||
|
scope_incremental = "grc",
|
||||||
|
node_decremental = "grm",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
## Refactor: highlight definitions
|
||||||
|
|
||||||
|
Highlights definition and usages of the current symbol under the cursor.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
highlight_definitions = { enable = true },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
## Refactor: highlight current scope
|
||||||
|
|
||||||
|
Highlights the block from the current scope where the cursor is.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
highlight_current_scope = { enable = true },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
## Refactor: smart rename
|
||||||
|
|
||||||
|
Renames the symbol under the cursor within the current scope (and current file).
|
||||||
|
|
||||||
|
```lua
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
smart_rename = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
smart_rename = "grr",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
## Refactor: navigation
|
||||||
|
|
||||||
|
Provides "go to definition" for the symbol under the cursor,
|
||||||
|
and lists the definitions from the current file.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
navigation = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
goto_definition = "gnd",
|
||||||
|
list_definitions = "gnD",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
## Text objects: select
|
||||||
|
|
||||||
|
Define your own text objects mappings
|
||||||
|
similar to `ip` (inner paragraph) and `ap` (a paragraph).
|
||||||
|
|
||||||
|
```lua
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
textobjects = {
|
||||||
|
select = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
-- You can use the capture groups defined in textobjects.scm
|
||||||
|
["af"] = "@function.outer",
|
||||||
|
["if"] = "@function.inner",
|
||||||
|
["ac"] = "@class.outer",
|
||||||
|
["ic"] = "@class.inner",
|
||||||
|
|
||||||
|
-- Or you can define your own textobjects like this
|
||||||
|
["iF"] = {
|
||||||
python = "(function_definition) @function",
|
python = "(function_definition) @function",
|
||||||
cpp = "(function_definition) @function",
|
cpp = "(function_definition) @function",
|
||||||
c = "(function_definition) @function",
|
c = "(function_definition) @function",
|
||||||
java = "(method_declaration) @function"
|
java = "(method_declaration) @function",
|
||||||
},
|
},
|
||||||
-- or you use the queries from supported languages with textobjects.scm
|
|
||||||
["af"] = "@function.outer",
|
|
||||||
["if"] = "@function.inner",
|
|
||||||
["aC"] = "@class.outer",
|
|
||||||
["iC"] = "@class.inner",
|
|
||||||
["ac"] = "@conditional.outer",
|
|
||||||
["ic"] = "@conditional.inner",
|
|
||||||
["ae"] = "@block.outer",
|
|
||||||
["ie"] = "@block.inner",
|
|
||||||
["al"] = "@loop.outer",
|
|
||||||
["il"] = "@loop.inner",
|
|
||||||
["is"] = "@statement.inner",
|
|
||||||
["as"] = "@statement.outer",
|
|
||||||
["ad"] = "@comment.outer",
|
|
||||||
["am"] = "@call.outer",
|
|
||||||
["im"] = "@call.inner"
|
|
||||||
},
|
},
|
||||||
-- swap parameters (keymap -> textobject query)
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
## Text objects: swap
|
||||||
|
|
||||||
|
Define your own mappings to swap the node under the cursor with the next or previous one,
|
||||||
|
like function parameters or arguments.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
textobjects = {
|
||||||
|
swap = {
|
||||||
|
enable = true,
|
||||||
swap_next = {
|
swap_next = {
|
||||||
["<a-p>"] = "@parameter.inner",
|
["<leader>a"] = "@parameter.inner",
|
||||||
},
|
},
|
||||||
swap_previous = {
|
swap_previous = {
|
||||||
["<a-P>"] = "@parameter.inner",
|
["<leader>A"] = "@parameter.inner",
|
||||||
},
|
|
||||||
-- set mappings to go to start/end of adjacent textobjects (keymap -> textobject query)
|
|
||||||
goto_previous_start = {
|
|
||||||
["[m"] = "@function.outer",
|
|
||||||
["[["] = "@class.outer",
|
|
||||||
},
|
|
||||||
goto_previous_end = {
|
|
||||||
["[M"] = "@function.outer",
|
|
||||||
["[]"] = "@class.outer",
|
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
## Text objects: move
|
||||||
|
|
||||||
|
Define your own mappings to jump to the next or previous text object.
|
||||||
|
This is similar to `]m`, `[m`, `]M`, `[M` Neovim's mappings to jump to the next
|
||||||
|
or previous function.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
textobjects = {
|
||||||
|
move {
|
||||||
|
enable = true,
|
||||||
goto_next_start = {
|
goto_next_start = {
|
||||||
["]m"] = "@function.outer",
|
["]m"] = "@function.outer",
|
||||||
["]]"] = "@class.outer",
|
["]]"] = "@class.outer",
|
||||||
|
|
@ -172,13 +277,37 @@ require'nvim-treesitter.configs'.setup {
|
||||||
["]M"] = "@function.outer",
|
["]M"] = "@function.outer",
|
||||||
["]["] = "@class.outer",
|
["]["] = "@class.outer",
|
||||||
},
|
},
|
||||||
|
goto_previous_start = {
|
||||||
|
["[m"] = "@function.outer",
|
||||||
|
["[["] = "@class.outer",
|
||||||
|
},
|
||||||
|
goto_previous_end = {
|
||||||
|
["[M"] = "@function.outer",
|
||||||
|
["[]"] = "@class.outer",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
ensure_installed = "all" -- one of "all", "language", or a list of languages
|
},
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
## Commands
|
# Extra features
|
||||||
|
|
||||||
|
- Syntax based code folding
|
||||||
|
|
||||||
|
```vim
|
||||||
|
set foldmethod=expr
|
||||||
|
set foldexpr=nvim_treesitter#foldexpr()
|
||||||
|
```
|
||||||
|
|
||||||
|
- Statusline indicator
|
||||||
|
|
||||||
|
```vim
|
||||||
|
echo nvim_treesitter#statusline(90) " 90 can be any length
|
||||||
|
module->expression_statement->call->identifier
|
||||||
|
```
|
||||||
|
|
||||||
|
# Commands
|
||||||
|
|
||||||
Each feature can be enabled or disabled by different means:
|
Each feature can be enabled or disabled by different means:
|
||||||
|
|
||||||
|
|
@ -190,77 +319,9 @@ Each feature can be enabled or disabled by different means:
|
||||||
:TSModuleInfo [{module}] " list information about modules state for each filetype
|
:TSModuleInfo [{module}] " list information about modules state for each filetype
|
||||||
```
|
```
|
||||||
|
|
||||||
## Features and Roadmap
|
Check [`:h nvim-treesitter-commands`](doc/nvim-treesitter.txt) for a list of all available commands.
|
||||||
|
|
||||||
The goal of `nvim-treesitter` is both to provide a simple and easy way to use the interface for Treesitter in Neovim,
|
# Supported Languages
|
||||||
but also to add some functionalities to it:
|
|
||||||
|
|
||||||
Some of these features are:
|
|
||||||
|
|
||||||
- [x] Incremental selection
|
|
||||||
- [x] Syntax based code folding (`set foldmethod=expr foldexpr=nvim_treesitter#foldexpr()`)
|
|
||||||
- [x] Consistent syntax highlighting (the api is not quite stable yet)
|
|
||||||
- [x] Statusline indicator (`require'nvim-treesitter'.statusline(size)`)
|
|
||||||
|
|
||||||
You can find the roadmap [here](https://github.com/nvim-treesitter/nvim-treesitter/projects/1).
|
|
||||||
The roadmap and all features of this plugin are open to change, and any suggestion will be highly appreciated!
|
|
||||||
|
|
||||||
## Available Modules
|
|
||||||
|
|
||||||
- `highlight`: Consistent syntax highlighting.
|
|
||||||
- `incremental_selection`: Syntax based selection.
|
|
||||||
- `refactor.highlight_definitions`: Syntax based definition and usage highlighting.
|
|
||||||
- `refactor.smart_rename`: Syntax based definition and usage renaming.
|
|
||||||
- `refactor.navigation`: Syntax based definition listing and navigation.
|
|
||||||
* List all definitions
|
|
||||||
* Go to definition
|
|
||||||
- `textobjects`: Vim textobjects defined by treesitter queries
|
|
||||||
|
|
||||||
## Defining Modules
|
|
||||||
|
|
||||||
Users and plugin authors can take advantage of modules by creating their own. Modules provide:
|
|
||||||
|
|
||||||
- Treesitter language detection support
|
|
||||||
- Attach and detach to buffers
|
|
||||||
- Works with all nvim-treesitter commands
|
|
||||||
|
|
||||||
You can use the `define_modules` function to define one or more modules or module groups.
|
|
||||||
|
|
||||||
```lua
|
|
||||||
require 'nvim-treesitter'.define_modules {
|
|
||||||
my_cool_plugin = {
|
|
||||||
attach = function(bufnr, lang)
|
|
||||||
-- Do cool stuff here
|
|
||||||
end,
|
|
||||||
detach = function(bufnr)
|
|
||||||
-- Undo cool stuff here
|
|
||||||
end,
|
|
||||||
is_supported = function(lang)
|
|
||||||
-- Check if the language is supported
|
|
||||||
end
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Modules can consist of the following properties:
|
|
||||||
|
|
||||||
- `module_path`: A require path (string) that exports a module with an `attach` and `detach` function. This is not required if the functions are on this definition.
|
|
||||||
- `enable`: Determines if the module is enabled by default. This is usually overridden by the user.
|
|
||||||
- `disable`: A list of languages that this module is disabled for. This is usually overridden by the user.
|
|
||||||
- `is_supported`: A function that takes a language and determines if this module supports that language.
|
|
||||||
- `attach`: A function that attaches to a buffer. This is required if `module_path` is not provided.
|
|
||||||
- `detach`: A function that detaches from a buffer. This is required if `module_path` is not provided.
|
|
||||||
|
|
||||||
## Utils
|
|
||||||
|
|
||||||
You can get some utility functions with
|
|
||||||
|
|
||||||
```lua
|
|
||||||
local ts_utils = require 'nvim-treesitter.ts_utils'
|
|
||||||
```
|
|
||||||
More information is available in the help file (`:help nvim-treesitter-utils`).
|
|
||||||
|
|
||||||
## Supported Languages
|
|
||||||
|
|
||||||
For `nvim-treesitter` to work, we need to use query files such as those you can find in
|
For `nvim-treesitter` to work, we need to use query files such as those you can find in
|
||||||
`queries/{lang}/{locals,highlights,textobjects}.scm`
|
`queries/{lang}/{locals,highlights,textobjects}.scm`
|
||||||
|
|
@ -304,7 +365,60 @@ List of currently supported languages:
|
||||||
- [ ] vue
|
- [ ] vue
|
||||||
- [ ] yaml
|
- [ ] yaml
|
||||||
|
|
||||||
## User Query Extensions
|
# Roadmap
|
||||||
|
|
||||||
|
The goal of `nvim-treesitter` is both to provide a simple and easy way to use the interface for Treesitter in Neovim,
|
||||||
|
but also to add some functionalities to it.
|
||||||
|
|
||||||
|
You can find the roadmap [here](https://github.com/nvim-treesitter/nvim-treesitter/projects/1).
|
||||||
|
The roadmap and all features of this plugin are open to change, and any suggestion will be highly appreciated!
|
||||||
|
|
||||||
|
# Defining Modules
|
||||||
|
|
||||||
|
Users and plugin authors can take advantage of modules by creating their own. Modules provide:
|
||||||
|
|
||||||
|
- Treesitter language detection support
|
||||||
|
- Attach and detach to buffers
|
||||||
|
- Works with all nvim-treesitter commands
|
||||||
|
|
||||||
|
You can use the `define_modules` function to define one or more modules or module groups.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
require'nvim-treesitter'.define_modules {
|
||||||
|
my_cool_plugin = {
|
||||||
|
attach = function(bufnr, lang)
|
||||||
|
-- Do cool stuff here
|
||||||
|
end,
|
||||||
|
detach = function(bufnr)
|
||||||
|
-- Undo cool stuff here
|
||||||
|
end,
|
||||||
|
is_supported = function(lang)
|
||||||
|
-- Check if the language is supported
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Modules can consist of the following properties:
|
||||||
|
|
||||||
|
- `module_path`: A require path (string) that exports a module with an `attach` and `detach` function. This is not required if the functions are on this definition.
|
||||||
|
- `enable`: Determines if the module is enabled by default. This is usually overridden by the user.
|
||||||
|
- `disable`: A list of languages that this module is disabled for. This is usually overridden by the user.
|
||||||
|
- `is_supported`: A function that takes a language and determines if this module supports that language.
|
||||||
|
- `attach`: A function that attaches to a buffer. This is required if `module_path` is not provided.
|
||||||
|
- `detach`: A function that detaches from a buffer. This is required if `module_path` is not provided.
|
||||||
|
|
||||||
|
# Utils
|
||||||
|
|
||||||
|
You can get some utility functions with
|
||||||
|
|
||||||
|
```lua
|
||||||
|
local ts_utils = require 'nvim-treesitter.ts_utils'
|
||||||
|
```
|
||||||
|
|
||||||
|
Check [`:h nvim-treesitter-utils`](doc/nvim-treesitter.txt) for more information.
|
||||||
|
|
||||||
|
# User Query Extensions
|
||||||
|
|
||||||
Queries are what `nvim-treesitter` uses to extract informations from the syntax tree, and they are
|
Queries are what `nvim-treesitter` uses to extract informations from the syntax tree, and they are
|
||||||
located in the `queries/{lang}/*` runtime directories (like the `queries` folder of this plugin).
|
located in the `queries/{lang}/*` runtime directories (like the `queries` folder of this plugin).
|
||||||
|
|
@ -322,12 +436,12 @@ use is :
|
||||||
- If you want to override a part of a query (only one match for example), use the `after/queries`
|
- If you want to override a part of a query (only one match for example), use the `after/queries`
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
## Troubleshooting
|
# Troubleshooting
|
||||||
|
|
||||||
Before doing anything make sure you have the latest version of this plugin and run `:checkhealth nvim_treesitter`.
|
Before doing anything make sure you have the latest version of this plugin and run `:checkhealth nvim_treesitter`.
|
||||||
This will help you find where the bug might come from.
|
This will help you find where the bug might come from.
|
||||||
|
|
||||||
### Feature `X` does not work for `{language}`...
|
## Feature `X` does not work for `{language}`...
|
||||||
|
|
||||||
First, check the `## {language} parser healthcheck` section of `:checkhealth` if you have any warning.
|
First, check the `## {language} parser healthcheck` section of `:checkhealth` if you have any warning.
|
||||||
If you do, it's highly possible that this is the cause of the problem.
|
If you do, it's highly possible that this is the cause of the problem.
|
||||||
|
|
@ -335,14 +449,22 @@ If everything is okay, then it might be an actual error.
|
||||||
|
|
||||||
In both cases, feel free to [open an issue here](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose).
|
In both cases, feel free to [open an issue here](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose).
|
||||||
|
|
||||||
### I get `Error detected while processing .../plugin/nvim-treesitter.vim` everytime I open Neovim
|
### While typing my code is marked as red
|
||||||
|
|
||||||
|
You can deactivate highlighting of syntax errors by adding this to your `init.vim` file:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
highlight link TSError Normal
|
||||||
|
```
|
||||||
|
|
||||||
|
## I get `Error detected while processing .../plugin/nvim-treesitter.vim` every time I open Neovim
|
||||||
|
|
||||||
This is probably due to a change in a parser's grammar or its queries.
|
This is probably due to a change in a parser's grammar or its queries.
|
||||||
Try updating the parser that you suspect has changed (`:TSUpdate {language}`) or all of them (`:TSUpdate`).
|
Try updating the parser that you suspect has changed (`:TSUpdate {language}`) or all of them (`:TSUpdate`).
|
||||||
If the error persists after updating all parsers,
|
If the error persists after updating all parsers,
|
||||||
please [open an issue](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose).
|
please [open an issue](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose).
|
||||||
|
|
||||||
### I experience weird highlighting issues similar to [#78](https://github.com/nvim-treesitter/nvim-treesitter/issues/78)
|
## I experience weird highlighting issues similar to [#78](https://github.com/nvim-treesitter/nvim-treesitter/issues/78)
|
||||||
|
|
||||||
This is a well known issue, which arise when the tree and the buffer are getting out of sync.
|
This is a well known issue, which arise when the tree and the buffer are getting out of sync.
|
||||||
As this issue comes from upstream, we don't have any finite fix. To get around this, you can force reparsing the buffer with this command:
|
As this issue comes from upstream, we don't have any finite fix. To get around this, you can force reparsing the buffer with this command:
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,21 @@
|
||||||
|
|
||||||
Minimum version of neovim: nightly
|
Minimum version of neovim: nightly
|
||||||
|
|
||||||
Authors: Yazdani Kiyan <yazdani.kiyan@protonmail.com>, Vigouroux Thomas <tomvig38@gmail.com>
|
Authors: Yazdani Kiyan <yazdani.kiyan@protonmail.com>
|
||||||
|
Vigouroux Thomas <tomvig38@gmail.com>
|
||||||
|
https://github.com/nvim-treesitter/nvim-treesitter/graphs/contributors
|
||||||
|
|
||||||
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
INTRODUCTION *nvim-treesitter-intro*
|
INTRODUCTION *nvim-treesitter-intro*
|
||||||
|
|
||||||
nvim-treesitter wraps the neovim treesitter api to provide functionnalities such
|
nvim-treesitter wraps the Neovim treesitter API to provide functionnalities
|
||||||
as highlighting and incremental selection, and a command to easily install parsers.
|
such as highlighting and incremental selection, and a command to easily
|
||||||
|
install parsers.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
QUICK START *nvim-treesitter-quickstart*
|
QUICK START *nvim-treesitter-quickstart*
|
||||||
|
|
||||||
Install the parser for your language
|
Install the parser for your language
|
||||||
|
|
||||||
|
|
@ -25,108 +30,364 @@ To get a list of supported languages
|
||||||
:TSInstallInfo
|
:TSInstallInfo
|
||||||
<
|
<
|
||||||
|
|
||||||
By default, everything is disabled. To enable support for features, in your `init.vim`:
|
By default, everything is disabled.
|
||||||
|
To enable supported features, put this in your `init.vim` file:
|
||||||
|
|
||||||
>
|
>
|
||||||
lua <<EOF
|
lua <<EOF
|
||||||
require'nvim-treesitter.configs'.setup {
|
require'nvim-treesitter.configs'.setup {
|
||||||
highlight = {
|
ensure_installed = "all" -- one of "all", "language", or a list of languages
|
||||||
enable = true, -- false will disable the whole extension
|
highlight = {
|
||||||
disable = { "c", "rust" }, -- list of language that will be disabled
|
enable = true, -- false will disable the whole extension
|
||||||
custom_captures = { -- mapping of user defined captures to highlight groups
|
disable = { "c", "rust" }, -- list of language that will be disabled
|
||||||
-- ["foo.bar"] = "Identifier" -- highlight own capture @foo.bar with highlight group "Identifier", see :h nvim-treesitter-query-extensions
|
},
|
||||||
},
|
}
|
||||||
},
|
EOF
|
||||||
incremental_selection = {
|
<
|
||||||
enable = true,
|
|
||||||
disable = { "cpp", "lua" },
|
See |nvim-treesitter-modules| for a list of all available modules and its options.
|
||||||
keymaps = { -- mappings for incremental selection (visual mappings)
|
|
||||||
init_selection = 'gnn', -- maps in normal mode to init the node/scope selection
|
==============================================================================
|
||||||
node_incremental = "grn", -- increment to the upper named parent
|
MODULES *nvim-treesitter-modules*
|
||||||
scope_incremental = "grc", -- increment to the upper scope (as defined in locals.scm)
|
|
||||||
node_decremental = "grm", -- decrement to the previous node
|
|nvim-treesitter| provides several functionalities via modules (and submodules),
|
||||||
}
|
each module makes use of the query files defined for each language,
|
||||||
},
|
you can add your own queries too, see |nvim-treesitter-query-extensions|.
|
||||||
refactor = {
|
|
||||||
highlight_definitions = {
|
All modules are disabled by default, and some provide default keymaps.
|
||||||
enable = true
|
Each module corresponds to an entry in the dictionary passed to the
|
||||||
},
|
`nvim-treesitter.configs.setup` function, this should be in your `init.vim` file.
|
||||||
highlight_current_scope = {
|
|
||||||
enable = true
|
>
|
||||||
},
|
lua <<EOF
|
||||||
smart_rename = {
|
require'nvim-treesitter.configs'.setup {
|
||||||
enable = true,
|
-- Modules and its options go here
|
||||||
keymaps = {
|
highlight = { enable = true },
|
||||||
smart_rename = "grr" -- mapping to rename reference under cursor
|
incremental_selection = { enable = true },
|
||||||
}
|
refactor = {
|
||||||
},
|
highlight_definitions = { enable = true },
|
||||||
navigation = {
|
smart_rename = { enable = true },
|
||||||
enable = true,
|
navigation = { enable = true },
|
||||||
keymaps = {
|
},
|
||||||
goto_definition = "gnd", -- mapping to go to definition of symbol under cursor
|
textobjects = { enable = true },
|
||||||
list_definitions = "gnD" -- mapping to list all definitions in current file
|
}
|
||||||
}
|
EOF
|
||||||
}
|
<
|
||||||
},
|
|
||||||
textobjects = { -- syntax-aware textobjects
|
All modules share some common options, like `enable` and `disable`.
|
||||||
|
When `enable` is `true` this will enable the module for all supported languages,
|
||||||
|
if you want to disable the module for some languages you can pass a list to the `disable` option.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
highlight = {
|
||||||
enable = true,
|
enable = true,
|
||||||
disable = {},
|
disable = { "cpp", "lua" },
|
||||||
keymaps = {
|
},
|
||||||
["iL"] = { -- you can define your own textobjects directly here
|
}
|
||||||
python = "(function_definition) @function",
|
EOF
|
||||||
cpp = "(function_definition) @function",
|
<
|
||||||
c = "(function_definition) @function",
|
|
||||||
java = "(method_declaration) @function"
|
Options that define or accept a keymap use the same format you use to define
|
||||||
},
|
keymaps in Neovim, so you can write keymaps as `gd`, `<space>a`, `<leader>a`
|
||||||
-- or you use the queries from supported languages with textobjects.scm
|
`<C-a>` (control + a), `<A-n>` (alt + n), `<CR>` (enter), etc.
|
||||||
["af"] = "@function.outer",
|
|
||||||
["if"] = "@function.inner",
|
External plugins can provide their own modules with their own options,
|
||||||
["aC"] = "@class.outer",
|
those can also be configured using the `nvim-treesitter.configs.setup`
|
||||||
["iC"] = "@class.inner",
|
function.
|
||||||
["ac"] = "@conditional.outer",
|
|
||||||
["ic"] = "@conditional.inner",
|
------------------------------------------------------------------------------
|
||||||
["ae"] = "@block.outer",
|
HIGHLIGHT *nvim-treesitter-highlight-mod*
|
||||||
["ie"] = "@block.inner",
|
|
||||||
["al"] = "@loop.outer",
|
Consistent syntax highlighting.
|
||||||
["il"] = "@loop.inner",
|
|
||||||
["is"] = "@statement.inner",
|
Query files: `highlights.scm`.
|
||||||
["as"] = "@statement.outer",
|
Supported options:
|
||||||
["ad"] = "@comment.outer",
|
|
||||||
["am"] = "@call.outer",
|
- enable: `true` or `false`.
|
||||||
["im"] = "@call.inner"
|
- disable: list of languages.
|
||||||
},
|
- custom_captures: A map of user defined capture groups to highlight groups.
|
||||||
-- swap parameters (keymap -> textobject query)
|
See |nvim-treesitter-query-extensions|.
|
||||||
swap_next = {
|
|
||||||
["<a-p>"] = "@parameter.inner",
|
>
|
||||||
},
|
lua <<EOF
|
||||||
swap_previous = {
|
require'nvim-treesitter.configs'.setup {
|
||||||
["<a-P>"] = "@parameter.inner",
|
highlight = {
|
||||||
},
|
enable = true,
|
||||||
-- set mappings to go to start/end of adjacent textobjects (keymap -> textobject query)
|
custom_captures = {
|
||||||
goto_previous_start = {
|
-- Highlight the @foo.bar capture group with the "Identifier" highlight group.
|
||||||
["[m"] = "@function.outer",
|
["foo.bar"] = "Identifier",
|
||||||
["[["] = "@class.outer",
|
|
||||||
},
|
|
||||||
goto_previous_end = {
|
|
||||||
["[M"] = "@function.outer",
|
|
||||||
["[]"] = "@class.outer",
|
|
||||||
},
|
|
||||||
goto_next_start = {
|
|
||||||
["]m"] = "@function.outer",
|
|
||||||
["]]"] = "@class.outer",
|
|
||||||
},
|
|
||||||
goto_next_end = {
|
|
||||||
["]M"] = "@function.outer",
|
|
||||||
["]["] = "@class.outer",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
ensure_installed = "all" -- one of "all", "language", or a list of languages
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
Note: The api is not stable yet.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
INCREMENTAL SELECTION *nvim-treesitter-incremental-selection-mod*
|
||||||
|
|
||||||
|
Incremental selection based on the named nodes from the grammar.
|
||||||
|
|
||||||
|
Query files: `locals.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
- keymaps:
|
||||||
|
- init_selection: in normal mode, start incremental selection.
|
||||||
|
Defaults to `gnn`.
|
||||||
|
- node_incremental: in visual mode, increment to the upper named parent.
|
||||||
|
Defaults to `grn`.
|
||||||
|
- scope_incremental: in visual mode, increment to the upper scope
|
||||||
|
(as defined in `locals.scm`). Defaults to `grc`.
|
||||||
|
- node_decremental: in visual mode, decrement to the previous named node.
|
||||||
|
Defaults to `grm`.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
incremental_selection = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
init_selection = "gnn",
|
||||||
|
node_incremental = "grn",
|
||||||
|
scope_incremental = "grc",
|
||||||
|
node_decremental = "grm",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
REFACTOR *nvim-treesitter-refactor-mod*
|
||||||
|
|
||||||
|
*nvim-treesitter-highlight-definitions-submod*
|
||||||
|
Highlight definitions~
|
||||||
|
|
||||||
|
Highlights definition and usages of the current symbol under the cursor.
|
||||||
|
|
||||||
|
Query files: `locals.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
highlight_definitions = { enable = true },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
|
||||||
|
*nvim-treesitter-highlight-current-scope-submod*
|
||||||
|
Highlight current scope~
|
||||||
|
|
||||||
|
Highlights the block from the current scope where the cursor is.
|
||||||
|
|
||||||
|
Query files: `locals.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
highlight_current_scope = { enable = true },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
|
||||||
|
*nvim-treesitter-smart-rename-submod*
|
||||||
|
Smart rename~
|
||||||
|
|
||||||
|
Renames the symbol under the cursor within the current scope (and current file).
|
||||||
|
|
||||||
|
Query files: `locals.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
- keymaps:
|
||||||
|
- smart_rename: rename symbol under the cursor.
|
||||||
|
Defaults to `grr`.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
smart_rename = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
smart_rename = "grr",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
|
||||||
|
*nvim-treesitter-navigation-submod*
|
||||||
|
Navigation~
|
||||||
|
|
||||||
|
Provides "go to definition" for the symbol under the cursor,
|
||||||
|
and lists the definitions from the current file.
|
||||||
|
|
||||||
|
Query files: `locals.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
- keymaps:
|
||||||
|
- goto_definition: go to the definition of the symbol under the cursor.
|
||||||
|
Defaults to `gnd`.
|
||||||
|
- list_definitions: list all definitions from the current file.
|
||||||
|
Defaults to `gnD`.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
refactor = {
|
||||||
|
navigation = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
goto_definition = "gnd",
|
||||||
|
list_definitions = "gnD",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
TEXT OBJECTS *nvim-treesitter-textobjects-mod*
|
||||||
|
|
||||||
|
Syntax aware |text-objects|.
|
||||||
|
|
||||||
|
*nvim-treesitter-text-objects-select-submod*
|
||||||
|
Text object selection~
|
||||||
|
|
||||||
|
Define your own text objects mappings
|
||||||
|
similar to `ip` (inner paragraph) and `ap` (a paragraph).
|
||||||
|
|
||||||
|
Query files: `textobjects.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
- keymaps: map of keymaps to a tree-sitter query
|
||||||
|
(`(function_definition) @function`) or capture group (`@function.inner`).
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
textobjects = {
|
||||||
|
select = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
-- You can use the capture groups defined in textobjects.scm
|
||||||
|
["af"] = "@function.outer",
|
||||||
|
["if"] = "@function.inner",
|
||||||
|
["ac"] = "@class.outer",
|
||||||
|
["ic"] = "@class.inner",
|
||||||
|
|
||||||
|
-- Or you can define your own textobjects like this
|
||||||
|
["iF"] = {
|
||||||
|
python = "(function_definition) @function",
|
||||||
|
cpp = "(function_definition) @function",
|
||||||
|
c = "(function_definition) @function",
|
||||||
|
java = "(method_declaration) @function",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
|
||||||
|
*nvim-treesitter-text-objects-swap-submod*
|
||||||
|
Swap text objects~
|
||||||
|
|
||||||
|
Define your own mappings to swap the node under the cursor with the next or previous one,
|
||||||
|
like function parameters or arguments.
|
||||||
|
|
||||||
|
Query files: `textobjects.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
- swap_next: map of keymaps to a tree-sitter capture group (`@parameter.inner`).
|
||||||
|
- swap_previous: same as swap_next.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
textobjects = {
|
||||||
|
swap = {
|
||||||
|
enable = true,
|
||||||
|
swap_next = {
|
||||||
|
["<leader>a"] = "@parameter.inner",
|
||||||
|
},
|
||||||
|
swap_previous = {
|
||||||
|
["<leader>A"] = "@parameter.inner",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
<
|
||||||
|
|
||||||
|
*nvim-treesitter-text-objects-move-submod*
|
||||||
|
Go to next/previous text object~
|
||||||
|
|
||||||
|
Define your own mappings to jump to the next or previous text object.
|
||||||
|
This is similar to |]m|, |[m|, |]M|, |[M| Neovim's mappings to jump to the next
|
||||||
|
or previous function.
|
||||||
|
|
||||||
|
Query files: `textobjects.scm`.
|
||||||
|
Supported options:
|
||||||
|
- enable: `true` or `false`.
|
||||||
|
- disable: list of languages.
|
||||||
|
- goto_next_start: map of keymaps to a tree-sitter capture group (`@function.outer`).
|
||||||
|
- goto_next_end: same as goto_next_start, but it jumps to the start of
|
||||||
|
the text object.
|
||||||
|
- goto_previous_start: same as goto_next_start, but it jumps to the previous
|
||||||
|
text object.
|
||||||
|
- goto_previous_end: same as goto_next_end, but it jumps to the previous
|
||||||
|
text object.
|
||||||
|
|
||||||
|
>
|
||||||
|
lua <<EOF
|
||||||
|
require'nvim-treesitter.configs'.setup {
|
||||||
|
textobjects = {
|
||||||
|
move {
|
||||||
|
enable = true,
|
||||||
|
goto_next_start = {
|
||||||
|
["]m"] = "@function.outer",
|
||||||
|
["]]"] = "@class.outer",
|
||||||
|
},
|
||||||
|
goto_next_end = {
|
||||||
|
["]M"] = "@function.outer",
|
||||||
|
["]["] = "@class.outer",
|
||||||
|
},
|
||||||
|
goto_previous_start = {
|
||||||
|
["[m"] = "@function.outer",
|
||||||
|
["[["] = "@class.outer",
|
||||||
|
},
|
||||||
|
goto_previous_end = {
|
||||||
|
["[M"] = "@function.outer",
|
||||||
|
["[]"] = "@class.outer",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
<
|
<
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
USER QUERY EXTENSIONS *nvim-treesitter-query-extensions*
|
USER QUERY EXTENSIONS *nvim-treesitter-query-extensions*
|
||||||
|
|
||||||
Queries are what `nvim-treesitter` uses to extract informations from the syntax tree, and they are
|
Queries are what `nvim-treesitter` uses to extract informations from the syntax tree, and they are
|
||||||
located in the `queries/{lang}/*` runtime directories (like the `queries` folder of this plugin).
|
located in the `queries/{lang}/*` runtime directories (like the `queries` folder of this plugin).
|
||||||
|
|
@ -145,44 +406,44 @@ use is :
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
COMMANDS *nvim-treesitter-commands*
|
COMMANDS *nvim-treesitter-commands*
|
||||||
|
|
||||||
*:TSInstall*
|
*:TSInstall*
|
||||||
:TSInstall| {language} ...~
|
:TSInstall| {language} ...~
|
||||||
|
|
||||||
Install one or more treesitter parsers.
|
Install one or more treesitter parsers.
|
||||||
You can use |:TSInstall| `all` to install all parsers.
|
You can use |:TSInstall| `all` to install all parsers.
|
||||||
|
|
||||||
*:TSInstallInfo*
|
*:TSInstallInfo*
|
||||||
:TSInstallInfo~
|
:TSInstallInfo~
|
||||||
|
|
||||||
List informations about currently installed parsers
|
List informations about currently installed parsers
|
||||||
|
|
||||||
*:TSUpdate*
|
*:TSUpdate*
|
||||||
:TSUpdate {language}~
|
:TSUpdate {language}~
|
||||||
|
|
||||||
Update the installed parser of {language} or all installed parsers
|
Update the installed parser of {language} or all installed parsers
|
||||||
if {language} is omitted.
|
if {language} is omitted.
|
||||||
|
|
||||||
*:TSUninstall*
|
*:TSUninstall*
|
||||||
:TSUninstall {language}~
|
:TSUninstall {language}~
|
||||||
|
|
||||||
Deletes the parser for corresponding {language}. You can use 'all' for
|
Deletes the parser for corresponding {language}. You can use 'all' for
|
||||||
language to uninstall all parsers.
|
language to uninstall all parsers.
|
||||||
|
|
||||||
*:TSBufEnable*
|
*:TSBufEnable*
|
||||||
:TSBufEnable {module}~
|
:TSBufEnable {module}~
|
||||||
|
|
||||||
Enable {module} on the current buffer.
|
Enable {module} on the current buffer.
|
||||||
A list of modules can be found at |:TSModuleInfo|
|
A list of modules can be found at |:TSModuleInfo|
|
||||||
|
|
||||||
*:TSBufDisable*
|
*:TSBufDisable*
|
||||||
:TSBufDisable {module}~
|
:TSBufDisable {module}~
|
||||||
|
|
||||||
Disable {module} on the current buffer
|
Disable {module} on the current buffer
|
||||||
A list of modules can be found at |:TSModuleInfo|
|
A list of modules can be found at |:TSModuleInfo|
|
||||||
|
|
||||||
*:TSBufEnableAll*
|
*:TSBufEnableAll*
|
||||||
:TSBufEnableAll {module} [{language}]~
|
:TSBufEnableAll {module} [{language}]~
|
||||||
|
|
||||||
Enable {module} for the session
|
Enable {module} for the session
|
||||||
|
|
@ -191,7 +452,7 @@ particular language.
|
||||||
A list of modules can be found at |:TSModuleInfo|
|
A list of modules can be found at |:TSModuleInfo|
|
||||||
A list of languages can be found at |:TSInstallInfo|
|
A list of languages can be found at |:TSInstallInfo|
|
||||||
|
|
||||||
*:TSBufDisableAll*
|
*:TSBufDisableAll*
|
||||||
:TSBufDisableAll {module} [{language}]~
|
:TSBufDisableAll {module} [{language}]~
|
||||||
|
|
||||||
Disable {module} for the session
|
Disable {module} for the session
|
||||||
|
|
@ -200,42 +461,42 @@ particular language.
|
||||||
A list of modules can be found at |:TSModuleInfo|
|
A list of modules can be found at |:TSModuleInfo|
|
||||||
A list of languages can be found at |:TSInstallInfo|
|
A list of languages can be found at |:TSInstallInfo|
|
||||||
|
|
||||||
*:TSModuleInfo*
|
*:TSModuleInfo*
|
||||||
:TSModuleInfo [{module}]~
|
:TSModuleInfo [{module}]~
|
||||||
|
|
||||||
List modules state for the current session.
|
List modules state for the current session.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
UTILS *nvim-treesitter-utils*
|
UTILS *nvim-treesitter-utils*
|
||||||
|
|
||||||
Nvim treesitter has some wrapper functions that you can retrieve with:
|
Nvim treesitter has some wrapper functions that you can retrieve with:
|
||||||
>
|
>
|
||||||
local ts_utils = require 'nvim-treesitter.ts_utils'
|
local ts_utils = require 'nvim-treesitter.ts_utils'
|
||||||
<
|
<
|
||||||
Methods
|
Methods
|
||||||
*ts_utils.get_node_at_cursor*
|
*ts_utils.get_node_at_cursor*
|
||||||
get_node_at_cursor(winnr)~
|
get_node_at_cursor(winnr)~
|
||||||
|
|
||||||
`winnr` will be 0 if nil.
|
`winnr` will be 0 if nil.
|
||||||
Returns the node under the cursor.
|
Returns the node under the cursor.
|
||||||
|
|
||||||
*ts_utils.get_node_text*
|
*ts_utils.get_node_text*
|
||||||
get_node_text(node, bufnr)~
|
get_node_text(node, bufnr)~
|
||||||
|
|
||||||
Returns the text content of a `node`.
|
Returns the text content of a `node`.
|
||||||
|
|
||||||
*ts_utils.is_parent*
|
*ts_utils.is_parent*
|
||||||
is_parent(dest, source)~
|
is_parent(dest, source)~
|
||||||
|
|
||||||
Determines whether `dest` is a parent of `source`.
|
Determines whether `dest` is a parent of `source`.
|
||||||
Returns a boolean.
|
Returns a boolean.
|
||||||
|
|
||||||
*ts_utils.get_named_children*
|
*ts_utils.get_named_children*
|
||||||
get_named_children(node)~
|
get_named_children(node)~
|
||||||
|
|
||||||
Returns a table of named children of `node`.
|
Returns a table of named children of `node`.
|
||||||
|
|
||||||
*ts_utilsiget_next_node*
|
*ts_utilsiget_next_node*
|
||||||
get_next_node(node, allow_switch_parent, allow_next_parent)~
|
get_next_node(node, allow_switch_parent, allow_next_parent)~
|
||||||
|
|
||||||
Returns the next node within the same parent.
|
Returns the next node within the same parent.
|
||||||
|
|
@ -245,7 +506,7 @@ when the node is the last node.
|
||||||
If `allow_next_parent` is true, it will allow next parent if
|
If `allow_next_parent` is true, it will allow next parent if
|
||||||
the node is the last node and the next parent doesn't have children.
|
the node is the last node and the next parent doesn't have children.
|
||||||
|
|
||||||
*ts_utils.get_previous_node*
|
*ts_utils.get_previous_node*
|
||||||
get_previous_node(node, allow_switch_parents, allow_prev_parent)~
|
get_previous_node(node, allow_switch_parents, allow_prev_parent)~
|
||||||
|
|
||||||
Returns the previous node within the same parent.
|
Returns the previous node within the same parent.
|
||||||
|
|
@ -255,15 +516,15 @@ as |ts_utils.get_next_node| but if the node is the first node.
|
||||||
==============================================================================
|
==============================================================================
|
||||||
FUNCTIONS *nvim-treesitter-functions*
|
FUNCTIONS *nvim-treesitter-functions*
|
||||||
|
|
||||||
*nvim_treesitter#statusline()*
|
*nvim_treesitter#statusline()*
|
||||||
nvim_treesitter#statusline(size)~
|
nvim_treesitter#statusline(size)~
|
||||||
|
|
||||||
Returns a string describing the current position in the syntax tree. This
|
Returns a string describing the current position in the syntax tree. This
|
||||||
could be used as a statusline indicator.
|
could be used as a statusline indicator.
|
||||||
Note: The `size` argument is optionnal. When specified, the string will not be
|
Note: The `size` argument is optional. When specified, the string will not be
|
||||||
longer than `size`.
|
longer than `size`.
|
||||||
|
|
||||||
*nvim_treesitter#foldexpr()*
|
*nvim_treesitter#foldexpr()*
|
||||||
nvim_treesitter#foldexpr()~
|
nvim_treesitter#foldexpr()~
|
||||||
|
|
||||||
Functions to be used to determine the fold level at a given line number.
|
Functions to be used to determine the fold level at a given line number.
|
||||||
|
|
@ -279,7 +540,7 @@ Note: This is highly experimental, and folding can break on some types of
|
||||||
HIGHLIGHTS *nvim-treesitter-highlights*
|
HIGHLIGHTS *nvim-treesitter-highlights*
|
||||||
|
|
||||||
`TSError`
|
`TSError`
|
||||||
*hl-TSError*
|
*hl-TSError*
|
||||||
For syntax/parser errors.
|
For syntax/parser errors.
|
||||||
|
|
||||||
You can deactivate highlighting of syntax errors by adding this to your
|
You can deactivate highlighting of syntax errors by adding this to your
|
||||||
|
|
@ -287,112 +548,112 @@ init.vim: >
|
||||||
highlight link TSError Normal
|
highlight link TSError Normal
|
||||||
|
|
||||||
`TSPunctDelimiter`
|
`TSPunctDelimiter`
|
||||||
*hl-TSPunctDelimiter*
|
*hl-TSPunctDelimiter*
|
||||||
For delimiters ie: `.`
|
For delimiters ie: `.`
|
||||||
|
|
||||||
`TSPunctBracket`
|
`TSPunctBracket`
|
||||||
*hl-TSPunctBracket*
|
*hl-TSPunctBracket*
|
||||||
For brackets and parens.
|
For brackets and parens.
|
||||||
|
|
||||||
`TSPunctSpecial`
|
`TSPunctSpecial`
|
||||||
*hl-TSPunctSpecial*
|
*hl-TSPunctSpecial*
|
||||||
For special punctutation that does not fall in the catagories before.
|
For special punctutation that does not fall in the catagories before.
|
||||||
|
|
||||||
`TSConstant`
|
`TSConstant`
|
||||||
*hl-TSConstant*
|
*hl-TSConstant*
|
||||||
For constants
|
For constants
|
||||||
|
|
||||||
`TSConstBuiltin`
|
`TSConstBuiltin`
|
||||||
*hl-TSConstBuiltin*
|
*hl-TSConstBuiltin*
|
||||||
For constant that are built in the language: `nil` in Lua.
|
For constant that are built in the language: `nil` in Lua.
|
||||||
|
|
||||||
`TSConstMacro`
|
`TSConstMacro`
|
||||||
*hl-TSConstMacro*
|
*hl-TSConstMacro*
|
||||||
For constants that are defined by macros: `NULL` in C.
|
For constants that are defined by macros: `NULL` in C.
|
||||||
|
|
||||||
`TSString`
|
`TSString`
|
||||||
*hl-TSString*
|
*hl-TSString*
|
||||||
For strings.
|
For strings.
|
||||||
|
|
||||||
`TSStringRegex`
|
`TSStringRegex`
|
||||||
*hl-TSStringRegex*
|
*hl-TSStringRegex*
|
||||||
For regexes.
|
For regexes.
|
||||||
|
|
||||||
`TSStringEscape`
|
`TSStringEscape`
|
||||||
*hl-TSStringEscape*
|
*hl-TSStringEscape*
|
||||||
For escape characters within a string.
|
For escape characters within a string.
|
||||||
|
|
||||||
`TSCharacter`
|
`TSCharacter`
|
||||||
*hl-TSCharacter*
|
*hl-TSCharacter*
|
||||||
For characters.
|
For characters.
|
||||||
|
|
||||||
`TSNumber`
|
`TSNumber`
|
||||||
*hl-TSNumber*
|
*hl-TSNumber*
|
||||||
For integers.
|
For integers.
|
||||||
|
|
||||||
`TSBoolean`
|
`TSBoolean`
|
||||||
*hl-TSBoolean*
|
*hl-TSBoolean*
|
||||||
For booleans.
|
For booleans.
|
||||||
|
|
||||||
`TSFloat`
|
`TSFloat`
|
||||||
*hl-TSFloat*
|
*hl-TSFloat*
|
||||||
For floats.
|
For floats.
|
||||||
|
|
||||||
`TSFunction`
|
`TSFunction`
|
||||||
*hl-TSFunction*
|
*hl-TSFunction*
|
||||||
For function (calls and definitions).
|
For function (calls and definitions).
|
||||||
|
|
||||||
`TSFuncBuiltin`
|
`TSFuncBuiltin`
|
||||||
*hl-TSFuncBuiltin*
|
*hl-TSFuncBuiltin*
|
||||||
For builtin functions: `table.insert` in Lua.
|
For builtin functions: `table.insert` in Lua.
|
||||||
|
|
||||||
`TSFuncMacro`
|
`TSFuncMacro`
|
||||||
*hl-TSFuncMacro*
|
*hl-TSFuncMacro*
|
||||||
For macro defined fuctions (calls and definitions): each `macro_rules` in
|
For macro defined fuctions (calls and definitions): each `macro_rules` in
|
||||||
Rust.
|
Rust.
|
||||||
|
|
||||||
`TSParameter`
|
`TSParameter`
|
||||||
*hl-TSParameter*
|
*hl-TSParameter*
|
||||||
For parameters of a function.
|
For parameters of a function.
|
||||||
|
|
||||||
`TSParameterReference`
|
`TSParameterReference`
|
||||||
*hl-TSParameterReference*
|
*hl-TSParameterReference*
|
||||||
For references to parameters of a function.
|
For references to parameters of a function.
|
||||||
|
|
||||||
`TSMethod`
|
`TSMethod`
|
||||||
*hl-TSMethod*
|
*hl-TSMethod*
|
||||||
For method calls and definitions.
|
For method calls and definitions.
|
||||||
|
|
||||||
`TSField`
|
`TSField`
|
||||||
*hl-TSField*
|
*hl-TSField*
|
||||||
For fields.
|
For fields.
|
||||||
|
|
||||||
`TSProperty`
|
`TSProperty`
|
||||||
*hl-TSProperty*
|
*hl-TSProperty*
|
||||||
Same as `TSField`.
|
Same as `TSField`.
|
||||||
|
|
||||||
`TSConstructor`
|
`TSConstructor`
|
||||||
*hl-TSConstructor*
|
*hl-TSConstructor*
|
||||||
For constructor calls and definitions: `{}` in Lua, and Java constructors.
|
For constructor calls and definitions: `{}` in Lua, and Java constructors.
|
||||||
|
|
||||||
`TSConditional`
|
`TSConditional`
|
||||||
*hl-TSConditional*
|
*hl-TSConditional*
|
||||||
For keywords related to conditionnals.
|
For keywords related to conditionnals.
|
||||||
|
|
||||||
`TSRepeat`
|
`TSRepeat`
|
||||||
*hl-TSRepeat*
|
*hl-TSRepeat*
|
||||||
For keywords related to loops.
|
For keywords related to loops.
|
||||||
|
|
||||||
`TSLabel`
|
`TSLabel`
|
||||||
*hl-TSLabel*
|
*hl-TSLabel*
|
||||||
For labels: `label:` in C and `:label:` in Lua.
|
For labels: `label:` in C and `:label:` in Lua.
|
||||||
|
|
||||||
`TSOperator`
|
`TSOperator`
|
||||||
*hl-TSOperator*
|
*hl-TSOperator*
|
||||||
For any operator: `+`, but also `->` and `*` in C.
|
For any operator: `+`, but also `->` and `*` in C.
|
||||||
|
|
||||||
`TSKeyword`
|
`TSKeyword`
|
||||||
*hl-TSKeyword*
|
*hl-TSKeyword*
|
||||||
For keywords that don't fall in previous categories.
|
For keywords that don't fall in previous categories.
|
||||||
|
|
||||||
`TSKeywordFunction`
|
`TSKeywordFunction`
|
||||||
|
|
@ -400,23 +661,23 @@ For keywords that don't fall in previous categories.
|
||||||
For keywords used to define a fuction.
|
For keywords used to define a fuction.
|
||||||
|
|
||||||
`TSException`
|
`TSException`
|
||||||
*hl-TSException*
|
*hl-TSException*
|
||||||
For exception related keywords.
|
For exception related keywords.
|
||||||
|
|
||||||
`TSType`
|
`TSType`
|
||||||
*hl-TSType*
|
*hl-TSType*
|
||||||
For types.
|
For types.
|
||||||
|
|
||||||
`TSTypeBuiltin`
|
`TSTypeBuiltin`
|
||||||
*hl-TSTypeBuiltin*
|
*hl-TSTypeBuiltin*
|
||||||
For builtin types (you guessed it, right ?).
|
For builtin types (you guessed it, right ?).
|
||||||
|
|
||||||
`TSStructure`
|
`TSStructure`
|
||||||
*hl-TSStructure*
|
*hl-TSStructure*
|
||||||
This is left as an exercise for the reader.
|
This is left as an exercise for the reader.
|
||||||
|
|
||||||
`TSInclude`
|
`TSInclude`
|
||||||
*hl-TSInclude*
|
*hl-TSInclude*
|
||||||
For includes: `#include` in C, `use` or `extern crate` in Rust, or `require`
|
For includes: `#include` in C, `use` or `extern crate` in Rust, or `require`
|
||||||
in Lua.
|
in Lua.
|
||||||
|
|
||||||
|
|
@ -426,32 +687,32 @@ For C++/Dart attributes, annotations that can be attached to the code to
|
||||||
denote some kind of meta information.
|
denote some kind of meta information.
|
||||||
|
|
||||||
`TSText`
|
`TSText`
|
||||||
*hl-TSText*
|
*hl-TSText*
|
||||||
For strings considered text in a markup language.
|
For strings considered text in a markup language.
|
||||||
|
|
||||||
`TSStrong`
|
`TSStrong`
|
||||||
*hl-TSStrong*
|
*hl-TSStrong*
|
||||||
For text to be represented with strong.
|
For text to be represented with strong.
|
||||||
|
|
||||||
`TSEmphasis`
|
`TSEmphasis`
|
||||||
*hl-TSEmphasis*
|
*hl-TSEmphasis*
|
||||||
For text to be represented with emphasis.
|
For text to be represented with emphasis.
|
||||||
|
|
||||||
`TSUnderline`
|
`TSUnderline`
|
||||||
*hl-TSUnderline*
|
*hl-TSUnderline*
|
||||||
For text to be represented with an underline.
|
For text to be represented with an underline.
|
||||||
|
|
||||||
`TSTitle`
|
`TSTitle`
|
||||||
*hl-TSTitle*
|
*hl-TSTitle*
|
||||||
|
|
||||||
Text that is part of a title.
|
Text that is part of a title.
|
||||||
|
|
||||||
`TSLiteral`
|
`TSLiteral`
|
||||||
*hl-TSLiteral*
|
*hl-TSLiteral*
|
||||||
Literal text.
|
Literal text.
|
||||||
|
|
||||||
`TSURI`
|
`TSURI`
|
||||||
*hl-TSURI*
|
*hl-TSURI*
|
||||||
Any URI like a link or email.
|
Any URI like a link or email.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
@ -475,4 +736,4 @@ the cursor.
|
||||||
*hl-TSCurrentScope*
|
*hl-TSCurrentScope*
|
||||||
Used by refactor.highlight_current_scope to highlight the current scope.
|
Used by refactor.highlight_current_scope to highlight the current scope.
|
||||||
|
|
||||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
vim:tw=78:ts=8:expandtab:noet:ft=help:norl:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue