diff options
Diffstat (limited to 'runtime/lua/vim/treesitter.lua')
-rw-r--r-- | runtime/lua/vim/treesitter.lua | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua index 3a475b8f98..77bbfaa3ad 100644 --- a/runtime/lua/vim/treesitter.lua +++ b/runtime/lua/vim/treesitter.lua @@ -21,7 +21,9 @@ function Parser:parse() return self.tree end local changes - self.tree, changes = self._parser:parse_buf(self.bufnr) + + self.tree, changes = self._parser:parse(self:input_source()) + self.valid = true if not vim.tbl_isempty(changes) then @@ -33,6 +35,10 @@ function Parser:parse() return self.tree, changes end +function Parser:input_source() + return self.bufnr or self.str +end + function Parser:_on_bytes(bufnr, changed_tick, start_row, start_col, start_byte, old_row, old_col, old_byte, @@ -152,4 +158,18 @@ function M.get_parser(bufnr, lang, buf_attach_cbs) return parsers[id] end +function M.get_string_parser(str, lang) + vim.validate { + str = { str, 'string' }, + lang = { lang, 'string' } + } + language.require_language(lang) + + local self = setmetatable({str=str, lang=lang, valid=false}, Parser) + self._parser = vim._create_ts_parser(lang) + self:parse() + + return self +end + return M |