diff --git a/lua/symbols-outline.lua b/lua/symbols-outline.lua index 83d3572..43acff3 100644 --- a/lua/symbols-outline.lua +++ b/lua/symbols-outline.lua @@ -22,12 +22,11 @@ end ------------------------- M.state = { outline_items = {}, - flattened_outline_items = {}, code_win = 0, } local function wipe_state() - M.state = { outline_items = {}, flattened_outline_items = {}, code_win = 0 } + M.state = { outline_items = {}, code_win = 0 } end local function __refresh() @@ -41,9 +40,8 @@ local function __refresh() M.state.code_win = vim.api.nvim_get_current_win() M.state.outline_items = items - M.state.flattened_outline_items = parser.flatten(items) - writer.parse_and_write(M.view.bufnr, M.state.flattened_outline_items) + writer.parse_and_write(M.view.bufnr, M.state.outline_items) end providers.request_symbols(refresh_handler) @@ -54,7 +52,7 @@ M._refresh = utils.debounce(__refresh, 100) local function goto_location(change_focus) local current_line = vim.api.nvim_win_get_cursor(M.view.winnr)[1] - local node = M.state.flattened_outline_items[current_line] + local node = M.state.outline_items[current_line] vim.api.nvim_win_set_cursor( M.state.code_win, { node.line + 1, node.character } @@ -95,7 +93,7 @@ function M._highlight_current_item(winnr) local hovered_line = vim.api.nvim_win_get_cursor(win)[1] - 1 local nodes = {} - for index, value in ipairs(M.state.flattened_outline_items) do + for index, value in ipairs(M.state.outline_items) do if value.line == hovered_line or (hovered_line > value.range_start and hovered_line < value.range_end) @@ -175,9 +173,8 @@ local function handler(response) local items = parser.parse(response) M.state.outline_items = items - M.state.flattened_outline_items = parser.flatten(items) - writer.parse_and_write(M.view.bufnr, M.state.flattened_outline_items) + writer.parse_and_write(M.view.bufnr, M.state.outline_items) M._highlight_current_item(M.state.code_win) end diff --git a/lua/symbols-outline/code_action.lua b/lua/symbols-outline/code_action.lua index 36f8b69..72e7228 100644 --- a/lua/symbols-outline/code_action.lua +++ b/lua/symbols-outline/code_action.lua @@ -20,7 +20,7 @@ end function M.show_code_actions() local current_line = vim.api.nvim_win_get_cursor(main.state.outline_win)[1] - local node = main.state.flattened_outline_items[current_line] + local node = main.state.outline_items[current_line] local params = get_action_params(node, main.state.code_win) vim.lsp.buf_request( diff --git a/lua/symbols-outline/hover.lua b/lua/symbols-outline/hover.lua index 27f2a01..a6e68aa 100644 --- a/lua/symbols-outline/hover.lua +++ b/lua/symbols-outline/hover.lua @@ -17,7 +17,7 @@ end -- handler yoinked from the default implementation function M.show_hover() local current_line = vim.api.nvim_win_get_cursor(so.view.winnr)[1] - local node = so.state.flattened_outline_items[current_line] + local node = so.state.outline_items[current_line] local hover_params = get_hover_params(node, so.state.code_win) diff --git a/lua/symbols-outline/parser.lua b/lua/symbols-outline/parser.lua index 251711e..6470b9c 100644 --- a/lua/symbols-outline/parser.lua +++ b/lua/symbols-outline/parser.lua @@ -24,7 +24,7 @@ local function parse_result(result, depth, hierarchy) -- whether this node is the last in its group local isLast = index == #result - local children = nil + local children = {} if value.children ~= nil then -- copy by value because we dont want it messing with the hir table local child_hir = t_utils.array_copy(hir) @@ -54,11 +54,15 @@ local function parse_result(result, depth, hierarchy) character = selectionRange.start.character, range_start = range.start.line, range_end = range['end'].line, - children = children, + -- children = children, depth = level, isLast = isLast, hierarchy = hir, }) + + for _, node in pairs(children) do + table.insert(ret, node) + end end end return ret @@ -139,25 +143,11 @@ function M.parse(response) return parse_result(sorted, nil, nil) end -function M.flatten(outline_items) - local ret = {} - for _, value in ipairs(outline_items) do - table.insert(ret, value) - if value.children ~= nil then - local inner = M.flatten(value.children) - for _, value_inner in ipairs(inner) do - table.insert(ret, value_inner) - end - end - end - return ret -end - -function M.get_lines(flattened_outline_items) +function M.get_lines(outline_items) local lines = {} local hl_info = {} - for node_line, node in ipairs(flattened_outline_items) do + for node_line, node in ipairs(outline_items) do local line = t_utils.str_to_table(string.rep(' ', node.depth)) local running_length = 1 @@ -224,9 +214,9 @@ function M.get_lines(flattened_outline_items) return lines, hl_info end -function M.get_details(flattened_outline_items) +function M.get_details(outline_items) local lines = {} - for _, value in ipairs(flattened_outline_items) do + for _, value in ipairs(outline_items) do table.insert(lines, value.detail or '') end return lines diff --git a/lua/symbols-outline/preview.lua b/lua/symbols-outline/preview.lua index 95da7ec..8b384dd 100644 --- a/lua/symbols-outline/preview.lua +++ b/lua/symbols-outline/preview.lua @@ -50,7 +50,7 @@ end local function get_hovered_node() local hovered_line = vim.api.nvim_win_get_cursor(main.state.outline_win)[1] - local node = main.state.flattened_outline_items[hovered_line] + local node = main.state.outline_items[hovered_line] return node end diff --git a/lua/symbols-outline/rename.lua b/lua/symbols-outline/rename.lua index b9d413d..1378eee 100644 --- a/lua/symbols-outline/rename.lua +++ b/lua/symbols-outline/rename.lua @@ -15,7 +15,7 @@ end function M.rename() local current_line = vim.api.nvim_win_get_cursor(so.view.winnr)[1] - local node = so.state.flattened_outline_items[current_line] + local node = so.state.outline_items[current_line] local params = get_rename_params(node, so.state.code_win) diff --git a/lua/symbols-outline/writer.lua b/lua/symbols-outline/writer.lua index 69c6fd8..8b16308 100644 --- a/lua/symbols-outline/writer.lua +++ b/lua/symbols-outline/writer.lua @@ -62,12 +62,12 @@ end -- runs the whole writing routine where the text is cleared, new data is parsed -- and then written -function M.parse_and_write(bufnr, flattened_outline_items) - local lines, hl_info = parser.get_lines(flattened_outline_items) +function M.parse_and_write(bufnr, outline_items) + local lines, hl_info = parser.get_lines(outline_items) M.write_outline(bufnr, lines) clear_virt_text(bufnr) - local details = parser.get_details(flattened_outline_items) + local details = parser.get_details(outline_items) M.add_highlights(bufnr, hl_info) M.write_details(bufnr, details) end