diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2022-03-19 19:51:48 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2022-03-24 20:14:41 +1100 |
commit | 94a53484a183bb32b066dc51fb90948dead634a1 (patch) | |
tree | 51e76a607b68a309c3e7573432392b125a3e2783 | |
parent | 1b75ed37403ac2997cb6a5ede92d87f1a1eb96b1 (diff) |
would you believe that I'm adding even more generics
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | go.sum | 4 | ||||
-rw-r--r-- | pkg/commands/hosting_service/hosting_service.go | 8 | ||||
-rw-r--r-- | pkg/commands/loaders/commits.go | 5 | ||||
-rw-r--r-- | pkg/commands/loaders/remotes.go | 5 | ||||
-rw-r--r-- | pkg/commands/loaders/stash.go | 9 | ||||
-rw-r--r-- | pkg/commands/patch/patch_parser.go | 2 | ||||
-rw-r--r-- | pkg/gui/app_status_manager.go | 11 | ||||
-rw-r--r-- | pkg/gui/context.go | 16 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/cherry_pick_helper.go | 3 | ||||
-rw-r--r-- | pkg/gui/filetree/inode.go | 9 | ||||
-rw-r--r-- | pkg/gui/presentation/graph/graph.go | 15 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/generics/slices/slices.go | 22 | ||||
-rw-r--r-- | vendor/modules.txt | 2 |
14 files changed, 62 insertions, 51 deletions
@@ -14,7 +14,7 @@ require ( github.com/gookit/color v1.4.2 github.com/imdario/mergo v0.3.11 github.com/integrii/flaggy v1.4.0 - github.com/jesseduffield/generics v0.0.0-20220319080325-a60171f800d5 + github.com/jesseduffield/generics v0.0.0-20220319083513-5f145a9c0677 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 github.com/jesseduffield/gocui v0.3.1-0.20220227022729-69f0c798eec8 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e @@ -66,8 +66,8 @@ github.com/integrii/flaggy v1.4.0 h1:A1x7SYx4jqu5NSrY14z8Z+0UyX2S5ygfJJrfolWR3zM github.com/integrii/flaggy v1.4.0/go.mod h1:tnTxHeTJbah0gQ6/K0RW0J7fMUBk9MCF5blhm43LNpI= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jesseduffield/generics v0.0.0-20220319080325-a60171f800d5 h1:mZf9Ezkd4Thuw2tj5naFeoUbHkbNiD38LQFokUGSbtQ= -github.com/jesseduffield/generics v0.0.0-20220319080325-a60171f800d5/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk= +github.com/jesseduffield/generics v0.0.0-20220319083513-5f145a9c0677 h1:GoP06WWOE4AvTkAavXkF40nhYsg2hI09uVLDIuxzZYI= +github.com/jesseduffield/generics v0.0.0-20220319083513-5f145a9c0677/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk= github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 h1:GOQrmaE8i+KEdB8NzAegKYd4tPn/inM0I1uo0NXFerg= github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o= github.com/jesseduffield/gocui v0.3.1-0.20220227022729-69f0c798eec8 h1:9N08i5kjvOfkzMj6THmIM110wPTQLdVYEOHMHT2DFiI= diff --git a/pkg/commands/hosting_service/hosting_service.go b/pkg/commands/hosting_service/hosting_service.go index 15fc244ba..091da3ebb 100644 --- a/pkg/commands/hosting_service/hosting_service.go +++ b/pkg/commands/hosting_service/hosting_service.go @@ -111,10 +111,10 @@ func (self *HostingServiceMgr) getCandidateServiceDomains() []ServiceDomain { serviceDefinition, ok := serviceDefinitionByProvider[provider] if !ok { - providerNames := []string{} - for _, serviceDefinition := range serviceDefinitions { - providerNames = append(providerNames, serviceDefinition.provider) - } + providerNames := slices.Map(serviceDefinitions, func(serviceDefinition ServiceDefinition) string { + return serviceDefinition.provider + }) + self.log.Errorf("Unknown git service type: '%s'. Expected one of %s", provider, strings.Join(providerNames, ", ")) continue } diff --git a/pkg/commands/loaders/commits.go b/pkg/commands/loaders/commits.go index 20721be42..c370cc059 100644 --- a/pkg/commands/loaders/commits.go +++ b/pkg/commands/loaders/commits.go @@ -307,6 +307,7 @@ func (self *CommitLoader) getInteractiveRebasingCommits() ([]*models.Commit, err commits := []*models.Commit{} lines := strings.Split(string(bytesContent), "\n") + for _, line := range lines { if line == "" || line == "noop" { return commits, nil @@ -315,12 +316,12 @@ func (self *CommitLoader) getInteractiveRebasingCommits() ([]*models.Commit, err continue } splitLine := strings.Split(line, " ") - commits = append([]*models.Commit{{ + commits = slices.Prepend(commits, &models.Commit{ Sha: splitLine[1], Name: strings.Join(splitLine[2:], " "), Status: "rebasing", Action: splitLine[0], - }}, commits...) + }) } return commits, nil diff --git a/pkg/commands/loaders/remotes.go b/pkg/commands/loaders/remotes.go index 3cd57d9a2..1323560f5 100644 --- a/pkg/commands/loaders/remotes.go +++ b/pkg/commands/loaders/remotes.go @@ -10,7 +10,6 @@ import ( "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/common" - "github.com/samber/lo" ) type RemoteLoader struct { @@ -43,12 +42,12 @@ func (self *RemoteLoader) GetRemotes() ([]*models.Remote, error) { } // first step is to get our remotes from go-git - remotes := lo.Map(goGitRemotes, func(goGitRemote *gogit.Remote, _ int) *models.Remote { + remotes := slices.Map(goGitRemotes, func(goGitRemote *gogit.Remote) *models.Remote { remoteName := goGitRemote.Config().Name re := regexp.MustCompile(fmt.Sprintf(`(?m)^\s*%s\/([\S]+)`, remoteName)) matches := re.FindAllStringSubmatch(remoteBranchesStr, -1) - branches := lo.Map(matches, func(match []string, _ int) *models.RemoteBranch { + branches := slices.Map(matches, func(match []string) *models.RemoteBranch { return &models.RemoteBranch{ Name: match[1], RemoteName: remoteName, diff --git a/pkg/commands/loaders/stash.go b/pkg/commands/loaders/stash.go index 689bf30ce..66cfeaa3e 100644 --- a/pkg/commands/loaders/stash.go +++ b/pkg/commands/loaders/stash.go @@ -5,6 +5,7 @@ import ( "strconv" "strings" + "github.com/jesseduffield/generics/slices" "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/common" @@ -65,11 +66,9 @@ outer: func (self *StashLoader) getUnfilteredStashEntries() []*models.StashEntry { rawString, _ := self.cmd.New("git stash list --pretty='%gs'").DontLog().RunWithOutput() - stashEntries := []*models.StashEntry{} - for i, line := range utils.SplitLines(rawString) { - stashEntries = append(stashEntries, self.stashEntryFromLine(line, i)) - } - return stashEntries + return slices.MapWithIndex(utils.SplitLines(rawString), func(line string, index int) *models.StashEntry { + return self.stashEntryFromLine(line, index) + }) } func (c *StashLoader) stashEntryFromLine(line string, index int) *models.StashEntry { diff --git a/pkg/commands/patch/patch_parser.go b/pkg/commands/patch/patch_parser.go index 097f01329..fa730afe7 100644 --- a/pkg/commands/patch/patch_parser.go +++ b/pkg/commands/patch/patch_parser.go @@ -191,7 +191,7 @@ func (p *PatchParser) Render(firstLineIndex int, lastLineIndex int, incLineIndic return "" } - renderedLines := lo.Map(p.PatchLines, func(patchLine *PatchLine, index int) string { + renderedLines := slices.MapWithIndex(p.PatchLines, func(patchLine *PatchLine, index int) string { selected := index >= firstLineIndex && index <= lastLineIndex included := lo.Contains(incLineIndices, index) return patchLine.render(selected, included) diff --git a/pkg/gui/app_status_manager.go b/pkg/gui/app_status_manager.go index 4c32f79b5..34c97a5f4 100644 --- a/pkg/gui/app_status_manager.go +++ b/pkg/gui/app_status_manager.go @@ -4,6 +4,7 @@ import ( "sync" "time" + "github.com/jesseduffield/generics/slices" "github.com/jesseduffield/lazygit/pkg/utils" ) @@ -23,13 +24,9 @@ func (m *statusManager) removeStatus(id int) { m.mutex.Lock() defer m.mutex.Unlock() - newStatuses := []appStatus{} - for _, status := range m.statuses { - if status.id != id { - newStatuses = append(newStatuses, status) - } - } - m.statuses = newStatuses + m.statuses = slices.Filter(m.statuses, func(status appStatus) bool { + return status.id != id + }) } func (m *statusManager) addWaitingStatus(message string) int { diff --git a/pkg/gui/context.go b/pkg/gui/context.go index 2c30218bc..13b55e342 100644 --- a/pkg/gui/context.go +++ b/pkg/gui/context.go @@ -14,14 +14,14 @@ import ( ) func (gui *Gui) popupViewNames() []string { - result := []string{} - for _, context := range gui.State.Contexts.Flatten() { - if context.GetKind() == types.PERSISTENT_POPUP || context.GetKind() == types.TEMPORARY_POPUP { - result = append(result, context.GetViewName()) - } - } - - return result + return slices.FilterThenMap(gui.State.Contexts.Flatten(), + func(c types.Context) bool { + return c.GetKind() == types.PERSISTENT_POPUP || c.GetKind() == types.TEMPORARY_POPUP + }, + func(c types.Context) string { + return c.GetViewName() + }, + ) } func (gui *Gui) currentContextKeyIgnoringPopups() types.ContextKey { diff --git a/pkg/gui/controllers/helpers/cherry_pick_helper.go b/pkg/gui/controllers/helpers/cherry_pick_helper.go index c433655d0..9117f24f6 100644 --- a/pkg/gui/controllers/helpers/cherry_pick_helper.go +++ b/pkg/gui/controllers/helpers/cherry_pick_helper.go @@ -8,7 +8,6 @@ import ( "github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/modes/cherrypicking" "github.com/jesseduffield/lazygit/pkg/gui/types" - "github.com/samber/lo" ) type CherryPickHelper struct { @@ -109,7 +108,7 @@ func (self *CherryPickHelper) Reset() error { } func (self *CherryPickHelper) CherryPickedCommitShaSet() *set.Set[string] { - shas := lo.Map(self.getData().CherryPickedCommits, func(commit *models.Commit, _ int) string { + shas := slices.Map(self.getData().CherryPickedCommits, func(commit *models.Commit) string { return commit.Sha }) return set.NewFromSlice(shas) diff --git a/pkg/gui/filetree/inode.go b/pkg/gui/filetree/inode.go index 48cdc3be3..d59315b28 100644 --- a/pkg/gui/filetree/inode.go +++ b/pkg/gui/filetree/inode.go @@ -200,10 +200,7 @@ func getLeaves(node INode) []INode { return []INode{node} } - output := []INode{} - for _, child := range node.GetChildren() { - output = append(output, getLeaves(child)...) - } - - return output + return slices.FlatMap(node.GetChildren(), func(child INode) []INode { + return getLeaves(child) + }) } diff --git a/pkg/gui/presentation/graph/graph.go b/pkg/gui/presentation/graph/graph.go index de90d3e7a..392af8984 100644 --- a/pkg/gui/presentation/graph/graph.go +++ b/pkg/gui/presentation/graph/graph.go @@ -67,13 +67,10 @@ func GetPipeSets(commits []*models.Commit, getStyle func(c *models.Commit) style pipes := []*Pipe{{fromPos: 0, toPos: 0, fromSha: "START", toSha: commits[0].Sha, kind: STARTS, style: style.FgDefault}} - pipeSets := [][]*Pipe{} - for _, commit := range commits { + return slices.Map(commits, func(commit *models.Commit) []*Pipe { pipes = getNextPipes(pipes, commit, getStyle) - pipeSets = append(pipeSets, pipes) - } - - return pipeSets + return pipes + }) } func RenderAux(pipeSets [][]*Pipe, commits []*models.Commit, selectedCommitSha string) []string { @@ -115,9 +112,9 @@ func RenderAux(pipeSets [][]*Pipe, commits []*models.Commit, selectedCommitSha s } func getNextPipes(prevPipes []*Pipe, commit *models.Commit, getStyle func(c *models.Commit) style.TextStyle) []*Pipe { - maxPos := lo.Max( - slices.Map(prevPipes, func(pipe *Pipe) int { return pipe.toPos }), - ) + maxPos := slices.MaxBy(prevPipes, func(pipe *Pipe) int { + return pipe.toPos + }) // a pipe that terminated in the previous line has no bearing on the current line // so we'll filter those out diff --git a/vendor/github.com/jesseduffield/generics/slices/slices.go b/vendor/github.com/jesseduffield/generics/slices/slices.go index ec5653ddc..1d224255a 100644 --- a/vendor/github.com/jesseduffield/generics/slices/slices.go +++ b/vendor/github.com/jesseduffield/generics/slices/slices.go @@ -38,6 +38,16 @@ func Map[T any, V any](slice []T, f func(T) V) []V { } // Produces a new slice, leaves the input slice untouched. +func MapWithIndex[T any, V any](slice []T, f func(T, int) V) []V { + result := make([]V, 0, len(slice)) + for i, value := range slice { + result = append(result, f(value, i)) + } + + return result +} + +// Produces a new slice, leaves the input slice untouched. func FlatMap[T any, V any](slice []T, f func(T) []V) []V { // impossible to know how long this slice will be in the end but the length // of the original slice is the lower bound @@ -74,6 +84,18 @@ func Filter[T any](slice []T, test func(T) bool) []T { return result } +// Produces a new slice, leaves the input slice untouched. +func FilterWithIndex[T any](slice []T, f func(T, int) bool) []T { + result := make([]T, 0, len(slice)) + for i, value := range slice { + if f(value, i) { + result = append(result, value) + } + } + + return result +} + // Mutates original slice. Intended usage is to reassign the slice result to the input slice. func FilterInPlace[T any](slice []T, test func(T) bool) []T { newLength := 0 diff --git a/vendor/modules.txt b/vendor/modules.txt index 332871ffe..a7b196cea 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -120,7 +120,7 @@ github.com/integrii/flaggy # github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 ## explicit github.com/jbenet/go-context/io -# github.com/jesseduffield/generics v0.0.0-20220319080325-a60171f800d5 +# github.com/jesseduffield/generics v0.0.0-20220319083513-5f145a9c0677 ## explicit; go 1.18 github.com/jesseduffield/generics/maps github.com/jesseduffield/generics/set |