From 7b35c774afd23a1b88b20745cadd5819444e1a3f Mon Sep 17 00:00:00 2001 From: rsteube Date: Sun, 28 Jul 2024 20:05:29 +0200 Subject: [PATCH] added php --- completers/php_completer/cmd/root.go | 103 +++++++++++++++++++++++++++ completers/php_completer/main.go | 7 ++ 2 files changed, 110 insertions(+) create mode 100644 completers/php_completer/cmd/root.go create mode 100644 completers/php_completer/main.go diff --git a/completers/php_completer/cmd/root.go b/completers/php_completer/cmd/root.go new file mode 100644 index 0000000000..17e914f468 --- /dev/null +++ b/completers/php_completer/cmd/root.go @@ -0,0 +1,103 @@ +package cmd + +import ( + "path/filepath" + + "github.com/carapace-sh/carapace" + "github.com/carapace-sh/carapace-bin/pkg/actions/net" + "github.com/carapace-sh/carapace-bridge/pkg/actions/bridge" + "github.com/spf13/cobra" +) + +var rootCmd = &cobra.Command{ + Use: "php", + Short: "PHP Command Line Interface", + Long: "https://www.php.net/", + Run: func(cmd *cobra.Command, args []string) {}, +} + +func Execute() error { + return rootCmd.Execute() +} +func init() { + carapace.Gen(rootCmd).Standalone() + + rootCmd.Flags().StringS("B", "B", "", "Run PHP before processing input lines") + rootCmd.Flags().StringS("E", "E", "", "Run PHP after processing all input lines") + rootCmd.Flags().StringS("F", "F", "", "Parse and execute for every input line") + rootCmd.Flags().BoolS("H", "H", false, "Hide any passed arguments from external tools") + rootCmd.Flags().StringS("R", "R", "", "Run PHP for every input line") + rootCmd.Flags().BoolS("S", "S", false, "Run with built-in web server") + rootCmd.Flags().BoolS("a", "a", false, "Run as interactive shell (requires readline extension)") + rootCmd.Flags().BoolS("c", "c", false, "Look for php.ini file in this directory") + rootCmd.Flags().StringS("d", "d", "", "Define INI entry foo with value 'bar'") + rootCmd.Flags().BoolS("e", "e", false, "Generate extended information for debugger/profiler") + rootCmd.Flags().StringS("f", "f", "", "Parse and execute ") + rootCmd.Flags().BoolS("h", "h", false, "This help") + rootCmd.Flags().BoolS("i", "i", false, "PHP information") + rootCmd.Flags().Bool("ini", false, "Show configuration file names") + rootCmd.Flags().BoolS("l", "l", false, "Syntax check only (lint)") + rootCmd.Flags().BoolS("m", "m", false, "Show compiled in modules") + rootCmd.Flags().BoolS("n", "n", false, "No configuration (ini) files will be used") + rootCmd.Flags().StringS("r", "r", "", "Run PHP without using script tags ") + rootCmd.Flags().String("rc", "", "Show information about class ") + rootCmd.Flags().String("re", "", "Show information about extension ") + rootCmd.Flags().String("rf", "", "Show information about function ") + rootCmd.Flags().String("ri", "", "Show configuration for extension ") + rootCmd.Flags().String("rz", "", "Show information about Zend extension ") + rootCmd.Flags().BoolS("s", "s", false, "Output HTML syntax highlighted source") + rootCmd.Flags().StringS("t", "t", "", "Specify document root for built-in web server") + rootCmd.Flags().BoolS("v", "v", false, "Version number") + rootCmd.Flags().BoolS("w", "w", false, "Output source with stripped comments and whitespace") + rootCmd.Flags().StringS("z", "z", "", "Load Zend extension ") + + carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{ + "F": carapace.ActionFiles(), + "S": carapace.ActionMultiPartsN(":", 2, func(c carapace.Context) carapace.Action { + switch len(c.Parts) { + case 0: + return carapace.ActionValues() + default: + return net.ActionPorts() + } + }), + "c": carapace.ActionFiles(), + "f": carapace.ActionFiles(), + "t": carapace.ActionDirectories(), + "z": carapace.ActionFiles(), + }) + + carapace.Gen(rootCmd).PositionalAnyCompletion( + carapace.ActionCallback(func(c carapace.Context) carapace.Action { + if rootCmd.Flag("S").Changed || rootCmd.Flag("r").Changed { + return carapace.ActionValues() + } + + shift := 1 + var file string + switch { + case rootCmd.Flag("F").Changed: + file = rootCmd.Flag("F").Value.String() + shift = 0 + case rootCmd.Flag("f").Changed: + file = rootCmd.Flag("f").Value.String() + shift = 0 + case len(c.Args) == 0: + return carapace.ActionFiles() + default: + file = c.Args[0] + } + + switch filepath.Base(file) { + case "artisan": // assume laravel artisan + return bridge.ActionCarapaceBin("artisan").Shift(shift).Chdir(filepath.Dir(file)) + default: + return carapace.ActionValues() + } + }), + ) + + carapace.Gen(rootCmd).DashAnyCompletion( + carapace.ActionPositional(rootCmd), + ) +} diff --git a/completers/php_completer/main.go b/completers/php_completer/main.go new file mode 100644 index 0000000000..0b7d756182 --- /dev/null +++ b/completers/php_completer/main.go @@ -0,0 +1,7 @@ +package main + +import "github.com/carapace-sh/carapace-bin/completers/php_completer/cmd" + +func main() { + cmd.Execute() +}