*nvim-treesitter* 

Minimum version of neovim: nightly

Authors: Yazdani Kiyan <yazdani.kiyan@protonmail.com>, Vigouroux Thomas <tomvig38@gmail.com>

==============================================================================
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.

==============================================================================
QUICK START                                        *nvim-treesitter-quickstart*

Install the parser for your language

>
  :TSInstall {language}
<

To get a list of supported languages

>
  :TSInstallInfo
<

By default, everything is disabled. To enable support for features, in your `init.vim`:

>
  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
    },
    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
        }
    },
    ensure_installed = 'all' -- one of 'all', 'language', or a list of languages
  }
  EOF
<

==============================================================================
COMMANDS                                          *nvim-treesitter-commands*

|:TSInstall| {language}                            *:TSInstall*

Download, compile and install a parser for {language}

|:TSInstallInfo|                                   *:TSInstallInfo*

List informations about currently installed parsers

|:TSBufEnable| {module}                            *:TSBufEnable*

Enable {module} on the current buffer.
A list of modules can be found at |:TSModuleInfo|

|:TSBufDisable| {module}                           *:TSBufDisable*

Disable {module} on the current buffer
A list of modules can be found at |:TSModuleInfo|

|:TSBufEnableAll| {module} [{language}]            *:TSBufEnableAll*

Enable {module} for the session
if {language} is specified, enable module for the session only for this
particular language.
A list of modules can be found at |:TSModuleInfo|
A list of languages can be found at |:TSInstallInfo|

|:TSBufDisableAll| {module} [{language}]            *:TSBufDisableAll*

Disable {module} for the session
if {language} is specified, disable module for the session only for this
particular language.
A list of modules can be found at |:TSModuleInfo|
A list of languages can be found at |:TSInstallInfo|

|:TSModuleInfo| [{module}]                          *:TSModuleInfo*

List modules state for the current session.

==============================================================================
API                                               *nvim-treesitter-api*

Nvim treesitter exposes extended functions to use on nodes and scopes.
you can retrieve the api with:
>
    local ts_node_api = require 'nvim-treesitter'.get_node_api()
<
Methods

get_node_text(node, bufnr)                        *ts_api.get_node_text*
    return the text content of a node

is_parent(dest, source)                           *ts_api.is_parent*
    determines wether `dest` is a parent of `source` 
    return a boolean

get_named_children(node)                          *ts_api.get_named_children*
    return a table of named children of `node`

get_next_node(node, allow_switch_parent, allow_next_parent) *ts_api.get_next_node*
    return the next node within the same parent.
    if no node is found, returns `nil`.
    if `allow_switch_parent` is true, it will allow switching parent
    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.

get_previous_node(node, allow_switch_parents, allow_prev_parent) *ts_api.get_previous_node*
    return the previous node within the same parent.
    `allow_switch_parent` and `allow_prev_parent` follow the same rule
    as |ts_api.get_next_node| but if the node is the first node.

containing_scope(node)                           *ts_api.containing_scope*
    return the smallest scope containing the node

parent_scope(node, cursor_pos)                   *ts_api.parent_scope*
    return the parent scope of the current scope that contains the node.
    `cursor_pos` should be `{ row = number, col = number }`
    you can retrieve the cursor_pos with the buffer state

nested_scope(node, cursor_pos)                   *ts_api.nested_scope*
    return the first scope within current scope that contains the node.
    `cursor_pos` should be `{ row = number, col = number }`
    you can retrieve the cursor_pos with the buffer state

next_scope(node)                                 *ts_api.next_scope*
    return the neighbour scope of the current node

previous_scope(node)                             *ts_api.previous_scope*
    return the previous neighbour scope of the current node

Nvim-treesitter also provides access to the state of the current buffer:
>
    local cur_buf_state = require'nvim-treesitter'.get_buf_state()
    print(vim.inspect(cur_buf_state))
    --[[
	{
	    cursor_pos = { row = number, col = number }, (current cursor pos in the buffer)
	    current_node = tsnode                        (smallest node the cursor is on)
	}
    ]]--
<

==============================================================================
FUNCTIONS                                         *nvim-treesitter-functions*

|nvim_treesitter#statusline(size)|
						*nvim_treesitter#statusline()*

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
      longer than `size`.

|nvim_treesitter#foldexpr()|
						  *nvim_treesitter#foldexpr()*

Functions to be used to determine the fold level at a given line number.
To use it: >
  set foldmethod=expr
  set foldexpr=nvim_treesitter#foldexr()
<
Note: This is highly experimental, and folding can break on some types of
      edits. If you encounter such breakage, hiting `zx` should fix folding.
      In any case, feel free to open an issue with the reproducing steps.

 vim:tw=78:ts=8:noet:ft=help:norl:
