2023-06-20 16:46:25 +02:00

92 lines
4.5 KiB
Go

package cmd
import (
"github.com/rsteube/carapace"
"github.com/rsteube/carapace-bin/completers/code_completer/cmd/action"
"github.com/rsteube/carapace-bin/pkg/actions/os"
"github.com/rsteube/carapace/pkg/style"
"github.com/rsteube/carapace/pkg/util"
"github.com/spf13/cobra"
)
var rootCmd = &cobra.Command{
Use: "code",
Short: "Visual Studio Code",
Long: "https://code.visualstudio.com/",
Run: func(cmd *cobra.Command, args []string) {},
}
func Execute() error {
return rootCmd.Execute()
}
func init() {
carapace.Gen(rootCmd).Standalone()
rootCmd.Flags().StringP("add", "a", "", "Add folder(s) to the last active window.")
rootCmd.Flags().String("category", "", "Filters installed extensions by provided category, when using --list-extensions.")
rootCmd.Flags().Bool("diff", false, "Compare two files with each other.")
rootCmd.Flags().String("disable-extension", "", "Disable an extension.")
rootCmd.Flags().Bool("disable-extensions", false, "Disable all installed extensions.")
rootCmd.Flags().Bool("disable-gpu", false, "Disable GPU hardware acceleration.")
rootCmd.Flags().String("enable-proposed-api", "", "Enables proposed API features for extensions.")
rootCmd.Flags().String("extensions-dir", "", "Set the root path for extensions.")
rootCmd.Flags().StringP("goto", "g", "", "Open a file at the path on the specified line and character position.")
rootCmd.Flags().BoolP("help", "h", false, "Print usage.")
rootCmd.Flags().String("inspect-brk-extensions", "", "Allow debugging and profiling of extensions with the extension host being paused after start.")
rootCmd.Flags().String("inspect-extensions", "", "Allow debugging and profiling of extensions.")
rootCmd.Flags().String("install-extension", "", "Installs or updates the extension.")
rootCmd.Flags().Bool("list-extensions", false, "List the installed extensions.")
rootCmd.Flags().String("locale", "", "The locale to use (e.g. en-US or zh-TW).")
rootCmd.Flags().String("log", "", "Log level to use.")
rootCmd.Flags().String("max-memory", "", "Max memory size for a window (in Mbytes).")
rootCmd.Flags().BoolP("new-window", "n", false, "Force to open a new window.")
rootCmd.Flags().Bool("prof-startup", false, "Run CPU profiler during startup.")
rootCmd.Flags().BoolP("reuse-window", "r", false, "Force to open a file or folder in an already opened window.")
rootCmd.Flags().Bool("show-versions", false, "Show versions of installed extensions, when using --list-extensions.")
rootCmd.Flags().BoolP("status", "s", false, "Print process usage and diagnostics information.")
rootCmd.Flags().String("sync", "", "Turn sync on or off.")
rootCmd.Flags().Bool("telemetry", false, "Shows all telemetry events which VS code collects.")
rootCmd.Flags().String("uninstall-extension", "", "Uninstalls an extension.")
rootCmd.Flags().String("user-data-dir", "", "Specifies the directory that user data is kept in.")
rootCmd.Flags().Bool("verbose", false, "Print verbose output (implies --wait).")
rootCmd.Flags().BoolP("version", "v", false, "Print version.")
rootCmd.Flags().BoolP("wait", "w", false, "Wait for the files to be closed before returning.")
carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{
"add": carapace.ActionDirectories(),
"category": carapace.ActionValues("Programming Languages", "Snippets", "Linters", "Themes", "Debuggers", "Other"),
"disable-extension": action.ActionExtensions(rootCmd),
"extensions-dir": carapace.ActionDirectories(),
"goto": carapace.ActionMultiParts(":", func(c carapace.Context) carapace.Action {
switch len(c.Parts) {
case 0:
return carapace.ActionFiles().NoSpace()
default:
return carapace.ActionValues()
}
}),
"install-extension": carapace.ActionCallback(func(c carapace.Context) carapace.Action {
if util.HasPathPrefix(c.Value) {
return carapace.ActionFiles(".vsix")
}
return action.ActionExtensionSearch(rootCmd.Flag("category").Value.String())
}),
"locale": os.ActionLocales(),
"log": carapace.ActionValues("critical", "error", "warn", "info", "debug", "trace", "off").StyleF(style.ForLogLevel),
"sync": carapace.ActionValues("on", "off"),
"uninstall-extension": action.ActionExtensions(rootCmd),
"user-data-dir": carapace.ActionDirectories(),
})
carapace.Gen(rootCmd).PositionalAnyCompletion(
carapace.ActionCallback(func(c carapace.Context) carapace.Action {
if rootCmd.Flag("diff").Changed &&
len(c.Args) > 1 {
return carapace.ActionValues()
}
return carapace.ActionFiles()
}),
)
}