joao/cmd/root.go

104 lines
2.9 KiB
Go

// Copyright © 2022 Roberto Hidalgo <joao@un.rob.mx>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cmd
import (
"fmt"
"strings"
"github.com/fatih/color"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
var Root = &cobra.Command{
Use: "joao [--silent|-v|--verbose] [--[no-]color] [-h|--help] [--version]",
Short: "does config",
Long: `does config with 1password and stuff`,
// DisableAutoGenTag: true,
// SilenceUsage: true,
// SilenceErrors: true,
ValidArgs: []string{""},
Annotations: map[string]string{},
Args: func(cmd *cobra.Command, args []string) error {
err := cobra.OnlyValidArgs(cmd, args)
if err != nil {
suggestions := []string{}
bold := color.New(color.Bold)
for _, l := range cmd.SuggestionsFor(args[len(args)-1]) {
suggestions = append(suggestions, bold.Sprint(l))
}
errMessage := fmt.Sprintf("Unknown subcommand %s", bold.Sprint(strings.Join(args, " ")))
if len(suggestions) > 0 {
errMessage += ". Perhaps you meant " + strings.Join(suggestions, ", ") + "?"
}
return fmt.Errorf("command not found")
}
return nil
},
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 {
if ok, err := cmd.Flags().GetBool("version"); err == nil && ok {
vc, _, err := cmd.Root().Find([]string{"__version"})
if err != nil {
return err
}
return vc.RunE(vc, []string{})
}
return fmt.Errorf("no command provided")
}
return nil
},
}
func RootCommand(version string) *cobra.Command {
Root.Annotations["version"] = version
rootFlagset := pflag.NewFlagSet("joao", pflag.ContinueOnError)
// for name, opt := range Root.Options {
// def, ok := opt.Default.(bool)
// if !ok {
// def = false
// }
// if opt.ShortName != "" {
// rootFlagset.BoolP(name, opt.ShortName, def, opt.Description)
// } else {
// rootFlagset.Bool(name, def, opt.Description)
// }
// }
rootFlagset.Usage = func() {}
rootFlagset.SortFlags = false
Root.PersistentFlags().AddFlagSet(rootFlagset)
Root.Flags().Bool("version", false, "Display the version")
// Root.CompletionOptions.DisableDefaultCmd = true
Root.AddCommand(getCommand)
// Root.AddCommand(completionCommand)
// Root.AddCommand(generateDocumentationCommand)
// Root.AddCommand(doctorCommand)
// Root.SetHelpCommand(helpCommand)
// helpCommand.AddCommand(docsCommand)
// docsCommand.SetHelpFunc(docs.HelpRenderer(Root.Options))
// Root.SetHelpFunc(Root.HelpRenderer(Root.Options))
return Root
}