diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-04-05 23:38:02 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-04-05 23:38:02 +0800 |
| commit | 072175e5b1754ce8a62925aeff4676cbf4693377 (patch) | |
| tree | 3de71da8b984ddfae62cd6d37bae01db519e76c9 /src/cmds | |
| parent | 96e19f1b28e9ad3a58864b41a9d6e25ed255dac6 (diff) | |
Diffstat (limited to 'src/cmds')
| -rw-r--r-- | src/cmds/README.md | 54 | ||||
| -rw-r--r-- | src/cmds/README_zh_CN.md | 67 |
2 files changed, 80 insertions, 41 deletions
diff --git a/src/cmds/README.md b/src/cmds/README.md index 6e4b9f8..eef8209 100644 --- a/src/cmds/README.md +++ b/src/cmds/README.md @@ -89,30 +89,42 @@ pub struct JVSumOutput { - Implements command auto-completion - Naming: Same as command name - Location: `src/cmds/comp/{command_name}.rs` -- Function signature must be `pub fn comp(ctx: CompletionContext) -> Option<Vec<String>>` +- Function signature must be `pub fn comp(ctx: CompletionContext) -> CompletionResult` -Example: helpdoc command completion script +Example: workspace_alias command completion script ```rust -// src/cmds/comp/helpdoc.rs -use crate::systems::{comp::context::CompletionContext, helpdoc}; - -pub fn comp(ctx: CompletionContext) -> Option<Vec<String>> { - if ctx.previous_word == "helpdoc" { - return Some( - helpdoc::get_helpdoc_list() - .iter() - .map(|s| s.to_string()) - .collect(), - ); +// src/cmds/comp/workspace_alias.rs +use comp_system_macros::{file_suggest, suggest}; +use rust_i18n::t; + +use crate::systems::comp::{context::CompletionContext, result::CompletionResult}; + +pub fn comp(ctx: CompletionContext) -> CompletionResult { + if ctx.current_word.starts_with('-') { + return suggest!( + "-i" = t!("workspace_alias.comp.insert").trim(), + "--insert" = t!("workspace_alias.comp.insert").trim(), + "-Q" = t!("workspace_alias.comp.query").trim(), + "--query" = t!("workspace_alias.comp.query").trim(), + "-e" = t!("workspace_alias.comp.erase").trim(), + "--erase" = t!("workspace_alias.comp.erase").trim(), + "--to" = t!("workspace_alias.comp.to").trim() + ) + .into(); } - None + + if ctx.previous_word == "--to" { + return suggest!().into(); + } + + file_suggest!() } ``` **Completion Script Return Value Explanation:** -- Return `None`: System will suggest file list -- Return `Some(Vec::new())`: No suggestions -- Return `Some(vec!["suggestion1", "suggestion2"])`: Suggest specific content +- Return `file_suggest!()`: System will suggest file list +- Return `suggest!().into()`: No suggestions +- Return `suggest!("--show-desc" = "desc", "--no-desc").into()`: Suggest specific content ## Command Execution Phases @@ -219,6 +231,12 @@ pub async fn render(data: &JVSumOutput) -> Result<JVRenderResult, CmdRenderError - Create `.rs` files in respective dirs - Impl Argument, Input, Collect, Output structs + You can use the following components as default structures: + - JVEmptyArgument + - JVEmptyInput + - JVEmptyCollect + - JVNoneOutput + 3. **Implement Command Logic** - Create cmd impl file in `cmd/` dir - Use cmd template (view via `cargo doc --no-deps`) @@ -230,7 +248,7 @@ pub async fn render(data: &JVSumOutput) -> Result<JVRenderResult, CmdRenderError 5. **Implement Completion Script (Optional)** - Create completion script file in `comp/` dir - - Implement `comp` function with signature `pub fn comp(ctx: CompletionContext) -> Option<Vec<String>>` + - Implement `comp` function with signature `pub fn comp(ctx: CompletionContext) -> CompletionResult` 6. **Test Command** - Use `cargo build` to check compile errors diff --git a/src/cmds/README_zh_CN.md b/src/cmds/README_zh_CN.md index 312d1c3..2e41c88 100644 --- a/src/cmds/README_zh_CN.md +++ b/src/cmds/README_zh_CN.md @@ -89,30 +89,43 @@ pub struct JVSumOutput { - 实现命令的自动补全功能 - 命名规范:与命令同名 - 位置:`src/cmds/comp/{command_name}.rs` -- 函数签名必须为 `pub fn comp(ctx: CompletionContext) -> Option<Vec<String>>` +- 函数签名必须为 `pub fn comp(ctx: CompletionContext) -> CompletionResult` -示例:helpdoc 命令的补全脚本 +示例:workspace_alias 命令的补全脚本 ```rust -// src/cmds/comp/helpdoc.rs -use crate::systems::{comp::context::CompletionContext, helpdoc}; - -pub fn comp(ctx: CompletionContext) -> Option<Vec<String>> { - if ctx.previous_word == "helpdoc" { - return Some( - helpdoc::get_helpdoc_list() - .iter() - .map(|s| s.to_string()) - .collect(), - ); +// src/cmds/comp/workspace_alias.rs +use comp_system_macros::{file_suggest, suggest}; +use rust_i18n::t; + +use crate::systems::comp::{context::CompletionContext, result::CompletionResult}; + +pub fn comp(ctx: CompletionContext) -> CompletionResult { + if ctx.current_word.starts_with('-') { + return suggest!( + "-i" = t!("workspace_alias.comp.insert").trim(), + "--insert" = t!("workspace_alias.comp.insert").trim(), + "-Q" = t!("workspace_alias.comp.query").trim(), + "--query" = t!("workspace_alias.comp.query").trim(), + "-e" = t!("workspace_alias.comp.erase").trim(), + "--erase" = t!("workspace_alias.comp.erase").trim(), + "--to" = t!("workspace_alias.comp.to").trim() + ) + .into(); } - None + + if ctx.previous_word == "--to" { + return suggest!().into(); + } + + file_suggest!() } ``` **补全脚本返回值说明:** -- 返回 `None`:系统会建议文件列表 -- 返回 `Some(Vec::new())`:不进行任何建议 -- 返回 `Some(vec!["suggestion1", "suggestion2"])`:建议具体内容 + +- 返回 `file_suggest!()`:系统会建议文件列表 +- 返回 `suggest!().into()`:不进行任何建议 +- 返回 `suggest!("--show-desc" = "desc", "--no-desc").into()`:建议具体内容 ## 命令执行阶段 @@ -214,25 +227,33 @@ pub async fn render(data: &JVSumOutput) -> Result<JVRenderResult, CmdRenderError 1. **规划命令结构** - 确定命令名称和参数 - 设计输入/输出数据结构 - + 2. **创建组件文件** - 在相应目录创建 `.rs` 文件 - 实现 Argument、Input、Collect、Output 结构体 - -3. **实现命令逻辑** + + 可以使用如下组件作为默认结构: + + - JVEmptyArgument + - JVEmptyInput + - JVEmptyCollect + - JVNoneOutput + +3. **实现命令逻辑** - 在 `cmd/` 目录创建命令实现文件 - 使用命令模板(通过 `cargo doc --no-deps` 生成文档查看完整模板) - 实现 `prepare`、`collect`、`exec` 函数 - + 4. **实现渲染器** - 在 `renderer/` 目录创建渲染器文件 - 使用 `#[result_renderer]` 宏 5. **实现补全脚本 (可选)** - 在 `comp/` 目录创建补全脚本文件 - - 实现 `comp` 函数,签名必须为 `pub fn comp(ctx: CompletionContext) -> Option<Vec<String>>` - + - 实现 `comp` 函数,签名必须为 `pub fn comp(ctx: CompletionContext) -> CompletionResult` + 6. **测试命令** + - 使用 `cargo build` 检查编译错误 - 运行命令测试功能 |
