From 5629898cf24bf25a39723e4113ce87a08f0d9dc1 Mon Sep 17 00:00:00 2001 From: champignoom <66909116+champignoom@users.noreply.github.com> Date: Wed, 31 May 2023 12:59:04 +0800 Subject: [PATCH] fix(concealer): minor fixes, plus wiki error fix (#916) * fix(concealer): fix ternary op order, fix empty line padding, optimize * fix(concealer): lazy compile query to workaround wiki generation issue --- lua/neorg/modules/core/concealer/module.lua | 85 +++++++++++---------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/lua/neorg/modules/core/concealer/module.lua b/lua/neorg/modules/core/concealer/module.lua index 7fd1cb500..89d4bad31 100644 --- a/lua/neorg/modules/core/concealer/module.lua +++ b/lua/neorg/modules/core/concealer/module.lua @@ -553,13 +553,13 @@ module.public = { local len = line_lengths[row_0b - row_start_0b + 1] local mark_col_start_0b = math.max(0, col_start_0b - config.padding.left) local mark_col_end_0bex = max_len + config.padding.right - if len >= col_start_0b then + if len >= mark_col_start_0b then vim.api.nvim_buf_set_extmark(bufid, module.private.ns_icon, row_0b, mark_col_start_0b, { end_row = row_0b + 1, hl_eol = to_eol, hl_group = config.highlight, hl_mode = "blend", - virt_text = to_eol and nil or { { (" "):rep(mark_col_end_0bex - len), config.highlight } }, + virt_text = not to_eol and { { (" "):rep(mark_col_end_0bex - len), config.highlight } } or nil, virt_text_pos = "overlay", virt_text_win_col = len, }) @@ -570,8 +570,8 @@ module.public = { hl_group = config.highlight, hl_mode = "blend", virt_text = { - { (" "):rep(col_start_0b - len) }, - { (" "):rep(mark_col_end_0bex - col_start_0b), config.highlight }, + { (" "):rep(mark_col_start_0b - len) }, + { not to_eol and (" "):rep(mark_col_end_0bex - mark_col_start_0b) or "", config.highlight }, }, virt_text_pos = "overlay", virt_text_win_col = len, @@ -953,6 +953,46 @@ local function get_visible_line_range(winid) return (row_start_1b - 1), row_end_1b end +local function get_parsed_query_lazy() + if module.private.prettify_query then + return module.private.prettify_query + end + + local function traverse_config(config, f) + if config == false then + return + end + if config.nodes then + f(config) + return + end + for _, sub_config in pairs(config) do + traverse_config(sub_config, f) + end + end + + local config_by_node_name = {} + local queries = { "[" } + + traverse_config(module.config.public.icons, function(config) + for _, node_type in ipairs(config.nodes) do + table.insert(queries, ("(%s)@icon"):format(node_type)) + config_by_node_name[node_type] = config + end + for _, node_type in ipairs(config.nodes.concealed or {}) do + table.insert(queries, ("(%s)@icon-concealed"):format(node_type)) + config_by_node_name[node_type] = config + end + end) + + table.insert(queries, "]") + local query_combined = table.concat(queries, " ") + module.private.prettify_query = neorg.utils.ts_parse_query("norg", query_combined) + assert(module.private.prettify_query) + module.private.config_by_node_name = config_by_node_name + return module.private.prettify_query +end + local function prettify_range(bufid, row_start_0b, row_end_0bex) -- in case there's undo/removal garbage -- TODO: optimize @@ -961,8 +1001,9 @@ local function prettify_range(bufid, row_start_0b, row_end_0bex) local treesitter_module = module.required["core.integrations.treesitter"] local document_root = treesitter_module.get_document_root(bufid) assert(document_root) + local nodes, concealed_node_ids = - query_get_nodes(module.private.prettify_query, document_root, bufid, row_start_0b, row_end_0bex) + query_get_nodes(get_parsed_query_lazy(), document_root, bufid, row_start_0b, row_end_0bex) local pos_start_0b_0b = { x = row_start_0b, y = 0 } local pos_end_0bin_0bex = { x = row_end_0bex - 1, y = get_line_length(bufid, row_end_0bex - 1) } @@ -1266,40 +1307,6 @@ module.load = function() end, }) end - - -- compile treesitter query - local function traverse_config(config, f) - if config == false then - return - end - if config.nodes then - f(config) - return - end - for _, sub_config in pairs(config) do - traverse_config(sub_config, f) - end - end - - local config_by_node_name = {} - local queries = { "[" } - - traverse_config(module.config.public.icons, function(config) - for _, node_type in ipairs(config.nodes) do - table.insert(queries, ("(%s)@icon"):format(node_type)) - config_by_node_name[node_type] = config - end - for _, node_type in ipairs(config.nodes.concealed or {}) do - table.insert(queries, ("(%s)@icon-concealed"):format(node_type)) - config_by_node_name[node_type] = config - end - end) - - table.insert(queries, "]") - local query_combined = table.concat(queries, " ") - local prettify_query = neorg.utils.ts_parse_query("norg", query_combined) - module.private.prettify_query = prettify_query - module.private.config_by_node_name = config_by_node_name end -- TODO;