Skip to content

⌨️ 补全

生成 shell 自动补全脚本、列出所有可用命令、查询命令帮助——用于把 Composer 集成进你的 shell 或工具链。

composer completion 内置支持 bash / zsh / fish 三种 shell。生成的脚本可通过 source 或写入 ~/.bashrc 等方式激活。

何时使用

  • 🐚 自动化安装脚本里给用户配置 Composer 命令补全。
  • 📖 构建交互式 Composer 包装器时,需要枚举所有子命令做菜单。
  • ❓ 程序化查询某命令的 --help,提取可用选项做参数补全。
  • 🚀 在 Go CLI 工具里把补全脚本写入用户配置目录。

结构化类型

ShellType

completion.go 定义的 shell 类型常量。

go
type ShellType string

const (
    BashShell ShellType = "bash"
    ZshShell  ShellType = "zsh"
    FishShell ShellType = "fish"
)

方法签名

方法签名说明
⌨️ GenerateCompletionfunc (c *Composer) GenerateCompletion(shell ShellType) (string, error)生成指定 shell 的补全脚本
⚙️ GenerateCompletionWithOptionsfunc (c *Composer) GenerateCompletionWithOptions(shell ShellType, options map[string]string) (string, error)带自定义选项生成补全脚本
📋 ListCommandsfunc (c *Composer) ListCommands() (string, error)composer list 列出所有命令
❓ GetCommandHelpfunc (c *Composer) GetCommandHelp(command string) (string, error)composer help <command> 命令帮助

参数说明

GenerateCompletion / GenerateCompletionWithOptions

参数类型说明
shellShellTypeBashShell / ZshShell / FishShell
optionsmap[string]string额外选项(如 --shell

GetCommandHelp

参数类型说明
commandstring子命令名,如 requireinstall

示例

生成并保存 bash 补全脚本

go
package main

import (
	"fmt"
	"log"
	"os"

	"github.com/scagogogo/composer-skills/pkg/composer"
)

func main() {
	comp, err := composer.New(composer.DefaultOptions())
	if err != nil {
		log.Fatal(err)
	}

	script, err := comp.GenerateCompletion(composer.BashShell)
	if err != nil {
		log.Fatalf("生成补全脚本失败: %v", err)
	}

	if err := os.WriteFile("/etc/bash_completion.d/composer", []byte(script), 0644); err != nil {
		log.Fatal(err)
	}
	fmt.Println("✅ bash 补全脚本已安装")
}

生成 zsh 补全

go
script, err := comp.GenerateCompletion(composer.ZshShell)
if err != nil {
	log.Fatal(err)
}
// 写入用户 zsh 补全目录
_ = os.WriteFile(os.Getenv("HOME")+"/.zsh/completions/_composer", []byte(script), 0644)

列出所有命令

go
out, err := comp.ListCommands()
if err != nil {
	log.Fatal(err)
}
fmt.Println(out)

查询某命令帮助

go
help, err := comp.GetCommandHelp("require")
if err != nil {
	log.Fatal(err)
}
fmt.Println(help)

带选项生成补全

go
script, err := comp.GenerateCompletionWithOptions(composer.FishShell, map[string]string{
	"shell": "fish",
})
if err != nil {
	log.Fatal(err)
}
fmt.Println(script)

进阶

激活补全脚本

生成的脚本本身不会自动激活——需用户在 shell 配置里 source 它,或写入对应补全目录后重开终端。bash 用 /etc/bash_completion.d/,zsh 用 ~/.zsh/completions/,fish 用 ~/.config/fish/completions/

ListCommands 返回原始文本

ListCommands 直接返回 composer list 的多行文本,不做解析。若需结构化的命令列表,请自行按行分割并过滤 Available commands: 等标题行,或参考 解析函数 中的相关辅助方法。

基于 MIT 许可证发布