refacto/feat: better handling of parser updates

features:
- node_movement is moving between scopes.
- add selection initialization from normal mode
- add a decremental selection

improvements:
- attach to buffer to run tree parsing on change
- run state update on CursorMoved
- the buffer state is:
```
{
  cursor_pos = { row=row, col=col },
  current_node = node_under_cursor,
  selection = {
      range = nil, -- activates when starting a selection
      nodes = {} -- filling up when starting an incremental selection
  },
  parser = parser, -- parser for current buffer
}
```
- refacto all the modules reliant on parsing the tree, update the current nodes, get the current nodes...

fixes:
- fix has_parser to look for .so libraries
- fix should select the whole file when selection root in selection
This commit is contained in:
kiyan42 2020-05-08 11:22:59 +02:00
parent 307c78aa1e
commit 45dcebb15f
14 changed files with 555 additions and 333 deletions

View file

@ -3,11 +3,12 @@
-- its the way nvim-treesitter uses to "understand" the code
local api = vim.api
local ts = vim.treesitter
local queries = require'nvim-treesitter.query'
local parsers = require'nvim-treesitter.parsers'
local utils = require'nvim-treesitter.utils'
local M = {
locals={}
locals = {}
}
function M.collect_locals(bufnr)
@ -17,7 +18,7 @@ function M.collect_locals(bufnr)
local query = queries.get_query(ft, 'locals')
if not query then return end
local parser = parsers.get_parser(bufnr, ft)
local parser = utils.get_parser(bufnr, ft)
if not parser then return end
local root = parser:parse():root()