Skip to content

Commit

Permalink
gh: extension exec - fix completion
Browse files Browse the repository at this point in the history
  • Loading branch information
rsteube committed Sep 24, 2022
1 parent 02fcc60 commit 2eda2df
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 49 deletions.
40 changes: 40 additions & 0 deletions cmd/carapace/cmd/completers/completers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package completers

import (
"fmt"
"os"

"gopkg.in/yaml.v3"
)

func Names() []string {
return names
}

func Description(name string) string {
if d, err := specDescription(name); err == nil {
return d
}
return descriptions[name]
}

func specDescription(name string) (string, error) {
confDir, err := os.UserConfigDir()
if err != nil {
return "", err
}

content, err := os.ReadFile(fmt.Sprintf("%v/carapace/specs/%v.yaml", confDir, name))
if err != nil {
return "", err
}
var s struct {
Description string
}

err = yaml.Unmarshal(content, &s)
if err != nil {
return "", err
}
return s.Description, nil
}
28 changes: 14 additions & 14 deletions cmd/carapace/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ var rootCmd = &cobra.Command{
Specs are loaded from [%v/carapace/specs].
`, suppressErr(os.UserCacheDir), suppressErr(os.UserConfigDir), suppressErr(os.UserConfigDir)),
Args: cobra.MinimumNArgs(1),
ValidArgs: completers.Names,
ValidArgs: completers.Names(),
Run: func(cmd *cobra.Command, args []string) {
// since flag parsing is disabled do this manually
switch args[0] {
Expand Down Expand Up @@ -120,25 +120,25 @@ var rootCmd = &cobra.Command{
}
switch shell {
case "bash":
fmt.Println(bash_lazy(completers.Names))
fmt.Println(bash_lazy(completers.Names()))
case "bash-ble":
fmt.Println(bash_ble_lazy(completers.Names))
fmt.Println(bash_ble_lazy(completers.Names()))
case "elvish":
fmt.Println(elvish_lazy(completers.Names))
fmt.Println(elvish_lazy(completers.Names()))
case "fish":
fmt.Println(fish_lazy(completers.Names))
fmt.Println(fish_lazy(completers.Names()))
case "nushell":
fmt.Println(nushell_lazy(completers.Names))
fmt.Println(nushell_lazy(completers.Names()))
case "oil":
fmt.Println(oil_lazy(completers.Names))
fmt.Println(oil_lazy(completers.Names()))
case "powershell":
fmt.Println(powershell_lazy(completers.Names))
fmt.Println(powershell_lazy(completers.Names()))
case "tcsh":
fmt.Println(tcsh_lazy(completers.Names))
fmt.Println(tcsh_lazy(completers.Names()))
case "xonsh":
fmt.Println(xonsh_lazy(completers.Names))
fmt.Println(xonsh_lazy(completers.Names()))
case "zsh":
fmt.Println(zsh_lazy(completers.Names))
fmt.Println(zsh_lazy(completers.Names()))
default:
fmt.Fprintln(os.Stderr, "could not determine shell")
}
Expand All @@ -160,14 +160,14 @@ func suppressErr(f func() (string, error)) string { s, _ := f(); return s }

func printCompleters() {
maxlen := 0
for _, name := range completers.Names {
for _, name := range completers.Names() {
if len := len(name); len > maxlen {
maxlen = len
}
}

for _, name := range completers.Names {
fmt.Printf("%-"+strconv.Itoa(maxlen)+"v %v\n", name, completers.Descriptions[name])
for _, name := range completers.Names() {
fmt.Printf("%-"+strconv.Itoa(maxlen)+"v %v\n", name, completers.Description(name))
}
}

Expand Down
4 changes: 2 additions & 2 deletions cmd/generate/gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ func executeCompleter(completer string) {

os.Mkdir(root+"/cmd/carapace/cmd/completers", 0755)
os.WriteFile(root+"/cmd/carapace/cmd/completers.go", []byte("//go:build !release\n\n"+content), 0644)
os.WriteFile(root+"/cmd/carapace/cmd/completers/name.go", []byte(fmt.Sprintf("package completers\n\nvar Names = []string{\n%v\n}\n", strings.Join(formattedNames, "\n"))), 0644)
os.WriteFile(root+"/cmd/carapace/cmd/completers/description.go", []byte(fmt.Sprintf("package completers\n\nvar Descriptions = map[string]string{\n%v\n}\n", strings.Join(formattedDescriptions, "\n"))), 0644)
os.WriteFile(root+"/cmd/carapace/cmd/completers/name.go", []byte(fmt.Sprintf("package completers\n\nvar names = []string{\n%v\n}\n", strings.Join(formattedNames, "\n"))), 0644)
os.WriteFile(root+"/cmd/carapace/cmd/completers/description.go", []byte(fmt.Sprintf("package completers\n\nvar descriptions = map[string]string{\n%v\n}\n", strings.Join(formattedDescriptions, "\n"))), 0644)
os.WriteFile(root+"/cmd/carapace/cmd/completers_release.go", []byte("//go:build release\n\n"+strings.Replace(content, "/completers/", "/completers_release/", -1)), 0644)
os.RemoveAll(root + "/completers_release")
execabs.Command("cp", "-r", root+"/completers", root+"/completers_release").Run()
Expand Down
Empty file.
14 changes: 10 additions & 4 deletions completers/gh_completer/cmd/extension_exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,26 @@ package cmd
import (
"github.com/rsteube/carapace"
"github.com/rsteube/carapace-bin/completers/gh_completer/cmd/action"
"github.com/rsteube/carapace-bin/pkg/actions/bridge"
"github.com/spf13/cobra"
)

var extension_execCmd = &cobra.Command{
Use: "exec",
Short: "Execute an installed extension",
Run: func(cmd *cobra.Command, args []string) {},
Use: "exec",
Short: "Execute an installed extension",
Run: func(cmd *cobra.Command, args []string) {},
DisableFlagParsing: true,
}

func init() {
carapace.Gen(extension_execCmd).Standalone()
extensionCmd.AddCommand(extension_execCmd)

carapace.Gen(extensionCmd).PositionalCompletion(
carapace.Gen(extension_execCmd).PositionalCompletion(
action.ActionExtensions(),
)

carapace.Gen(extension_execCmd).PositionalAnyCompletion(
bridge.ActionCarapaceBin("gh"),
)
}
7 changes: 6 additions & 1 deletion completers/gh_completer/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package cmd

import (
"github.com/rsteube/carapace"
"github.com/rsteube/carapace-bin/cmd/carapace/cmd/completers"
"github.com/rsteube/carapace-bin/completers/gh_completer/cmd/action"
"github.com/rsteube/carapace-bin/pkg/actions/bridge"
"github.com/spf13/cobra"
Expand Down Expand Up @@ -34,11 +35,15 @@ func init() {
for _, extension := range extensions {
extensionCmd := &cobra.Command{
Use: extension,
Short: "extension",
Short: completers.Description("gh-" + extension),
Run: func(cmd *cobra.Command, args []string) {},
DisableFlagParsing: true,
}

if extensionCmd.Short == "" {
extensionCmd.Short = "extension"
}

carapace.Gen(extensionCmd).PositionalAnyCompletion(
bridge.ActionCarapaceBin("gh-" + extension),
)
Expand Down
29 changes: 1 addition & 28 deletions pkg/actions/os/executable.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package os

import (
"fmt"
"os"
"strings"

"github.com/rsteube/carapace"
"github.com/rsteube/carapace-bin/cmd/carapace/cmd/completers"
"github.com/rsteube/carapace/pkg/style"
"gopkg.in/yaml.v3"
)

// ActionPathExecutables completes executable files from PATH
Expand All @@ -33,11 +31,7 @@ func actionDirectoryExecutables(dir string, prefix string) carapace.Action {
for _, f := range files {
if strings.HasPrefix(f.Name(), prefix) {
if info, err := f.Info(); err == nil && !f.IsDir() && isExecAny(info.Mode()) {
if description, err := specDescription(f.Name()); err != nil {
vals = append(vals, f.Name(), completers.Descriptions[f.Name()], style.ForPath(dir+"/"+f.Name()))
} else {
vals = append(vals, f.Name(), description, style.ForPath(dir+"/"+f.Name()))
}
vals = append(vals, f.Name(), completers.Description(f.Name()), style.ForPath(dir+"/"+f.Name()))
}
}
}
Expand All @@ -50,24 +44,3 @@ func actionDirectoryExecutables(dir string, prefix string) carapace.Action {
func isExecAny(mode os.FileMode) bool {
return mode&0111 != 0
}

func specDescription(name string) (string, error) {
confDir, err := os.UserConfigDir()
if err != nil {
return "", err
}

content, err := os.ReadFile(fmt.Sprintf("%v/carapace/specs/%v.yaml", confDir, name))
if err != nil {
return "", err
}
var s struct {
Description string
}

err = yaml.Unmarshal(content, &s)
if err != nil {
return "", err
}
return s.Description, nil
}

0 comments on commit 2eda2df

Please sign in to comment.