⌨️ 补全
生成 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"
)方法签名
| 方法 | 签名 | 说明 |
|---|---|---|
| ⌨️ GenerateCompletion | func (c *Composer) GenerateCompletion(shell ShellType) (string, error) | 生成指定 shell 的补全脚本 |
| ⚙️ GenerateCompletionWithOptions | func (c *Composer) GenerateCompletionWithOptions(shell ShellType, options map[string]string) (string, error) | 带自定义选项生成补全脚本 |
| 📋 ListCommands | func (c *Composer) ListCommands() (string, error) | composer list 列出所有命令 |
| ❓ GetCommandHelp | func (c *Composer) GetCommandHelp(command string) (string, error) | composer help <command> 命令帮助 |
参数说明
GenerateCompletion / GenerateCompletionWithOptions
| 参数 | 类型 | 说明 |
|---|---|---|
shell | ShellType | BashShell / ZshShell / FishShell |
options | map[string]string | 额外选项(如 --shell) |
GetCommandHelp
| 参数 | 类型 | 说明 |
|---|---|---|
command | string | 子命令名,如 require、install |
示例
生成并保存 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: 等标题行,或参考 解析函数 中的相关辅助方法。