diff options
Diffstat (limited to 'doc/nvim-treesitter.txt')
| -rw-r--r-- | doc/nvim-treesitter.txt | 571 |
1 files changed, 416 insertions, 155 deletions
diff --git a/doc/nvim-treesitter.txt b/doc/nvim-treesitter.txt index 096d8698c..bc70d6d6c 100644 --- a/doc/nvim-treesitter.txt +++ b/doc/nvim-treesitter.txt @@ -2,16 +2,21 @@ 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 -as highlighting and incremental selection, and a command to easily install parsers. +nvim-treesitter wraps the Neovim treesitter API to provide functionnalities +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 @@ -25,108 +30,364 @@ To get a list of supported languages :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 require'nvim-treesitter.configs'.setup { - highlight = { - enable = true, -- false will disable the whole extension - disable = { "c", "rust" }, -- list of language that will be disabled - custom_captures = { -- mapping of user defined captures to highlight groups - -- ["foo.bar"] = "Identifier" -- highlight own capture @foo.bar with highlight group "Identifier", see :h nvim-treesitter-query-extensions - }, - }, - incremental_selection = { - enable = true, - disable = { "cpp", "lua" }, - 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 - scope_incremental = "grc", -- increment to the upper scope (as defined in locals.scm) - node_decremental = "grm", -- decrement to the previous node - } - }, - refactor = { - highlight_definitions = { - enable = true - }, - highlight_current_scope = { - enable = true - }, - smart_rename = { - enable = true, - keymaps = { - smart_rename = "grr" -- mapping to rename reference under cursor - } - }, - navigation = { - enable = true, - keymaps = { - goto_definition = "gnd", -- mapping to go to definition of symbol under cursor - list_definitions = "gnD" -- mapping to list all definitions in current file - } - } + ensure_installed = "all" -- one of "all", "language", or a list of languages + highlight = { + enable = true, -- false will disable the whole extension + disable = { "c", "rust" }, -- list of language that will be disabled + }, + } + EOF +< + +See |nvim-treesitter-modules| for a list of all available modules and its options. + +============================================================================== +MODULES *nvim-treesitter-modules* + +|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|. + +All modules are disabled by default, and some provide default keymaps. +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. + +> + lua <<EOF + require'nvim-treesitter.configs'.setup { + -- Modules and its options go here + highlight = { enable = true }, + incremental_selection = { enable = true }, + refactor = { + highlight_definitions = { enable = true }, + smart_rename = { enable = true }, + navigation = { enable = true }, + }, + textobjects = { enable = true }, + } + EOF +< + +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, + disable = { "cpp", "lua" }, + }, + } + EOF +< + +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` +`<C-a>` (control + a), `<A-n>` (alt + n), `<CR>` (enter), etc. + +External plugins can provide their own modules with their own options, +those can also be configured using the `nvim-treesitter.configs.setup` +function. + +------------------------------------------------------------------------------ +HIGHLIGHT *nvim-treesitter-highlight-mod* + +Consistent syntax highlighting. + +Query files: `highlights.scm`. +Supported options: + +- enable: `true` or `false`. +- disable: list of languages. +- custom_captures: A map of user defined capture groups to highlight groups. + See |nvim-treesitter-query-extensions|. + +> + lua <<EOF + require'nvim-treesitter.configs'.setup { + highlight = { + enable = true, + custom_captures = { + -- Highlight the @foo.bar capture group with the "Identifier" highlight group. + ["foo.bar"] = "Identifier", }, - textobjects = { -- syntax-aware textobjects + }, + } + 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, - disable = {}, keymaps = { - ["iL"] = { -- you can define your own textobjects directly here - python = "(function_definition) @function", - cpp = "(function_definition) @function", - c = "(function_definition) @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) - swap_next = { - ["<a-p>"] = "@parameter.inner", - }, - swap_previous = { - ["<a-P>"] = "@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", - }, - goto_next_start = { - ["]m"] = "@function.outer", - ["]]"] = "@class.outer", - }, - goto_next_end = { - ["]M"] = "@function.outer", - ["]["] = "@class.outer", - }, + 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", + }, }, - ensure_installed = "all" -- one of "all", "language", or a list of languages + }, } 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 located in the `queries/{lang}/*` runtime directories (like the `queries` folder of this plugin). @@ -145,44 +406,44 @@ use is : directory. ============================================================================== -COMMANDS *nvim-treesitter-commands* +COMMANDS *nvim-treesitter-commands* - *:TSInstall* + *:TSInstall* :TSInstall| {language} ...~ Install one or more treesitter parsers. You can use |:TSInstall| `all` to install all parsers. - *:TSInstallInfo* + *:TSInstallInfo* :TSInstallInfo~ List informations about currently installed parsers - *:TSUpdate* + *:TSUpdate* :TSUpdate {language}~ Update the installed parser of {language} or all installed parsers if {language} is omitted. - *:TSUninstall* + *:TSUninstall* :TSUninstall {language}~ Deletes the parser for corresponding {language}. You can use 'all' for language to uninstall all parsers. - *:TSBufEnable* + *:TSBufEnable* :TSBufEnable {module}~ Enable {module} on the current buffer. A list of modules can be found at |:TSModuleInfo| - *:TSBufDisable* + *:TSBufDisable* :TSBufDisable {module}~ Disable {module} on the current buffer A list of modules can be found at |:TSModuleInfo| - *:TSBufEnableAll* + *:TSBufEnableAll* :TSBufEnableAll {module} [{language}]~ Enable {module} for the session @@ -191,7 +452,7 @@ particular language. A list of modules can be found at |:TSModuleInfo| A list of languages can be found at |:TSInstallInfo| - *:TSBufDisableAll* + *:TSBufDisableAll* :TSBufDisableAll {module} [{language}]~ Disable {module} for the session @@ -200,42 +461,42 @@ particular language. A list of modules can be found at |:TSModuleInfo| A list of languages can be found at |:TSInstallInfo| - *:TSModuleInfo* + *:TSModuleInfo* :TSModuleInfo [{module}]~ 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: > local ts_utils = require 'nvim-treesitter.ts_utils' < Methods - *ts_utils.get_node_at_cursor* + *ts_utils.get_node_at_cursor* get_node_at_cursor(winnr)~ `winnr` will be 0 if nil. Returns the node under the cursor. - *ts_utils.get_node_text* + *ts_utils.get_node_text* get_node_text(node, bufnr)~ Returns the text content of a `node`. - *ts_utils.is_parent* + *ts_utils.is_parent* is_parent(dest, source)~ Determines whether `dest` is a parent of `source`. Returns a boolean. - *ts_utils.get_named_children* + *ts_utils.get_named_children* get_named_children(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)~ 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 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)~ 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* - *nvim_treesitter#statusline()* + *nvim_treesitter#statusline()* nvim_treesitter#statusline(size)~ Returns a string describing the current position in the syntax tree. This 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`. - *nvim_treesitter#foldexpr()* + *nvim_treesitter#foldexpr()* nvim_treesitter#foldexpr()~ 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* `TSError` - *hl-TSError* + *hl-TSError* For syntax/parser errors. You can deactivate highlighting of syntax errors by adding this to your @@ -287,112 +548,112 @@ init.vim: > highlight link TSError Normal `TSPunctDelimiter` - *hl-TSPunctDelimiter* + *hl-TSPunctDelimiter* For delimiters ie: `.` `TSPunctBracket` - *hl-TSPunctBracket* + *hl-TSPunctBracket* For brackets and parens. `TSPunctSpecial` - *hl-TSPunctSpecial* + *hl-TSPunctSpecial* For special punctutation that does not fall in the catagories before. `TSConstant` - *hl-TSConstant* + *hl-TSConstant* For constants `TSConstBuiltin` - *hl-TSConstBuiltin* + *hl-TSConstBuiltin* For constant that are built in the language: `nil` in Lua. `TSConstMacro` - *hl-TSConstMacro* + *hl-TSConstMacro* For constants that are defined by macros: `NULL` in C. `TSString` - *hl-TSString* + *hl-TSString* For strings. `TSStringRegex` - *hl-TSStringRegex* + *hl-TSStringRegex* For regexes. `TSStringEscape` - *hl-TSStringEscape* + *hl-TSStringEscape* For escape characters within a string. `TSCharacter` - *hl-TSCharacter* + *hl-TSCharacter* For characters. `TSNumber` - *hl-TSNumber* + *hl-TSNumber* For integers. `TSBoolean` - *hl-TSBoolean* + *hl-TSBoolean* For booleans. `TSFloat` - *hl-TSFloat* + *hl-TSFloat* For floats. `TSFunction` - *hl-TSFunction* + *hl-TSFunction* For function (calls and definitions). `TSFuncBuiltin` - *hl-TSFuncBuiltin* + *hl-TSFuncBuiltin* For builtin functions: `table.insert` in Lua. `TSFuncMacro` - *hl-TSFuncMacro* + *hl-TSFuncMacro* For macro defined fuctions (calls and definitions): each `macro_rules` in Rust. `TSParameter` - *hl-TSParameter* + *hl-TSParameter* For parameters of a function. `TSParameterReference` - *hl-TSParameterReference* + *hl-TSParameterReference* For references to parameters of a function. `TSMethod` - *hl-TSMethod* + *hl-TSMethod* For method calls and definitions. `TSField` - *hl-TSField* + *hl-TSField* For fields. `TSProperty` - *hl-TSProperty* + *hl-TSProperty* Same as `TSField`. `TSConstructor` - *hl-TSConstructor* + *hl-TSConstructor* For constructor calls and definitions: `{}` in Lua, and Java constructors. `TSConditional` - *hl-TSConditional* + *hl-TSConditional* For keywords related to conditionnals. `TSRepeat` - *hl-TSRepeat* + *hl-TSRepeat* For keywords related to loops. `TSLabel` - *hl-TSLabel* + *hl-TSLabel* For labels: `label:` in C and `:label:` in Lua. `TSOperator` - *hl-TSOperator* + *hl-TSOperator* For any operator: `+`, but also `->` and `*` in C. `TSKeyword` - *hl-TSKeyword* + *hl-TSKeyword* For keywords that don't fall in previous categories. `TSKeywordFunction` @@ -400,23 +661,23 @@ For keywords that don't fall in previous categories. For keywords used to define a fuction. `TSException` - *hl-TSException* + *hl-TSException* For exception related keywords. `TSType` - *hl-TSType* + *hl-TSType* For types. `TSTypeBuiltin` - *hl-TSTypeBuiltin* + *hl-TSTypeBuiltin* For builtin types (you guessed it, right ?). `TSStructure` - *hl-TSStructure* + *hl-TSStructure* This is left as an exercise for the reader. `TSInclude` - *hl-TSInclude* + *hl-TSInclude* For includes: `#include` in C, `use` or `extern crate` in Rust, or `require` 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. `TSText` - *hl-TSText* + *hl-TSText* For strings considered text in a markup language. `TSStrong` - *hl-TSStrong* + *hl-TSStrong* For text to be represented with strong. `TSEmphasis` - *hl-TSEmphasis* + *hl-TSEmphasis* For text to be represented with emphasis. `TSUnderline` - *hl-TSUnderline* + *hl-TSUnderline* For text to be represented with an underline. `TSTitle` - *hl-TSTitle* + *hl-TSTitle* Text that is part of a title. `TSLiteral` - *hl-TSLiteral* + *hl-TSLiteral* Literal text. `TSURI` - *hl-TSURI* + *hl-TSURI* Any URI like a link or email. ============================================================================== @@ -475,4 +736,4 @@ the cursor. *hl-TSCurrentScope* 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: |
