aboutsummaryrefslogtreecommitdiff
path: root/src/cmds
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-05 23:38:02 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-05 23:38:02 +0800
commit072175e5b1754ce8a62925aeff4676cbf4693377 (patch)
tree3de71da8b984ddfae62cd6d37bae01db519e76c9 /src/cmds
parent96e19f1b28e9ad3a58864b41a9d6e25ed255dac6 (diff)
Update contributing docs and command development guideHEADdev
Diffstat (limited to 'src/cmds')
-rw-r--r--src/cmds/README.md54
-rw-r--r--src/cmds/README_zh_CN.md67
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` 检查编译错误
- 运行命令测试功能