From 9b1078a2ca827ab415318d2a395a50b273e08fc1 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 7 Aug 2026 23:11:26 +0200 Subject: [PATCH] Make StringStack generic Co-Authored-By: Claude Opus 5 (1M context) --- pkg/gui/gui.go | 6 +++--- pkg/gui/types/common.go | 2 +- pkg/utils/stack.go | 28 ++++++++++++++++++++++++++++ pkg/utils/string_stack.go | 27 --------------------------- 4 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 pkg/utils/stack.go delete mode 100644 pkg/utils/string_stack.go diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index b92c1733e..a463a435b 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -96,7 +96,7 @@ type Gui struct { // when you enter into a submodule we'll append the superproject's path to this array // so that you can return to the superproject - RepoPathStack *utils.StringStack + RepoPathStack *utils.Stack[string] // this tells us whether our views have been initially set up ViewsSetup bool @@ -158,7 +158,7 @@ type StateAccessor struct { var _ types.IStateAccessor = new(StateAccessor) -func (self *StateAccessor) GetRepoPathStack() *utils.StringStack { +func (self *StateAccessor) GetRepoPathStack() *utils.Stack[string] { return self.gui.RepoPathStack } @@ -799,7 +799,7 @@ func NewGui( viewBufferManagerMap: map[string]*tasks.ViewBufferManager{}, viewPtmxMap: map[string]oscommands.Pty{}, showRecentRepos: showRecentRepos, - RepoPathStack: &utils.StringStack{}, + RepoPathStack: &utils.Stack[string]{}, RepoStateMap: map[Repo]*GuiRepoState{}, GuiLog: []string{}, diff --git a/pkg/gui/types/common.go b/pkg/gui/types/common.go index b2b924bc0..169b5278e 100644 --- a/pkg/gui/types/common.go +++ b/pkg/gui/types/common.go @@ -404,7 +404,7 @@ type HasUrn interface { } type IStateAccessor interface { - GetRepoPathStack() *utils.StringStack + GetRepoPathStack() *utils.Stack[string] GetRepoState() IRepoStateAccessor GetDiffRendererConfigManager() *config.DiffRendererConfigManager // tells us whether we're currently updating lazygit diff --git a/pkg/utils/stack.go b/pkg/utils/stack.go new file mode 100644 index 000000000..9cac1f563 --- /dev/null +++ b/pkg/utils/stack.go @@ -0,0 +1,28 @@ +package utils + +type Stack[T any] struct { + stack []T +} + +func (self *Stack[T]) Push(item T) { + self.stack = append(self.stack, item) +} + +func (self *Stack[T]) Pop() T { + if len(self.stack) == 0 { + var zero T + return zero + } + n := len(self.stack) - 1 + last := self.stack[n] + self.stack = self.stack[:n] + return last +} + +func (self *Stack[T]) IsEmpty() bool { + return len(self.stack) == 0 +} + +func (self *Stack[T]) Clear() { + self.stack = nil +} diff --git a/pkg/utils/string_stack.go b/pkg/utils/string_stack.go deleted file mode 100644 index c2d18c70c..000000000 --- a/pkg/utils/string_stack.go +++ /dev/null @@ -1,27 +0,0 @@ -package utils - -type StringStack struct { - stack []string -} - -func (self *StringStack) Push(s string) { - self.stack = append(self.stack, s) -} - -func (self *StringStack) Pop() string { - if len(self.stack) == 0 { - return "" - } - n := len(self.stack) - 1 - last := self.stack[n] - self.stack = self.stack[:n] - return last -} - -func (self *StringStack) IsEmpty() bool { - return len(self.stack) == 0 -} - -func (self *StringStack) Clear() { - self.stack = []string{} -}