Skip to content

Commit e523cbf

Browse files
committed
refactor(parser): Got rid of usage of module local variables for parsing
Function local variables will be used instead.
1 parent e281ec2 commit e523cbf

1 file changed

Lines changed: 35 additions & 35 deletions

File tree

lua/helpview/parser.lua

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,8 @@
11
local parser = {};
2-
local health = require("helpview.health");
32

3+
local health = require("helpview.health");
44
parser.vimdoc = require("helpview.parsers.vimdoc");
55

6-
parser.ignore_ranges = {};
7-
8-
parser.create_ignore_range = function (language, items)
9-
local _r = {};
10-
11-
if language == "vimdoc" then
12-
for _, item in ipairs(items["vimdoc_code_block"] or {}) do
13-
table.insert(_r, { item.range.row_start, item.range.row_end })
14-
end
15-
end
16-
17-
parser.ignore_ranges = vim.list_extend(parser.ignore_ranges, _r);
18-
return _r;
19-
end
20-
216
--- Custom `tbl_deep_extend()` that also works on lists.
227
---@param tbl_1 table
238
---@param tbl_2 table
@@ -40,7 +25,6 @@ parser.deep_extend = function (tbl_1, tbl_2)
4025
return tbl_1;
4126
end
4227

43-
parser.should_ignore = function (TSTree)
4428
--- Should a TSTree be ignored.
4529
---@param TSTree TSTree
4630
---@param ignore_ranges [ integer, integer ][]
@@ -57,8 +41,6 @@ parser.should_ignore = function (TSTree, ignore_ranges)
5741
return false;
5842
end
5943

60-
parser.content = {};
61-
parser.sorted = {};
6244
--- Initializes the parsers on the specified buffer.
6345
--- Parsed data is stored as a "view" in renderer.lua
6446
---
@@ -70,18 +52,35 @@ parser.sorted = {};
7052
---@return table
7153
parser.init = function (buffer, from, to)
7254
-- Clear the previous contents
73-
parser.content = {};
74-
parser.sorted = {};
75-
parser.ignore_ranges = {};
55+
56+
local content = {};
57+
local sorted = {};
58+
local ignore_ranges = {};
7659

7760
if
7861
not pcall(vim.treesitter.get_parser, buffer) or
7962
not vim.treesitter.get_parser(buffer)
8063
then
81-
return parser.content, parser.sorted;
64+
return content, sorted;
65+
end
66+
67+
--- Creates a range of lines to ignore.
68+
---@param language string
69+
---@param items table[]
70+
---@return [ integer, integer ][]
71+
local function create_ignore_range (language, items)
72+
local _r = {};
73+
74+
if language == "vimdoc" then
75+
for _, item in ipairs(items["vimdoc_code_block"] or {}) do
76+
table.insert(_r, { item.range.row_start, item.range.row_end })
77+
end
78+
end
79+
80+
ignore_ranges = vim.list_extend(ignore_ranges, _r);
81+
return _r;
8282
end
8383

84-
---+${lua, Announce start of parsing}
8584
---@type integer Start time
8685
---@diagnostic disable-next-line: undefined-field
8786
local start = vim.uv.hrtime();
@@ -91,27 +90,29 @@ parser.init = function (buffer, from, to)
9190
message = string.format("Parsing(start): %d", buffer)
9291
});
9392
health.__child_indent_in();
94-
---_
9593

9694
vim.treesitter.get_parser(buffer):parse(true);
9795
local root_parser = vim.treesitter.get_parser(buffer);
9896

97+
if not root_parser then
98+
return parser.content, parser.parsed;
99+
end
100+
99101
root_parser:for_each_tree(function (TSTree, language_tree)
100102
language_tree:parse(true);
101103

102104
local language = language_tree:lang();
103-
local content, sorted = {}, {};
105+
local _content, _sorted = {}, {};
104106

105-
if parser[language] and not parser.should_ignore(TSTree) then
106-
content, sorted = parser[language].parse(buffer, TSTree, from, to);
107-
parser.create_ignore_range(language, sorted)
107+
if parser[language] and not parser.should_ignore(TSTree, ignore_ranges) then
108+
_content, _sorted = parser[language].parse(buffer, TSTree, from, to);
109+
create_ignore_range(language, _sorted)
108110
end
109111

110-
parser.content[language] = vim.list_extend(parser.content[language] or {}, content);
111-
parser.sorted[language] = parser.deep_extend(parser.sorted[language] or {}, sorted);
112-
end)
112+
content[language] = vim.list_extend(content[language] or {}, _content);
113+
sorted[language] = parser.deep_extend(sorted[language] or {}, _sorted);
114+
end);
113115

114-
---+${lua, Announce end of parsing}
115116
---@type integer End time
116117
---@diagnostic disable-next-line: undefined-field
117118
local now = vim.uv.hrtime();
@@ -121,9 +122,8 @@ parser.init = function (buffer, from, to)
121122
level = 3,
122123
message = string.format("Parsing(end, %dms): %d", (now - start) / 1e6, buffer)
123124
});
124-
---_
125125

126-
return parser.content, parser.sorted;
126+
return content, sorted;
127127
end
128128

129129
parser.parse = parser.init;

0 commit comments

Comments
 (0)