diff options
-rw-r--r-- | runtime/lua/vim/treesitter/languagetree.lua | 9 | ||||
-rw-r--r-- | test/functional/lua/comment_spec.lua | 11 | ||||
-rw-r--r-- | test/functional/treesitter/language_spec.lua | 14 |
3 files changed, 27 insertions, 7 deletions
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua index 8f65cb57c3..990debc77b 100644 --- a/runtime/lua/vim/treesitter/languagetree.lua +++ b/runtime/lua/vim/treesitter/languagetree.lua @@ -1100,7 +1100,14 @@ end ---@param range Range ---@return boolean local function tree_contains(tree, range) - return Range.contains({ tree:root():range() }, range) + local tree_ranges = tree:included_ranges(false) + + return Range.contains({ + tree_ranges[1][1], + tree_ranges[1][2], + tree_ranges[#tree_ranges][3], + tree_ranges[#tree_ranges][4], + }, range) end --- Determines whether {range} is contained in the |LanguageTree|. diff --git a/test/functional/lua/comment_spec.lua b/test/functional/lua/comment_spec.lua index 48e23fd7c7..df7776d928 100644 --- a/test/functional/lua/comment_spec.lua +++ b/test/functional/lua/comment_spec.lua @@ -495,22 +495,21 @@ describe('commenting', function() it("recomputes local 'commentstring' based on cursor position", function() setup_treesitter() local lines = { + ' print(1)', 'lua << EOF', ' print(1)', 'EOF', } set_lines(lines) - -- Vimscript's tree-sitter grammar is (currently) written in a way that Lua's - -- injection really starts at the first non-blank character - set_cursor(2, 1) + set_cursor(1, 1) feed('gc_') - eq(get_lines()[2], ' "print(1)') + eq(get_lines()[1], ' "print(1)') set_lines(lines) - set_cursor(2, 2) + set_cursor(3, 2) feed('.') - eq(get_lines()[2], ' -- print(1)') + eq(get_lines()[3], ' -- print(1)') end) it('preserves marks', function() diff --git a/test/functional/treesitter/language_spec.lua b/test/functional/treesitter/language_spec.lua index 0e18a36352..365e2a697a 100644 --- a/test/functional/treesitter/language_spec.lua +++ b/test/functional/treesitter/language_spec.lua @@ -120,6 +120,20 @@ describe('treesitter language API', function() eq('<node translation_unit>', exec_lua('return tostring(tree:root())')) end) + it('retrieve the tree given a range when range is out of bounds relative to buffer', function() + insert([[ + int main() { + int x = 3; + }]]) + + exec_lua([[ + langtree = vim.treesitter.get_parser(0, "c") + tree = langtree:tree_for_range({10, 10, 10, 10}) + ]]) + + eq('<node translation_unit>', exec_lua('return tostring(tree:root())')) + end) + it('retrieve the node given a range', function() insert([[ int main() { |