# Requirement Specification / 需求规格说明

# shell-completion

## Background / 背景

l-tool CLI 需要提供命令行自动补全功能，以提升用户体验。用户在终端输入 `l` 命令时，能够通过 Tab 键自动补全子命令、参数和选项，减少输入错误，提高操作效率。

## Goals / 目标

- [x] 生成命令行自动补全脚本
- [x] 支持多种 Shell: Bash, Zsh, Fish, PowerShell, Elvish
- [x] 自动检测当前 Shell 类型
- [x] 自动添加 source 语句到对应的 rc 文件

## Scope / 范围

### In Scope / 范围内

- 支持 5 种主流 Shell: Bash, Zsh, Fish, PowerShell, Elvish
- 自动检测 Shell 类型 (通过 $SHELL 环境变量)
- 生成补全脚本到默认目录 (~/.config/l/completions 或 Shell 特定目录)
- 自动追加 source 行到 Shell 配置文件 (.bashrc, .zshrc 等)
- 支持 --print-only 仅打印脚本内容
- 支持自定义输出目录

### Out of Scope / 范围外

- 自定义补全行为 (仅依赖 clap_complete 生成)
- Shell 配置文件的备份/恢复
- Windows CMD 支持

## Constraints / 约束条件

- 依赖 clap_complete crate 生成补全脚本
- 需要写入用户目录权限
- 追加 rc 文件时需检查是否已存在 source 行，避免重复

## Acceptance Criteria / 验收标准

- [x] `l completion` 能自动检测 Shell 并生成补全脚本
- [x] `l completion --shell zsh` 能指定生成 Zsh 补全脚本
- [x] `l completion --output-dir /tmp` 能指定输出目录
- [x] `l completion --print-only` 能仅打印脚本内容不修改 rc 文件
- [x] 补全脚本生成后自动添加到对应 rc 文件

## Implementation / 实现

- **文件**: `src/commands/completion/completion.rs`
- **命令**: `l completion [--shell bash/zsh/fish/powershell/elvish] [--output-dir DIR] [--print-only]`
- **参数**:
  - `--shell`: 指定 Shell 类型，可选 bash/zsh/fish/powershell/elvish
  - `--output-dir`: 指定补全脚本输出目录
  - `--print-only`: 仅打印脚本内容，不修改 rc 文件
- **状态**: ✅ 已完成

## Open Questions / 待澄清问题

- (无)
