From 0cb15e31ab8e8b0b0a16243fd5cc7ca0472a7336 Mon Sep 17 00:00:00 2001 From: Kevin Jeong Date: Mon, 22 May 2023 03:14:43 -0700 Subject: [PATCH] fix(folding): optimize fold/unfold all --- lua/symbols-outline.lua | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lua/symbols-outline.lua b/lua/symbols-outline.lua index 09a5823..a11273f 100644 --- a/lua/symbols-outline.lua +++ b/lua/symbols-outline.lua @@ -145,12 +145,15 @@ function M._set_folded(folded, move_cursor, node_index) end function M._set_all_folded(folded, nodes) - nodes = nodes or M.state.outline_items + local stack = { nodes or M.state.outline_items } - for _, node in ipairs(nodes) do - node.folded = folded - if node.children then - M._set_all_folded(folded, node.children) + while #stack > 0 do + local current_nodes = table.remove(stack, #stack) + for _, node in ipairs(current_nodes) do + node.folded = folded + if node.children then + stack[#stack + 1] = node.children + end end end