mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 11:28:22 +00:00
refactor(treesitter): drop LanguageTree._has_regions
#32274
This simplifies some logic in `languagetree.lua`, removing the need for `_has_regions`, and removing side effects in `:included_regions()`. Before: - Edit is made which sets `_regions = nil` - Upon the next call to `included_regions()` (usually right after we marked `_regions` as `nil` due to an `_iter_regions()` call), if `_regions` is nil, we repopulate the table (as long as the tree actually has regions) After: - Edit is made which resets `_regions` if it exists - `included_regions()` no longer needs to perform this logic itself, and also no longer needs to read a `_has_regions` variable
This commit is contained in:
@@ -82,7 +82,6 @@ local TSCallbackNames = {
|
|||||||
---@field private _ranges_being_parsed table<string, boolean>
|
---@field private _ranges_being_parsed table<string, boolean>
|
||||||
---Table of callback queues, keyed by each region for which the callbacks should be run
|
---Table of callback queues, keyed by each region for which the callbacks should be run
|
||||||
---@field private _cb_queues table<string, fun(err?: string, trees?: table<integer, TSTree>)[]>
|
---@field private _cb_queues table<string, fun(err?: string, trees?: table<integer, TSTree>)[]>
|
||||||
---@field private _has_regions boolean
|
|
||||||
---@field private _regions table<integer, Range6[]>?
|
---@field private _regions table<integer, Range6[]>?
|
||||||
---List of regions this tree should manage and parse. If nil then regions are
|
---List of regions this tree should manage and parse. If nil then regions are
|
||||||
---taken from _trees. This is mostly a short-lived cache for included_regions()
|
---taken from _trees. This is mostly a short-lived cache for included_regions()
|
||||||
@@ -132,7 +131,6 @@ function LanguageTree.new(source, lang, opts)
|
|||||||
_opts = opts,
|
_opts = opts,
|
||||||
_injection_query = injections[lang] and query.parse(lang, injections[lang])
|
_injection_query = injections[lang] and query.parse(lang, injections[lang])
|
||||||
or query.get(lang, 'injections'),
|
or query.get(lang, 'injections'),
|
||||||
_has_regions = false,
|
|
||||||
_injections_processed = false,
|
_injections_processed = false,
|
||||||
_valid = false,
|
_valid = false,
|
||||||
_parser = vim._create_ts_parser(lang),
|
_parser = vim._create_ts_parser(lang),
|
||||||
@@ -743,8 +741,6 @@ end
|
|||||||
---@private
|
---@private
|
||||||
---@param new_regions (Range4|Range6|TSNode)[][] List of regions this tree should manage and parse.
|
---@param new_regions (Range4|Range6|TSNode)[][] List of regions this tree should manage and parse.
|
||||||
function LanguageTree:set_included_regions(new_regions)
|
function LanguageTree:set_included_regions(new_regions)
|
||||||
self._has_regions = true
|
|
||||||
|
|
||||||
-- Transform the tables from 4 element long to 6 element long (with byte offset)
|
-- Transform the tables from 4 element long to 6 element long (with byte offset)
|
||||||
for _, region in ipairs(new_regions) do
|
for _, region in ipairs(new_regions) do
|
||||||
for i, range in ipairs(region) do
|
for i, range in ipairs(region) do
|
||||||
@@ -788,18 +784,8 @@ function LanguageTree:included_regions()
|
|||||||
return self._regions
|
return self._regions
|
||||||
end
|
end
|
||||||
|
|
||||||
if not self._has_regions then
|
-- treesitter.c will default empty ranges to { -1, -1, -1, -1, -1, -1} (the full range)
|
||||||
-- treesitter.c will default empty ranges to { -1, -1, -1, -1, -1, -1} (the full range)
|
return { {} }
|
||||||
return { {} }
|
|
||||||
end
|
|
||||||
|
|
||||||
local regions = {} ---@type Range6[][]
|
|
||||||
for i, _ in pairs(self._trees) do
|
|
||||||
regions[i] = self._trees[i]:included_ranges(true)
|
|
||||||
end
|
|
||||||
|
|
||||||
self._regions = regions
|
|
||||||
return regions
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param node TSNode
|
---@param node TSNode
|
||||||
@@ -1050,7 +1036,14 @@ function LanguageTree:_edit(
|
|||||||
end
|
end
|
||||||
|
|
||||||
self._parser:reset()
|
self._parser:reset()
|
||||||
self._regions = nil
|
|
||||||
|
if self._regions then
|
||||||
|
local regions = {} ---@type table<integer, Range6[]>
|
||||||
|
for i, tree in pairs(self._trees) do
|
||||||
|
regions[i] = tree:included_ranges(true)
|
||||||
|
end
|
||||||
|
self._regions = regions
|
||||||
|
end
|
||||||
|
|
||||||
local changed_range = {
|
local changed_range = {
|
||||||
start_row,
|
start_row,
|
||||||
|
Reference in New Issue
Block a user