mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +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