summaryrefslogtreecommitdiff
path: root/lua/clever_f
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 13:34:33 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 13:34:33 +0200
commitd4298233fe294e34c011be7caf318a5fe7046a26 (patch)
treeb94ab390e11da8e2fc1d39c4fceb0d3ef713c5fd /lua/clever_f
parent30f6f516dd8970162d82594934be591cb2c4047f (diff)
Open policy-selected folds
Diffstat (limited to 'lua/clever_f')
-rw-r--r--lua/clever_f/sequence_coordinator.lua34
1 files changed, 34 insertions, 0 deletions
diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua
index bcff504..d1316e6 100644
--- a/lua/clever_f/sequence_coordinator.lua
+++ b/lua/clever_f/sequence_coordinator.lua
@@ -90,10 +90,44 @@ function SequenceCoordinator:inspect_fold_open_policy(invocation)
return fold_state
end
+local function fold_open_enabled(fold_state)
+ return fold_state:opens("horizontal") or fold_state:opens("all")
+end
+
+function SequenceCoordinator:open_enclosing_folds(invocation, fold_state)
+ if type(invocation) ~= "table" or not domain.Position.is(invocation.position) then
+ fail("fold opening requires primary invocation state", 2)
+ end
+ if not domain.FoldState.is(fold_state) then
+ fail("fold opening requires FoldState", 2)
+ end
+ if not fold_open_enabled(fold_state) then
+ return 0
+ end
+
+ local host = coordinator_records[self].host
+ if type(host.open_fold) ~= "function" then
+ fail("SequenceCoordinator host must open folds", 2)
+ end
+ local opened = 0
+ while fold_state.closed_levels > 0 do
+ if host:open_fold(invocation.position) ~= true then
+ break
+ end
+ opened = opened + 1
+ fold_state = self:inspect_fold_open_policy(invocation)
+ end
+ return opened
+end
+
function SequenceCoordinator:primary(value)
local descriptor = self:validate_primary_descriptor(value)
local invocation = self:read_primary_invocation()
invocation.fold_state = self:inspect_fold_open_policy(invocation)
+ invocation.opened_folds = self:open_enclosing_folds(
+ invocation,
+ invocation.fold_state
+ )
return descriptor
end