From e1e4af7784817e46b5de07ee10b9b32600832093 Mon Sep 17 00:00:00 2001 From: cpendery Date: Sun, 17 Sep 2023 03:22:12 -0400 Subject: [PATCH] refactor: add git generator for add Signed-off-by: cpendery --- autocomplete/generators/git/git.go | 30 ++++++++++++++++++++++++++++++ autocomplete/specs/git.go | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/autocomplete/generators/git/git.go b/autocomplete/generators/git/git.go index 0c813f8..70f05eb 100644 --- a/autocomplete/generators/git/git.go +++ b/autocomplete/generators/git/git.go @@ -1,8 +1,11 @@ package git import ( + "strings" + "github.com/cpendery/clac/autocomplete/generators" "github.com/cpendery/clac/autocomplete/model" + "github.com/google/uuid" ) func CommitMessageGenerator() *model.Generator { @@ -23,3 +26,30 @@ func CommitMessageGenerator() *model.Generator { "\n", ) } + +func AddFileGenerator() *model.Generator { + return &model.Generator{ + Id: uuid.New(), + Script: "git --no-optional-locks status --short", + PostProcess: func(s string) []model.TermSuggestion { + suggestions := []model.TermSuggestion{} + lines := strings.Split(s, "\n") + for _, line := range lines { + baseRune := strings.IndexRune(line, 0) + if baseRune == 'M' || baseRune == 'A' { + continue + } + splits := strings.Split(line, " ") + if len(splits) <= 1 { + continue + } + filename := splits[len(splits)-1] + suggestions = append(suggestions, model.TermSuggestion{ + Name: filename, + Description: "Unstaged/Untracked File", + }) + } + return suggestions + }, + } +} diff --git a/autocomplete/specs/git.go b/autocomplete/specs/git.go index 12f33ad..cf32123 100644 --- a/autocomplete/specs/git.go +++ b/autocomplete/specs/git.go @@ -2755,7 +2755,7 @@ func init() { Description: `Add file contents to the index`, Args: []model.Arg{{ Name: "pathspec", - Generator: nil, // TODO: port over generator + Generator: git.AddFileGenerator(), IsOptional: true, IsVariadic: true, }},