From 682db77401e5c44de1eeeb179afd0114bfe82f72 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Mon, 16 Nov 2020 20:38:26 +1100 Subject: [PATCH] fix lint errors --- pkg/commands/loading_commits.go | 4 +-- pkg/commands/loading_stash.go | 4 +-- pkg/commands/oscommands/os.go | 5 ++-- pkg/commands/patch_rebases.go | 4 +-- pkg/commands/status.go | 17 +++++++---- pkg/gui/boxlayout/boxlayout_test.go | 1 + pkg/gui/branches_panel.go | 4 +-- pkg/gui/commits_panel.go | 13 -------- pkg/gui/confirmation_panel.go | 4 +-- pkg/gui/context.go | 42 +++++++++++++------------- pkg/gui/credentials_panel.go | 9 +++--- pkg/gui/discard_changes_menu_panel.go | 13 +------- pkg/gui/file_watching.go | 17 +---------- pkg/gui/files_panel.go | 28 +++++++---------- pkg/gui/filtering.go | 8 ++--- pkg/gui/global_handlers.go | 4 +-- pkg/gui/gui.go | 3 ++ pkg/gui/layout.go | 39 ++++++++++-------------- pkg/gui/list_context.go | 2 +- pkg/gui/main_panels.go | 19 +++++------- pkg/gui/merge_panel.go | 29 ++++++++---------- pkg/gui/patch_options_panel.go | 5 ++-- pkg/gui/rebase_options_panel.go | 10 ++++--- pkg/gui/staging_panel.go | 6 ++-- pkg/gui/status_panel.go | 13 ++++---- pkg/gui/undoing.go | 5 ++-- pkg/gui/view_helpers.go | 43 +++++++++++++-------------- pkg/i18n/i18n_test.go | 8 ----- 28 files changed, 151 insertions(+), 208 deletions(-) diff --git a/pkg/commands/loading_commits.go b/pkg/commands/loading_commits.go index 33954b23e..bb25f4c62 100644 --- a/pkg/commands/loading_commits.go +++ b/pkg/commands/loading_commits.go @@ -185,9 +185,9 @@ func (c *CommitListBuilder) GetCommits(opts GetCommitsOptions) ([]*models.Commit // getRebasingCommits obtains the commits that we're in the process of rebasing func (c *CommitListBuilder) getRebasingCommits(rebaseMode string) ([]*models.Commit, error) { switch rebaseMode { - case "normal": + case REBASE_MODE_MERGING: return c.getNormalRebasingCommits() - case "interactive": + case REBASE_MODE_INTERACTIVE: return c.getInteractiveRebasingCommits() default: return nil, nil diff --git a/pkg/commands/loading_stash.go b/pkg/commands/loading_stash.go index 3b79bdfb4..8d0b4a817 100644 --- a/pkg/commands/loading_stash.go +++ b/pkg/commands/loading_stash.go @@ -1,7 +1,6 @@ package commands import ( - "fmt" "regexp" "strconv" "strings" @@ -26,8 +25,7 @@ func (c *GitCommand) GetStashEntries(filterPath string) []*models.StashEntry { return c.getUnfilteredStashEntries() } - unescaped := fmt.Sprintf("git stash list --name-only") - rawString, err := c.OSCommand.RunCommandWithOutput(unescaped) + rawString, err := c.OSCommand.RunCommandWithOutput("git stash list --name-only") if err != nil { return c.getUnfilteredStashEntries() } diff --git a/pkg/commands/oscommands/os.go b/pkg/commands/oscommands/os.go index 6a40d519c..da9fb311f 100644 --- a/pkg/commands/oscommands/os.go +++ b/pkg/commands/oscommands/os.go @@ -471,12 +471,13 @@ func RunLineOutputCmd(cmd *exec.Cmd, onLine func(line string) (bool, error)) err return err } if stop { - cmd.Process.Kill() + _ = cmd.Process.Kill() break } } - cmd.Wait() + _ = cmd.Wait() + return nil } diff --git a/pkg/commands/patch_rebases.go b/pkg/commands/patch_rebases.go index 42e03f1e9..2c3b5b1d3 100644 --- a/pkg/commands/patch_rebases.go +++ b/pkg/commands/patch_rebases.go @@ -149,7 +149,7 @@ func (c *GitCommand) PullPatchIntoIndex(commits []*models.Commit, commitIdx int, } if err := p.ApplyPatches(true); err != nil { - if c.WorkingTreeState() == "rebasing" { + if c.WorkingTreeState() == REBASE_MODE_REBASING { if err := c.GenericMergeOrRebaseAction("rebase", "abort"); err != nil { return err } @@ -169,7 +169,7 @@ func (c *GitCommand) PullPatchIntoIndex(commits []*models.Commit, commitIdx int, c.onSuccessfulContinue = func() error { // add patches to index if err := p.ApplyPatches(false); err != nil { - if c.WorkingTreeState() == "rebasing" { + if c.WorkingTreeState() == REBASE_MODE_REBASING { if err := c.GenericMergeOrRebaseAction("rebase", "abort"); err != nil { return err } diff --git a/pkg/commands/status.go b/pkg/commands/status.go index c5a6c2526..c11fe829f 100644 --- a/pkg/commands/status.go +++ b/pkg/commands/status.go @@ -6,6 +6,13 @@ import ( gogit "github.com/jesseduffield/go-git/v5" ) +const ( + REBASE_MODE_NORMAL = "normal" + REBASE_MODE_INTERACTIVE = "interactive" + REBASE_MODE_REBASING = "rebasing" + REBASE_MODE_MERGING = "merging" +) + // RebaseMode returns "" for non-rebase mode, "normal" for normal rebase // and "interactive" for interactive rebase func (c *GitCommand) RebaseMode() (string, error) { @@ -14,11 +21,11 @@ func (c *GitCommand) RebaseMode() (string, error) { return "", err } if exists { - return "normal", nil + return REBASE_MODE_NORMAL, nil } exists, err = c.OSCommand.FileExists(filepath.Join(c.DotGitDir, "rebase-merge")) if exists { - return "interactive", err + return REBASE_MODE_INTERACTIVE, err } else { return "", err } @@ -27,13 +34,13 @@ func (c *GitCommand) RebaseMode() (string, error) { func (c *GitCommand) WorkingTreeState() string { rebaseMode, _ := c.RebaseMode() if rebaseMode != "" { - return "rebasing" + return REBASE_MODE_REBASING } merging, _ := c.IsInMergeState() if merging { - return "merging" + return REBASE_MODE_MERGING } - return "normal" + return REBASE_MODE_NORMAL } // IsInMergeState states whether we are still mid-merge diff --git a/pkg/gui/boxlayout/boxlayout_test.go b/pkg/gui/boxlayout/boxlayout_test.go index d339f828f..9a50ff9d2 100644 --- a/pkg/gui/boxlayout/boxlayout_test.go +++ b/pkg/gui/boxlayout/boxlayout_test.go @@ -182,6 +182,7 @@ func TestArrangeWindows(t *testing.T) { } for _, s := range scenarios { + s := s t.Run(s.testName, func(t *testing.T) { s.test(ArrangeWindows(s.root, s.x0, s.y0, s.width, s.height)) }) diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go index bb53cbb4c..29b70928b 100644 --- a/pkg/gui/branches_panel.go +++ b/pkg/gui/branches_panel.go @@ -100,7 +100,7 @@ func (gui *Gui) handleCreatePullRequestPress(g *gocui.Gui, v *gocui.View) error } func (gui *Gui) handleGitFetch(g *gocui.Gui, v *gocui.View) error { - if err := gui.createLoaderPanel(v, gui.Tr.FetchWait); err != nil { + if err := gui.createLoaderPanel(gui.Tr.FetchWait); err != nil { return err } go utils.Safe(func() { @@ -386,7 +386,7 @@ func (gui *Gui) handleFastForward(g *gocui.Gui, v *gocui.View) error { }, ) go utils.Safe(func() { - _ = gui.createLoaderPanel(v, message) + _ = gui.createLoaderPanel(message) if gui.State.Panels.Branches.SelectedLineIdx == 0 { _ = gui.pullWithMode("ff-only", PullFilesOptions{}) diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go index 36fa7bd44..92c3c9380 100644 --- a/pkg/gui/commits_panel.go +++ b/pkg/gui/commits_panel.go @@ -445,19 +445,6 @@ func (gui *Gui) handleViewCommitFiles() error { return gui.switchToCommitFilesContext(commit.Sha, true, gui.Contexts.BranchCommits.Context, "commits") } -func (gui *Gui) hasCommit(commits []*models.Commit, target string) (int, bool) { - for idx, commit := range commits { - if commit.Sha == target { - return idx, true - } - } - return -1, false -} - -func (gui *Gui) unchooseCommit(commits []*models.Commit, i int) []*models.Commit { - return append(commits[:i], commits[i+1:]...) -} - func (gui *Gui) handleCreateFixupCommit(g *gocui.Gui, v *gocui.View) error { if ok, err := gui.validateNotInFilterMode(); err != nil || !ok { return err diff --git a/pkg/gui/confirmation_panel.go b/pkg/gui/confirmation_panel.go index ee1b1bab7..fbea691ad 100644 --- a/pkg/gui/confirmation_panel.go +++ b/pkg/gui/confirmation_panel.go @@ -37,7 +37,7 @@ type askOpts struct { handlersManageFocus bool } -func (gui *Gui) createLoaderPanel(currentView *gocui.View, prompt string) error { +func (gui *Gui) createLoaderPanel(prompt string) error { return gui.createPopupPanel(createPopupPanelOpts{ prompt: prompt, hasLoader: true, @@ -160,7 +160,7 @@ func (gui *Gui) prepareConfirmationPanel(title, prompt string, hasLoader bool) ( x0, y0, x1, y1 := gui.getConfirmationPanelDimensions(true, prompt) confirmationView, err := gui.g.SetView("confirmation", x0, y0, x1, y1, 0) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return nil, err } confirmationView.HasLoader = hasLoader diff --git a/pkg/gui/context.go b/pkg/gui/context.go index 063de50f9..3784bb1d5 100644 --- a/pkg/gui/context.go +++ b/pkg/gui/context.go @@ -280,9 +280,7 @@ func (gui *Gui) contextTree() ContextTree { }, Merging: SimpleContextNode{ Context: BasicContext{ - OnFocus: func() error { - return gui.refreshMergePanel() - }, + OnFocus: gui.refreshMergePanel, Kind: MAIN_CONTEXT, ViewName: "main", Key: MAIN_MERGING_CONTEXT_KEY, @@ -291,7 +289,7 @@ func (gui *Gui) contextTree() ContextTree { }, Credentials: SimpleContextNode{ Context: BasicContext{ - OnFocus: func() error { return gui.handleCredentialsViewFocused() }, + OnFocus: gui.handleCredentialsViewFocused, Kind: PERSISTENT_POPUP, ViewName: "credentials", Key: CREDENTIALS_CONTEXT_KEY, @@ -307,7 +305,7 @@ func (gui *Gui) contextTree() ContextTree { }, CommitMessage: SimpleContextNode{ Context: BasicContext{ - OnFocus: func() error { return gui.handleCommitMessageFocused() }, + OnFocus: gui.handleCommitMessageFocused, Kind: PERSISTENT_POPUP, ViewName: "commitMessage", Key: COMMIT_MESSAGE_CONTEXT_KEY, @@ -513,7 +511,7 @@ func (gui *Gui) activateContext(c Context) error { if viewName == "main" { gui.changeMainViewsContext(c.GetKey()) } else { - gui.changeMainViewsContext("normal") + gui.changeMainViewsContext(MAIN_NORMAL_CONTEXT_KEY) } gui.setViewTabForContext(c) @@ -556,13 +554,14 @@ func (gui *Gui) activateContext(c Context) error { return nil } -func (gui *Gui) renderContextStack() string { - result := "" - for _, context := range gui.State.ContextStack { - result += context.GetKey() + "\n" - } - return result -} +// currently unused +// func (gui *Gui) renderContextStack() string { +// result := "" +// for _, context := range gui.State.ContextStack { +// result += context.GetKey() + "\n" +// } +// return result +// } func (gui *Gui) currentContext() Context { if len(gui.State.ContextStack) == 0 { @@ -755,16 +754,17 @@ func (gui *Gui) rerenderView(viewName string) error { return context.HandleRender() } -func (gui *Gui) getCurrentSideView() *gocui.View { - currentSideContext := gui.currentSideContext() - if currentSideContext == nil { - return nil - } +// currently unused +// func (gui *Gui) getCurrentSideView() *gocui.View { +// currentSideContext := gui.currentSideContext() +// if currentSideContext == nil { +// return nil +// } - view, _ := gui.g.View(currentSideContext.GetViewName()) +// view, _ := gui.g.View(currentSideContext.GetViewName()) - return view -} +// return view +// } func (gui *Gui) getSideContextSelectedItemId() string { currentSideContext := gui.currentSideContext() diff --git a/pkg/gui/credentials_panel.go b/pkg/gui/credentials_panel.go index 4f24f9844..53166aa76 100644 --- a/pkg/gui/credentials_panel.go +++ b/pkg/gui/credentials_panel.go @@ -14,13 +14,14 @@ func (gui *Gui) promptUserForCredential(passOrUname string) string { gui.credentials = make(chan string) gui.g.Update(func(g *gocui.Gui) error { credentialsView, _ := g.View("credentials") - if passOrUname == "username" { + switch passOrUname { + case "username": credentialsView.Title = gui.Tr.CredentialsUsername credentialsView.Mask = 0 - } else if passOrUname == "password" { + case "password": credentialsView.Title = gui.Tr.CredentialsPassword credentialsView.Mask = '*' - } else { + default: credentialsView.Title = gui.Tr.CredentialsPassphrase credentialsView.Mask = '*' } @@ -77,7 +78,7 @@ func (gui *Gui) handleCredentialsPopup(cmdErr error) { errMessage = gui.Tr.PassUnameWrong } // we are not logging this error because it may contain a password or a passphrase - gui.createErrorPanel(errMessage) + _ = gui.createErrorPanel(errMessage) } else { _ = gui.closeConfirmationPrompt(false) } diff --git a/pkg/gui/discard_changes_menu_panel.go b/pkg/gui/discard_changes_menu_panel.go index 1c1a8c4d4..f81297479 100644 --- a/pkg/gui/discard_changes_menu_panel.go +++ b/pkg/gui/discard_changes_menu_panel.go @@ -2,19 +2,8 @@ package gui import ( "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazygit/pkg/commands/models" ) -func (gui *Gui) submoduleFromFile(file *models.File) *models.SubmoduleConfig { - for _, config := range gui.State.Submodules { - if config.Name == file.Name { - return config - } - } - - return nil -} - func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error { file := gui.getSelectedFile() if file == nil { @@ -31,7 +20,7 @@ func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error { { displayString: gui.Tr.LcSubmoduleStashAndReset, onPress: func() error { - return gui.resetSubmodule(submodule) + return gui.handleResetSubmodule(submodule) }, }, } diff --git a/pkg/gui/file_watching.go b/pkg/gui/file_watching.go index 41f1ff837..f7617e559 100644 --- a/pkg/gui/file_watching.go +++ b/pkg/gui/file_watching.go @@ -28,21 +28,6 @@ func NewFileWatcher(log *logrus.Entry) *fileWatcher { return &fileWatcher{ Disabled: true, } - - watcher, err := fsnotify.NewWatcher() - - if err != nil { - log.Error(err) - return &fileWatcher{ - Disabled: true, - } - } - - return &fileWatcher{ - Watcher: watcher, - Log: log, - WatchedFilenames: make([]string, 0, MAX_WATCHED_FILES), - } } func (w *fileWatcher) watchingFilename(filename string) bool { @@ -132,7 +117,7 @@ func (gui *Gui) watchFilesForChanges() { } // only refresh if we're not already if !gui.State.IsRefreshingFiles { - gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) + _ = gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) } // watch for errors diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index f9423eb01..7d2b074ca 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -152,7 +152,7 @@ func (gui *Gui) trackedFiles() []*models.File { return result } -func (gui *Gui) stageSelectedFile(g *gocui.Gui) error { +func (gui *Gui) stageSelectedFile() error { file := gui.getSelectedFile() if file == nil { return nil @@ -183,7 +183,7 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error if file.HasMergeConflicts { return gui.createErrorPanel(gui.Tr.FileStagingRequirements) } - gui.switchContext(gui.Contexts.Staging.Context) + _ = gui.switchContext(gui.Contexts.Staging.Context) return gui.handleRefreshStagingPanel(forceSecondaryFocused, selectedLineIdx) // TODO: check if this is broken, try moving into context code } @@ -284,7 +284,7 @@ func (gui *Gui) handleWIPCommitPress(g *gocui.Gui, filesView *gocui.View) error return gui.createErrorPanel(gui.Tr.SkipHookPrefixNotConfigured) } - gui.renderStringSync("commitMessage", skipHookPreifx) + _ = gui.renderStringSync("commitMessage", skipHookPreifx) if err := gui.getCommitMessageView().SetCursor(len(skipHookPreifx), 0); err != nil { return err } @@ -303,9 +303,7 @@ func (gui *Gui) commitPrefixConfigForRepo() *config.CommitPrefixConfig { func (gui *Gui) handleCommitPress() error { if len(gui.stagedFiles()) == 0 { - return gui.promptToStageAllAndRetry(func() error { - return gui.handleCommitPress() - }) + return gui.promptToStageAllAndRetry(gui.handleCommitPress) } commitMessageView := gui.getCommitMessageView() @@ -354,9 +352,7 @@ func (gui *Gui) promptToStageAllAndRetry(retry func() error) error { func (gui *Gui) handleAmendCommitPress() error { if len(gui.stagedFiles()) == 0 { - return gui.promptToStageAllAndRetry(func() error { - return gui.handleAmendCommitPress() - }) + return gui.promptToStageAllAndRetry(gui.handleAmendCommitPress) } if len(gui.State.Commits) == 0 { @@ -386,9 +382,7 @@ func (gui *Gui) handleAmendCommitPress() error { // their editor rather than via the popup panel func (gui *Gui) handleCommitEditorPress() error { if len(gui.stagedFiles()) == 0 { - return gui.promptToStageAllAndRetry(func() error { - return gui.handleCommitEditorPress() - }) + return gui.promptToStageAllAndRetry(gui.handleCommitEditorPress) } gui.PrepareSubProcess("git commit") @@ -505,13 +499,13 @@ type PullFilesOptions struct { } func (gui *Gui) pullFiles(opts PullFilesOptions) error { - if err := gui.createLoaderPanel(gui.g.CurrentView(), gui.Tr.PullWait); err != nil { + if err := gui.createLoaderPanel(gui.Tr.PullWait); err != nil { return err } mode := gui.Config.GetUserConfig().Git.Pull.Mode - go utils.Safe(func() { gui.pullWithMode(mode, opts) }) + go utils.Safe(func() { _ = gui.pullWithMode(mode, opts) }) return nil } @@ -548,7 +542,7 @@ func (gui *Gui) pullWithMode(mode string, opts PullFilesOptions) error { } func (gui *Gui) pushWithForceFlag(v *gocui.View, force bool, upstream string, args string) error { - if err := gui.createLoaderPanel(v, gui.Tr.PushWait); err != nil { + if err := gui.createLoaderPanel(gui.Tr.PushWait); err != nil { return err } go utils.Safe(func() { @@ -557,10 +551,10 @@ func (gui *Gui) pushWithForceFlag(v *gocui.View, force bool, upstream string, ar if err != nil && !force && strings.Contains(err.Error(), "Updates were rejected") { forcePushDisabled := gui.Config.GetUserConfig().Git.DisableForcePushing if forcePushDisabled { - gui.createErrorPanel(gui.Tr.UpdatesRejectedAndForcePushDisabled) + _ = gui.createErrorPanel(gui.Tr.UpdatesRejectedAndForcePushDisabled) return } - gui.ask(askOpts{ + _ = gui.ask(askOpts{ title: gui.Tr.ForcePush, prompt: gui.Tr.ForcePushPrompt, handleConfirm: func() error { diff --git a/pkg/gui/filtering.go b/pkg/gui/filtering.go index 9213b611e..bf44ec0bc 100644 --- a/pkg/gui/filtering.go +++ b/pkg/gui/filtering.go @@ -3,11 +3,9 @@ package gui func (gui *Gui) validateNotInFilterMode() (bool, error) { if gui.State.Modes.Filtering.Active() { err := gui.ask(askOpts{ - title: gui.Tr.MustExitFilterModeTitle, - prompt: gui.Tr.MustExitFilterModePrompt, - handleConfirm: func() error { - return gui.exitFilterMode() - }, + title: gui.Tr.MustExitFilterModeTitle, + prompt: gui.Tr.MustExitFilterModePrompt, + handleConfirm: gui.exitFilterMode, }) return false, err diff --git a/pkg/gui/global_handlers.go b/pkg/gui/global_handlers.go index d87f7a77b..77a93436b 100644 --- a/pkg/gui/global_handlers.go +++ b/pkg/gui/global_handlers.go @@ -175,10 +175,10 @@ func (gui *Gui) fetch(canPromptForCredentials bool) (err error) { err = gui.GitCommand.Fetch(fetchOpts) if canPromptForCredentials && err != nil && strings.Contains(err.Error(), "exit status 128") { - gui.createErrorPanel(gui.Tr.PassUnameWrong) + _ = gui.createErrorPanel(gui.Tr.PassUnameWrong) } - gui.refreshSidePanels(refreshOptions{scope: []int{BRANCHES, COMMITS, REMOTES, TAGS}, mode: ASYNC}) + _ = gui.refreshSidePanels(refreshOptions{scope: []int{BRANCHES, COMMITS, REMOTES, TAGS}, mode: ASYNC}) return err } diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index c685671e5..a1dbd909c 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -51,6 +51,8 @@ type SentinelErrors struct { ErrRestart error } +const UNKNOWN_VIEW_ERROR_MSG = "unknown view" + // GenerateSentinelErrors makes the sentinel errors for the gui. We're defining it here // because we can't do package-scoped errors with localization, and also because // it seems like package-scoped variables are bad in general @@ -582,6 +584,7 @@ func (gui *Gui) showInitialPopups(tasks []func(chan struct{}) error) { go utils.Safe(func() { for _, task := range tasks { + task := task go utils.Safe(func() { if err := task(done); err != nil { _ = gui.surfaceError(err) diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index 1dd6444e2..7f2a04315 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -34,7 +34,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { if height < minimumHeight || width < minimumWidth { v, err := g.SetView("limit", 0, 0, width-1, height-1, 0) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } v.Title = gui.Tr.NotEnoughSpace @@ -101,7 +101,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { v, err := setViewFromDimensions("main", "main", true) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } v.Title = gui.Tr.DiffTitle @@ -112,7 +112,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { secondaryView, err := setViewFromDimensions("secondary", "secondary", true) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } secondaryView.Title = gui.Tr.DiffTitle @@ -124,7 +124,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { hiddenViewOffset := 9999 if v, err := setViewFromDimensions("status", "status", true); err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } v.Title = gui.Tr.StatusTitle @@ -133,7 +133,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { filesView, err := setViewFromDimensions("files", "files", true) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } filesView.Highlight = true @@ -144,7 +144,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { branchesView, err := setViewFromDimensions("branches", "branches", true) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } branchesView.Title = gui.Tr.BranchesTitle @@ -154,7 +154,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { commitFilesView, err := setViewFromDimensions("commitFiles", gui.Contexts.CommitFiles.Context.GetWindowName(), true) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } commitFilesView.Title = gui.Tr.CommitFiles @@ -165,7 +165,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { commitsView, err := setViewFromDimensions("commits", "commits", true) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } commitsView.Title = gui.Tr.CommitsTitle @@ -175,7 +175,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { stashView, err := setViewFromDimensions("stash", "stash", true) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } stashView.Title = gui.Tr.StashTitle @@ -186,7 +186,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { if gui.getCommitMessageView() == nil { // doesn't matter where this view starts because it will be hidden if commitMessageView, err := g.SetView("commitMessage", hiddenViewOffset, hiddenViewOffset, hiddenViewOffset+10, hiddenViewOffset+10, 0); err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } _, _ = g.SetViewOnBottom("commitMessage") @@ -200,7 +200,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { if check, _ := g.View("credentials"); check == nil { // doesn't matter where this view starts because it will be hidden if credentialsView, err := g.SetView("credentials", hiddenViewOffset, hiddenViewOffset, hiddenViewOffset+10, hiddenViewOffset+10, 0); err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } _, _ = g.SetViewOnBottom("credentials") @@ -211,7 +211,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { } if v, err := setViewFromDimensions("options", "options", false); err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } v.Frame = false @@ -225,7 +225,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { // this view takes up one character. Its only purpose is to show the slash when searching if searchPrefixView, err := setViewFromDimensions("searchPrefix", "searchPrefix", false); err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } @@ -236,7 +236,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { } if searchView, err := setViewFromDimensions("search", "search", false); err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } @@ -247,7 +247,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { } if appStatusView, err := setViewFromDimensions("appStatus", "appStatus", false); err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } appStatusView.BgColor = gocui.ColorDefault @@ -258,7 +258,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { informationView, err := setViewFromDimensions("information", "information", false) if err != nil { - if err.Error() != "unknown view" { + if err.Error() != UNKNOWN_VIEW_ERROR_MSG { return err } informationView.BgColor = gocui.ColorDefault @@ -368,10 +368,3 @@ func (gui *Gui) onInitialViewsCreation() error { return gui.loadNewRepo() } - -func max(a, b int) int { - if a > b { - return a - } - return b -} diff --git a/pkg/gui/list_context.go b/pkg/gui/list_context.go index 529a7bd02..86271b065 100644 --- a/pkg/gui/list_context.go +++ b/pkg/gui/list_context.go @@ -248,7 +248,7 @@ func (gui *Gui) menuListContext() *ListContext { GetItemsLength: func() int { return gui.getMenuView().LinesHeight() }, GetPanelState: func() IListPanelState { return gui.State.Panels.Menu }, OnFocus: gui.handleMenuSelect, - OnClickSelectedItem: func() error { return gui.onMenuPress() }, + OnClickSelectedItem: gui.onMenuPress, Gui: gui, ResetMainViewOriginOnFocus: false, Kind: PERSISTENT_POPUP, diff --git a/pkg/gui/main_panels.go b/pkg/gui/main_panels.go index 68c28ff23..b0098f5e9 100644 --- a/pkg/gui/main_panels.go +++ b/pkg/gui/main_panels.go @@ -14,11 +14,6 @@ type viewUpdateOpts struct { task updateTask } -type coordinates struct { - x int - y int -} - type refreshMainOpts struct { main *viewUpdateOpts secondary *viewUpdateOpts @@ -91,9 +86,10 @@ func (gui *Gui) createRunPtyTask(cmd *exec.Cmd) *runPtyTask { return &runPtyTask{cmd: cmd} } -func (gui *Gui) createRunPtyTaskWithPrefix(cmd *exec.Cmd, prefix string) *runPtyTask { - return &runPtyTask{cmd: cmd, prefix: prefix} -} +// currently unused +// func (gui *Gui) createRunPtyTaskWithPrefix(cmd *exec.Cmd, prefix string) *runPtyTask { +// return &runPtyTask{cmd: cmd, prefix: prefix} +// } type runFunctionTask struct { f func(chan struct{}) error @@ -103,9 +99,10 @@ func (t *runFunctionTask) GetKind() int { return RUN_FUNCTION } -func (gui *Gui) createRunFunctionTask(f func(chan struct{}) error) *runFunctionTask { - return &runFunctionTask{f: f} -} +// currently unused +// func (gui *Gui) createRunFunctionTask(f func(chan struct{}) error) *runFunctionTask { +// return &runFunctionTask{f: f} +// } func (gui *Gui) runTaskForView(viewName string, task updateTask) error { switch task.GetKind() { diff --git a/pkg/gui/merge_panel.go b/pkg/gui/merge_panel.go index e9d3626ed..85e7198e5 100644 --- a/pkg/gui/merge_panel.go +++ b/pkg/gui/merge_panel.go @@ -50,9 +50,9 @@ func (gui *Gui) shouldHighlightLine(index int, conflict commands.Conflict, top b return (index >= conflict.Start && index <= conflict.Middle && top) || (index >= conflict.Middle && index <= conflict.End && !top) } -func (gui *Gui) coloredConflictFile(content string, conflicts []commands.Conflict, conflictIndex int, conflictTop, hasFocus bool) (string, error) { +func (gui *Gui) coloredConflictFile(content string, conflicts []commands.Conflict, conflictIndex int, conflictTop, hasFocus bool) string { if len(conflicts) == 0 { - return content, nil + return content } conflict, remainingConflicts := gui.shiftConflict(conflicts) var outputBuffer bytes.Buffer @@ -71,7 +71,7 @@ func (gui *Gui) coloredConflictFile(content string, conflicts []commands.Conflic } outputBuffer.WriteString(utils.ColoredStringDirect(line, colour) + "\n") } - return outputBuffer.String(), nil + return outputBuffer.String() } func (gui *Gui) takeOverScrolling() { @@ -142,7 +142,7 @@ func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error { return ioutil.WriteFile(gitFile.Name, []byte(output), 0644) } -func (gui *Gui) pushFileSnapshot(g *gocui.Gui) error { +func (gui *Gui) pushFileSnapshot() error { gitFile := gui.getSelectedFile() if gitFile == nil { return nil @@ -175,7 +175,7 @@ func (gui *Gui) handlePickHunk(g *gocui.Gui, v *gocui.View) error { gui.takeOverScrolling() conflict := gui.State.Panels.Merging.Conflicts[gui.State.Panels.Merging.ConflictIndex] - if err := gui.pushFileSnapshot(g); err != nil { + if err := gui.pushFileSnapshot(); err != nil { return err } @@ -201,7 +201,7 @@ func (gui *Gui) handlePickBothHunks(g *gocui.Gui, v *gocui.View) error { gui.takeOverScrolling() conflict := gui.State.Panels.Merging.Conflicts[gui.State.Panels.Merging.ConflictIndex] - if err := gui.pushFileSnapshot(g); err != nil { + if err := gui.pushFileSnapshot(); err != nil { return err } err := gui.resolveConflict(conflict, "both") @@ -213,7 +213,7 @@ func (gui *Gui) handlePickBothHunks(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) refreshMergePanel() error { panelState := gui.State.Panels.Merging - cat, err := gui.catSelectedFile(gui.g) + cat, err := gui.catSelectedFile() if err != nil { return gui.refreshMainViews(refreshMainOpts{ main: &viewUpdateOpts{ @@ -233,12 +233,9 @@ func (gui *Gui) refreshMergePanel() error { } hasFocus := gui.currentViewName() == "main" - content, err := gui.coloredConflictFile(cat, panelState.Conflicts, panelState.ConflictIndex, panelState.ConflictTop, hasFocus) - if err != nil { - return err - } + content := gui.coloredConflictFile(cat, panelState.Conflicts, panelState.ConflictIndex, panelState.ConflictTop, hasFocus) - if err := gui.scrollToConflict(gui.g); err != nil { + if err := gui.scrollToConflict(); err != nil { return err } @@ -251,7 +248,7 @@ func (gui *Gui) refreshMergePanel() error { }) } -func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) { +func (gui *Gui) catSelectedFile() (string, error) { item := gui.getSelectedFile() if item == nil { return "", errors.New(gui.Tr.NoFilesDisplay) @@ -269,7 +266,7 @@ func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) { return cat, nil } -func (gui *Gui) scrollToConflict(g *gocui.Gui) error { +func (gui *Gui) scrollToConflict() error { if gui.State.Panels.Merging.UserScrolling { return nil } @@ -318,7 +315,7 @@ func (gui *Gui) handleEscapeMerge() error { } func (gui *Gui) handleCompleteMerge() error { - if err := gui.stageSelectedFile(gui.g); err != nil { + if err := gui.stageSelectedFile(); err != nil { return err } if err := gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}); err != nil { @@ -326,7 +323,7 @@ func (gui *Gui) handleCompleteMerge() error { } // if we got conflicts after unstashing, we don't want to call any git // commands to continue rebasing/merging here - if gui.GitCommand.WorkingTreeState() == "normal" { + if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_NORMAL { return gui.handleEscapeMerge() } // if there are no more files with merge conflicts, we should ask whether the user wants to continue diff --git a/pkg/gui/patch_options_panel.go b/pkg/gui/patch_options_panel.go index 89bdc1e56..69cf67cc3 100644 --- a/pkg/gui/patch_options_panel.go +++ b/pkg/gui/patch_options_panel.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/commands" ) func (gui *Gui) handleCreatePatchOptionsMenu(g *gocui.Gui, v *gocui.View) error { @@ -26,7 +27,7 @@ func (gui *Gui) handleCreatePatchOptionsMenu(g *gocui.Gui, v *gocui.View) error }, } - if gui.GitCommand.PatchManager.CanRebase && gui.workingTreeState() == "normal" { + if gui.GitCommand.PatchManager.CanRebase && gui.workingTreeState() == commands.REBASE_MODE_NORMAL { menuItems = append(menuItems, []*menuItem{ { displayString: fmt.Sprintf("remove patch from original commit (%s)", gui.GitCommand.PatchManager.To), @@ -74,7 +75,7 @@ func (gui *Gui) getPatchCommitIndex() int { } func (gui *Gui) validateNormalWorkingTreeState() (bool, error) { - if gui.GitCommand.WorkingTreeState() != "normal" { + if gui.GitCommand.WorkingTreeState() != commands.REBASE_MODE_NORMAL { return false, gui.createErrorPanel(gui.Tr.CantPatchWhileRebasingError) } return true, nil diff --git a/pkg/gui/rebase_options_panel.go b/pkg/gui/rebase_options_panel.go index f36ea77ab..e53a78fb0 100644 --- a/pkg/gui/rebase_options_panel.go +++ b/pkg/gui/rebase_options_panel.go @@ -3,12 +3,14 @@ package gui import ( "fmt" "strings" + + "github.com/jesseduffield/lazygit/pkg/commands" ) func (gui *Gui) handleCreateRebaseOptionsMenu() error { options := []string{"continue", "abort"} - if gui.GitCommand.WorkingTreeState() == "rebasing" { + if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_REBASING { options = append(options, "skip") } @@ -25,7 +27,7 @@ func (gui *Gui) handleCreateRebaseOptionsMenu() error { } var title string - if gui.GitCommand.WorkingTreeState() == "merging" { + if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_MERGING { title = gui.Tr.MergeOptionsTitle } else { title = gui.Tr.RebaseOptionsTitle @@ -37,7 +39,7 @@ func (gui *Gui) handleCreateRebaseOptionsMenu() error { func (gui *Gui) genericMergeCommand(command string) error { status := gui.GitCommand.WorkingTreeState() - if status != "merging" && status != "rebasing" { + if status != commands.REBASE_MODE_MERGING && status != commands.REBASE_MODE_REBASING { return gui.createErrorPanel(gui.Tr.NotMergingOrRebasing) } @@ -45,7 +47,7 @@ func (gui *Gui) genericMergeCommand(command string) error { // we should end up with a command like 'git merge --continue' // it's impossible for a rebase to require a commit so we'll use a subprocess only if it's a merge - if status == "merging" && command != "abort" && gui.Config.GetUserConfig().Git.Merging.ManualCommit { + if status == commands.REBASE_MODE_MERGING && command != "abort" && gui.Config.GetUserConfig().Git.Merging.ManualCommit { sub := gui.OSCommand.PrepareSubProcess("git", commandType, fmt.Sprintf("--%s", command)) if sub != nil { gui.SubProcess = sub diff --git a/pkg/gui/staging_panel.go b/pkg/gui/staging_panel.go index 66b3006fc..44413442f 100644 --- a/pkg/gui/staging_panel.go +++ b/pkg/gui/staging_panel.go @@ -18,10 +18,8 @@ func (gui *Gui) refreshStagingPanel(forceSecondaryFocused bool, selectedLineIdx secondaryFocused := false if forceSecondaryFocused { secondaryFocused = true - } else { - if state != nil { - secondaryFocused = state.SecondaryFocused - } + } else if state != nil { + secondaryFocused = state.SecondaryFocused } if (secondaryFocused && !file.HasStagedChanges) || (!secondaryFocused && !file.HasUnstagedChanges) { diff --git a/pkg/gui/status_panel.go b/pkg/gui/status_panel.go index 50b4e6c6d..65ea426d6 100644 --- a/pkg/gui/status_panel.go +++ b/pkg/gui/status_panel.go @@ -6,6 +6,7 @@ import ( "github.com/fatih/color" "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/commands" "github.com/jesseduffield/lazygit/pkg/gui/presentation" "github.com/jesseduffield/lazygit/pkg/utils" ) @@ -33,7 +34,7 @@ func (gui *Gui) refreshStatus() { status = utils.ColoredString(fmt.Sprintf("↑%s↓%s ", currentBranch.Pushables, currentBranch.Pullables), trackColor) } - if gui.GitCommand.WorkingTreeState() != "normal" { + if gui.GitCommand.WorkingTreeState() != commands.REBASE_MODE_NORMAL { status += utils.ColoredString(fmt.Sprintf("(%s) ", gui.GitCommand.WorkingTreeState()), color.FgYellow) } @@ -57,7 +58,7 @@ func cursorInSubstring(cx int, prefix string, substring string) bool { func (gui *Gui) handleCheckForUpdate(g *gocui.Gui, v *gocui.View) error { gui.Updater.CheckForNewUpdate(gui.onUserUpdateCheckFinish, true) - return gui.createLoaderPanel(v, gui.Tr.CheckingForUpdates) + return gui.createLoaderPanel(gui.Tr.CheckingForUpdates) } func (gui *Gui) handleStatusClick(g *gocui.Gui, v *gocui.View) error { @@ -80,7 +81,7 @@ func (gui *Gui) handleStatusClick(g *gocui.Gui, v *gocui.View) error { upstreamStatus := fmt.Sprintf("↑%s↓%s", currentBranch.Pushables, currentBranch.Pullables) repoName := utils.GetCurrentRepoName() switch gui.GitCommand.WorkingTreeState() { - case "rebasing", "merging": + case commands.REBASE_MODE_REBASING, commands.REBASE_MODE_MERGING: workingTreeStatus := fmt.Sprintf("(%s)", gui.GitCommand.WorkingTreeState()) if cursorInSubstring(cx, upstreamStatus+" ", workingTreeStatus) { return gui.handleCreateRebaseOptionsMenu() @@ -149,11 +150,11 @@ func lazygitTitle() string { func (gui *Gui) workingTreeState() string { rebaseMode, _ := gui.GitCommand.RebaseMode() if rebaseMode != "" { - return "rebasing" + return commands.REBASE_MODE_REBASING } merging, _ := gui.GitCommand.IsInMergeState() if merging { - return "merging" + return commands.REBASE_MODE_MERGING } - return "normal" + return commands.REBASE_MODE_NORMAL } diff --git a/pkg/gui/undoing.go b/pkg/gui/undoing.go index dad866bc8..4fdfba0f5 100644 --- a/pkg/gui/undoing.go +++ b/pkg/gui/undoing.go @@ -2,6 +2,7 @@ package gui import ( "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/commands" "github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/utils" ) @@ -87,7 +88,7 @@ func (gui *Gui) reflogUndo(g *gocui.Gui, v *gocui.View) error { undoEnvVars := []string{"GIT_REFLOG_ACTION=[lazygit undo]"} undoingStatus := gui.Tr.UndoingStatus - if gui.GitCommand.WorkingTreeState() == "rebasing" { + if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_REBASING { return gui.createErrorPanel(gui.Tr.LcCantUndoWhileRebasing) } @@ -118,7 +119,7 @@ func (gui *Gui) reflogRedo(g *gocui.Gui, v *gocui.View) error { redoEnvVars := []string{"GIT_REFLOG_ACTION=[lazygit redo]"} redoingStatus := gui.Tr.RedoingStatus - if gui.GitCommand.WorkingTreeState() == "rebasing" { + if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_REBASING { return gui.createErrorPanel(gui.Tr.LcCantRedoWhileRebasing) } diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index bc4c5bada..32d1f0b73 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -110,9 +110,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error { wg.Add(1) func() { if options.mode == ASYNC { - go utils.Safe(func() { gui.refreshCommits() }) + go utils.Safe(func() { _ = gui.refreshCommits() }) } else { - gui.refreshCommits() + _ = gui.refreshCommits() } wg.Done() }() @@ -122,9 +122,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error { wg.Add(1) func() { if options.mode == ASYNC { - go utils.Safe(func() { gui.refreshFilesAndSubmodules() }) + go utils.Safe(func() { _ = gui.refreshFilesAndSubmodules() }) } else { - gui.refreshFilesAndSubmodules() + _ = gui.refreshFilesAndSubmodules() } wg.Done() }() @@ -134,9 +134,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error { wg.Add(1) func() { if options.mode == ASYNC { - go utils.Safe(func() { gui.refreshStashEntries() }) + go utils.Safe(func() { _ = gui.refreshStashEntries() }) } else { - gui.refreshStashEntries() + _ = gui.refreshStashEntries() } wg.Done() }() @@ -146,9 +146,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error { wg.Add(1) func() { if options.mode == ASYNC { - go utils.Safe(func() { gui.refreshTags() }) + go utils.Safe(func() { _ = gui.refreshTags() }) } else { - gui.refreshTags() + _ = gui.refreshTags() } wg.Done() }() @@ -158,9 +158,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error { wg.Add(1) func() { if options.mode == ASYNC { - go utils.Safe(func() { gui.refreshRemotes() }) + go utils.Safe(func() { _ = gui.refreshRemotes() }) } else { - gui.refreshRemotes() + _ = gui.refreshRemotes() } wg.Done() }() @@ -244,11 +244,6 @@ func (gui *Gui) getFilesView() *gocui.View { return v } -func (gui *Gui) getCommitsView() *gocui.View { - v, _ := gui.g.View("commits") - return v -} - func (gui *Gui) getCommitMessageView() *gocui.View { v, _ := gui.g.View("commitMessage") return v @@ -269,15 +264,17 @@ func (gui *Gui) getSecondaryView() *gocui.View { return v } -func (gui *Gui) getStashView() *gocui.View { - v, _ := gui.g.View("stash") - return v -} +// currently unused +// func (gui *Gui) getStashView() *gocui.View { +// v, _ := gui.g.View("stash") +// return v +// } -func (gui *Gui) getCommitFilesView() *gocui.View { - v, _ := gui.g.View("commitFiles") - return v -} +// currently unused +// func (gui *Gui) getCommitFilesView() *gocui.View { +// v, _ := gui.g.View("commitFiles") +// return v +// } func (gui *Gui) getMenuView() *gocui.View { v, _ := gui.g.View("menu") diff --git a/pkg/i18n/i18n_test.go b/pkg/i18n/i18n_test.go index cc06e3572..7023ea40a 100644 --- a/pkg/i18n/i18n_test.go +++ b/pkg/i18n/i18n_test.go @@ -2,19 +2,11 @@ package i18n import ( "fmt" - "io/ioutil" "testing" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" ) -func getDummyLog() *logrus.Entry { - log := logrus.New() - log.Out = ioutil.Discard - return log.WithField("test", "test") -} - // TestDetectLanguage is a function. func TestDetectLanguage(t *testing.T) { type scenario struct {