From c8f861b739b4703b1198dc1f88b09edbeb0d9f2e Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Sat, 15 Jun 2019 12:10:12 +0200 Subject: tree-sitter: rename tree_sitter => treesitter for consistency --- runtime/lua/tree_sitter_demo.lua | 57 --------------------------------------- runtime/lua/treesitter_demo.lua | 58 ++++++++++++++++++++++++++++++++++++++++ runtime/lua/vim/tree_sitter.lua | 57 --------------------------------------- runtime/lua/vim/treesitter.lua | 57 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 114 deletions(-) delete mode 100644 runtime/lua/tree_sitter_demo.lua create mode 100644 runtime/lua/treesitter_demo.lua delete mode 100644 runtime/lua/vim/tree_sitter.lua create mode 100644 runtime/lua/vim/treesitter.lua (limited to 'runtime/lua') diff --git a/runtime/lua/tree_sitter_demo.lua b/runtime/lua/tree_sitter_demo.lua deleted file mode 100644 index bbfd69109d..0000000000 --- a/runtime/lua/tree_sitter_demo.lua +++ /dev/null @@ -1,57 +0,0 @@ -local a = vim.api -_G.a = vim.api - -if __treesitter_rt_ns == nil then - __treesitter_rt_ns = a.nvim_create_namespace("treesitter_demp") -end -local my_ns = __treesitter_rt_ns - -function ts_inspect_pos(row,col) - local tree = theparser:parse_tree() - local root = tree:root() - local node = root:descendant_for_point_range(row,col,row,col) - show_node(node) -end - -function show_node(node) - if node == nil then - return - end - a.nvim_buf_clear_highlight(0, my_ns, 0, -1) - shown_node = node - print(node:type()) - local start_row, start_col, end_row, end_col = node:range() - - a.nvim_buf_add_highlight(0, my_ns, "ErrorMsg", start_row, start_col, start_col+1) - - if end_col >= 1 then - end_col = end_col - 1 - end - a.nvim_buf_add_highlight(0, my_ns, "ErrorMsg", end_row, end_col, end_col+1) -end - -function ts_expand_node() - if shown_node == nil then - return - end - parent = shown_node:parent() - show_node(parent) -end - -function ts_cursor() - local row, col = unpack(a.nvim_win_get_cursor(0)) - ts_inspect_pos(row-1, col) -end - -if false then - ctree = theparser.tree - root = ctree:root() - cursor = root:to_cursor() - node = cursor:forward(5000) if true then return node end - print(#root) - c = root:child(50) - print(require'inspect'{c:extent()}) - type(ctree.__tostring) - root:__tostring() - print(_tslua_debug()) -end diff --git a/runtime/lua/treesitter_demo.lua b/runtime/lua/treesitter_demo.lua new file mode 100644 index 0000000000..82c36f94c0 --- /dev/null +++ b/runtime/lua/treesitter_demo.lua @@ -0,0 +1,58 @@ +-- TODO: externalize this +local a = vim.api +_G.a = vim.api + +if __treesitter_rt_ns == nil then + __treesitter_rt_ns = a.nvim_create_namespace("treesitter_demp") +end +local my_ns = __treesitter_rt_ns + +function ts_inspect_pos(row,col) + local tree = theparser:parse_tree() + local root = tree:root() + local node = root:descendant_for_point_range(row,col,row,col) + show_node(node) +end + +function show_node(node) + if node == nil then + return + end + a.nvim_buf_clear_highlight(0, my_ns, 0, -1) + shown_node = node + print(node:type()) + local start_row, start_col, end_row, end_col = node:range() + + a.nvim_buf_add_highlight(0, my_ns, "ErrorMsg", start_row, start_col, start_col+1) + + if end_col >= 1 then + end_col = end_col - 1 + end + a.nvim_buf_add_highlight(0, my_ns, "ErrorMsg", end_row, end_col, end_col+1) +end + +function ts_expand_node() + if shown_node == nil then + return + end + parent = shown_node:parent() + show_node(parent) +end + +function ts_cursor() + local row, col = unpack(a.nvim_win_get_cursor(0)) + ts_inspect_pos(row-1, col) +end + +if false then + ctree = theparser.tree + root = ctree:root() + cursor = root:to_cursor() + node = cursor:forward(5000) if true then return node end + print(#root) + c = root:child(50) + print(require'inspect'{c:extent()}) + type(ctree.__tostring) + root:__tostring() + print(_tslua_debug()) +end diff --git a/runtime/lua/vim/tree_sitter.lua b/runtime/lua/vim/tree_sitter.lua deleted file mode 100644 index 1b5f416b67..0000000000 --- a/runtime/lua/vim/tree_sitter.lua +++ /dev/null @@ -1,57 +0,0 @@ -local a = vim.api - -local Parser = {} -Parser.__index = Parser - -function Parser:parse_tree(force) - if self.valid and not force then - return self.tree - end - self.tree = self._parser:parse_buf(self.bufnr) - self.valid = true - return self.tree -end - -local function change_cb(self, ev, bufnr, tick, start_row, oldstopline, stop_row) - local start_byte = a.nvim_buf_get_offset(bufnr,start_row) - -- a bit messy, should we expose edited but not reparsed tree? - -- are multiple edits safe in general? - local root = self._parser:tree():root() - -- TODO: add proper lookup function! - local inode = root:descendant_for_point_range(oldstopline+9000,0, oldstopline,0) - if inode == nil then - local stop_byte = a.nvim_buf_get_offset(bufnr,stop_row) - self._parser:edit(start_byte,stop_byte,stop_byte,start_row,0,stop_row,0,stop_row,0) - else - local fakeoldstoprow, fakeoldstopcol, fakebyteoldstop = inode:start() - local fake_rows = fakeoldstoprow-oldstopline - local fakestop = stop_row+fake_rows - local fakebytestop = a.nvim_buf_get_offset(bufnr,fakestop)+fakeoldstopcol - self._parser:edit(start_byte,fakebyteoldstop,fakebytestop,start_row,0,fakeoldstoprow,fakeoldstopcol,fakestop,fakeoldstopcol) - end - self.valid = false -end - -local function create_parser(bufnr, ft) - if bufnr == 0 then - bufnr = a.nvim_get_current_buf() - end - if ft == nil then - ft = a.nvim_buf_get_option(bufnr, "filetype") - end - local self = setmetatable({bufnr=bufnr, valid=false}, Parser) - self._parser = vim._create_ts_parser(ft) - self:parse_tree() - local function cb(ev, ...) - -- TODO: use weakref to self, so that the parser is free'd is no plugin is - -- using it. - return change_cb(self, ev, ...) - end - a.nvim_buf_attach(self.bufnr, false, {on_lines=cb}) - return self -end - --- TODO: weak table with reusable parser per buffer. - -return {create_parser=create_parser, add_language=vim._ts_add_language} - diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua new file mode 100644 index 0000000000..1b5f416b67 --- /dev/null +++ b/runtime/lua/vim/treesitter.lua @@ -0,0 +1,57 @@ +local a = vim.api + +local Parser = {} +Parser.__index = Parser + +function Parser:parse_tree(force) + if self.valid and not force then + return self.tree + end + self.tree = self._parser:parse_buf(self.bufnr) + self.valid = true + return self.tree +end + +local function change_cb(self, ev, bufnr, tick, start_row, oldstopline, stop_row) + local start_byte = a.nvim_buf_get_offset(bufnr,start_row) + -- a bit messy, should we expose edited but not reparsed tree? + -- are multiple edits safe in general? + local root = self._parser:tree():root() + -- TODO: add proper lookup function! + local inode = root:descendant_for_point_range(oldstopline+9000,0, oldstopline,0) + if inode == nil then + local stop_byte = a.nvim_buf_get_offset(bufnr,stop_row) + self._parser:edit(start_byte,stop_byte,stop_byte,start_row,0,stop_row,0,stop_row,0) + else + local fakeoldstoprow, fakeoldstopcol, fakebyteoldstop = inode:start() + local fake_rows = fakeoldstoprow-oldstopline + local fakestop = stop_row+fake_rows + local fakebytestop = a.nvim_buf_get_offset(bufnr,fakestop)+fakeoldstopcol + self._parser:edit(start_byte,fakebyteoldstop,fakebytestop,start_row,0,fakeoldstoprow,fakeoldstopcol,fakestop,fakeoldstopcol) + end + self.valid = false +end + +local function create_parser(bufnr, ft) + if bufnr == 0 then + bufnr = a.nvim_get_current_buf() + end + if ft == nil then + ft = a.nvim_buf_get_option(bufnr, "filetype") + end + local self = setmetatable({bufnr=bufnr, valid=false}, Parser) + self._parser = vim._create_ts_parser(ft) + self:parse_tree() + local function cb(ev, ...) + -- TODO: use weakref to self, so that the parser is free'd is no plugin is + -- using it. + return change_cb(self, ev, ...) + end + a.nvim_buf_attach(self.bufnr, false, {on_lines=cb}) + return self +end + +-- TODO: weak table with reusable parser per buffer. + +return {create_parser=create_parser, add_language=vim._ts_add_language} + -- cgit