From 232f31c6649e6348a5b0b64362f185f7f4db1dc0 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sun, 21 Jun 2026 18:33:32 +0800 Subject: Add intro content and merge getting started page --- docs/README.md | 33 ++++++++++++++++ docs/_sidebar.md | 3 +- docs/_zh_CN/README.md | 33 ++++++++++++++++ docs/_zh_CN/_sidebar.md | 3 +- docs/_zh_CN/pages/1-getting-started.md | 69 ++++++++++++++++++++++++++++++++++ docs/_zh_CN/pages/1-intro.md | 32 ---------------- docs/_zh_CN/pages/2-getting-started.md | 62 ------------------------------ docs/pages/1-getting-started.md | 69 ++++++++++++++++++++++++++++++++++ docs/pages/1-intro.md | 32 ---------------- docs/pages/2-getting-started.md | 62 ------------------------------ 10 files changed, 206 insertions(+), 192 deletions(-) create mode 100644 docs/_zh_CN/pages/1-getting-started.md delete mode 100644 docs/_zh_CN/pages/1-intro.md delete mode 100644 docs/_zh_CN/pages/2-getting-started.md create mode 100644 docs/pages/1-getting-started.md delete mode 100644 docs/pages/1-intro.md delete mode 100644 docs/pages/2-getting-started.md diff --git a/docs/README.md b/docs/README.md index 15c072e..4e327c3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,3 +3,36 @@

This is documentation for the Mingling command-line framework, maintained by Weicao-CatilGrass

+ +## Intro + +If you're troubled by these issues — + +1. Too many subcommands make `main.rs` bloat rapidly; +2. Handler logic mixed with side effects; +3. Logging, auth, and other cross-cutting concerns are hard to inject non-invasively; +4. Maintaining shell completion scripts for multiple platforms wears you out; +5. Global resources everywhere, making testing difficult. + +… then you've come to the right place. + +Of course, if you're just curious about "how to write maintainable CLIs in Rust," you've also come to the right place — it'll be fun. + +## What is Mingling? + +> **Mìng Lìng** is the pinyin of the Chinese word **命令**, +> which translates to **Command** in English. + +Mingling is a CLI framework built with Rust. It's free, open-source, and licensed under the permissive MIT / Apache 2.0 license. + +Mingling's design goals: + +- **Extensible**: From 3 subcommands to 30, same pattern, no framework swap +- **Decoupled**: Parse args once, write business logic once, define output format once. Each independent. +- **Type-driven**: Clear, typed data flows through the pipeline — not `Vec` +- **Lightweight deps**: Minimal core deps, low cost to pull in; advanced features on demand, no compile-time drag +- **Efficient**: Dispatch logic generated at compile time, no unnecessary runtime overhead + +--- + +Alright, wanna give it a try? diff --git a/docs/_sidebar.md b/docs/_sidebar.md index d60a631..47f46b8 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -1,6 +1,5 @@ - [Welcome!](README) -* [Introduction](pages/1-intro) -* [Getting Started](pages/2-getting-started) +* [Getting Started](pages/1-getting-started) * Other * [Features](pages/other/features) * [Naming Conventions](pages/other/naming_rule) diff --git a/docs/_zh_CN/README.md b/docs/_zh_CN/README.md index b302220..b529a86 100644 --- a/docs/_zh_CN/README.md +++ b/docs/_zh_CN/README.md @@ -3,3 +3,36 @@

该页面为 Mingling 命令行框架的中文文档,由 Weicao-CatilGrass 维护

+ +## 前言 + +如果你正被这些问题困扰—— + +1. 子命令一多,`main.rs` 就迅速膨胀; +2. Handler 中的逻辑与副作用混杂在一起; +3. 日志、鉴权等横切关注点难以无侵入地插入; +4. 为多个平台维护 shell 补全脚本令人心力交瘁; +5. 全局资源到处都是,测试非常困难。 + +…… 那么,你来对地方了。 + +当然,如果只是对「怎么用 Rust 写出好维护的 CLI」这件事感兴趣,那你更来对地方了 —— 它会很有意思的。 + +## 什么是 Mingling? + +> **Mìng Lìng** 是中文 **命令** 的汉语拼音, +> 对应的英文单词是 **Command**。 + +Mingling 是一个用 Rust 构建的 CLI 框架。它免费、开源,且使用宽松的 MIT / Apache 2.0 开源协议。 + +Mingling 的设计目标: + +- **可扩展**:从 3 个子命令到 30 个,同一套模式,不换框架 +- **解耦**:参数解析写一次,业务逻辑写一次,输出格式写一次。各不相干 +- **类型驱动**:整个流水线上传递的是清晰、类型化的数据,而非 `Vec` +- **轻量依赖**:核心功能依赖少,引入负担低;按需启用高级特性,不拖慢编译 +- **高效**:编译期生成分发逻辑,运行时没有不必要的开销 + +--- + +好了,想来试试么? diff --git a/docs/_zh_CN/_sidebar.md b/docs/_zh_CN/_sidebar.md index 1fd2e13..620b11c 100644 --- a/docs/_zh_CN/_sidebar.md +++ b/docs/_zh_CN/_sidebar.md @@ -1,6 +1,5 @@ - [Welcome!](README) -* [介绍](pages/1-intro) -* [起步](pages/2-getting-started) +* [起步](pages/1-getting-started) * 其他 * [特性](pages/other/features) * [命名规范](pages/other/naming_rule) diff --git a/docs/_zh_CN/pages/1-getting-started.md b/docs/_zh_CN/pages/1-getting-started.md new file mode 100644 index 0000000..2961464 --- /dev/null +++ b/docs/_zh_CN/pages/1-getting-started.md @@ -0,0 +1,69 @@ +

起步

+ +## 创建一个新项目 + +```bash +cargo new my-cli +cd my-cli +``` + +## 添加依赖 + +在 `Cargo.toml` 写入如下内容 + +```toml +[dependencies.mingling] +version = "0.2" +features = [] +``` + +## 启用特性 + +**Mingling** 默认所有特性关闭,且不提供类似 `full` 的全开特性。 + +因为部分特性会 **直接影响整个生命周期的行为**,需要你按需启用,例如: + +```toml +[dependencies.mingling] +version = "0.2" +features = [ + "parser", + "comp", +] +``` + +> [!NOTE] +> 请前往 [docs.rs](https://docs.rs/mingling/latest/mingling/feature/index.html) 或 [特性](pages/other/features) 以了解所有特性 + +## 编写基本入口 + +编写 `src/main.rs`,写入以下代码: + +```rust +use mingling::prelude::*; + +fn main() { + let mut program = ThisProgram::new(); + + program.exec_and_exit(); +} + +gen_program!(); +``` + +> [!IMPORTANT] +> 文档中几乎所有 Rust 代码块都已在 CI 流程中编译通过,可以保证可用性。 +> +> 但以 `// NOT VERIFIED` 开头的代码块 **未被验证**。 +> +> 想确认哪些 `*.md` 文件被编译过?请看 [`verified-docs.toml`](https://github.com/mingling-rs/mingling/blob/main/verified-docs.toml) + +## 编译验证 + +```plaintext +~# cargo check +``` + +--- + +一切无误后,开始写点什么吧! diff --git a/docs/_zh_CN/pages/1-intro.md b/docs/_zh_CN/pages/1-intro.md deleted file mode 100644 index 7210d2e..0000000 --- a/docs/_zh_CN/pages/1-intro.md +++ /dev/null @@ -1,32 +0,0 @@ -

介绍

- -如果你正被这些问题困扰—— - -1. 子命令一多,`main.rs` 就迅速膨胀; -2. Handler 中的逻辑与副作用混杂在一起; -3. 日志、鉴权等横切关注点难以无侵入地插入; -4. 为多个平台维护 shell 补全脚本令人心力交瘁; -5. 全局资源到处都是,测试非常困难。 - -…… 那么,你来对地方了。 - -当然,如果只是对「怎么用 Rust 写出好维护的 CLI」这件事感兴趣,那你更来对地方了 —— 它会很有意思的。 - -## 什么是 Mingling? - -> **Mìng Lìng** 是中文 **命令** 的汉语拼音, -> 对应的英文单词是 **Command**。 - -Mingling 是一个用 Rust 构建的 CLI 框架。它免费、开源,且使用宽松的 MIT / Apache 2.0 开源协议。 - -Mingling 的设计目标: - -- **可扩展**:从 3 个子命令到 30 个,同一套模式,不换框架 -- **解耦**:参数解析写一次,业务逻辑写一次,输出格式写一次。各不相干 -- **类型驱动**:整个流水线上传递的是清晰、类型化的数据,而非 `Vec` -- **轻量依赖**:核心功能依赖少,引入负担低;按需启用高级特性,不拖慢编译 -- **高效**:编译期生成分发逻辑,运行时没有不必要的开销 - ---- - -好了,想来试试么? diff --git a/docs/_zh_CN/pages/2-getting-started.md b/docs/_zh_CN/pages/2-getting-started.md deleted file mode 100644 index 62eb94b..0000000 --- a/docs/_zh_CN/pages/2-getting-started.md +++ /dev/null @@ -1,62 +0,0 @@ -

起步

- -## 创建一个新项目 - -```bash -cargo new my-cli -cd my-cli -``` - -## 添加依赖 - -在 `Cargo.toml` 写入如下内容 - -```toml -[dependencies.mingling] -version = "0.2" -features = [] -``` - -## 启用特性 - -**Mingling** 默认所有特性关闭,且不提供类似 `full` 的全开特性。 - -因为部分特性会 **直接影响整个生命周期的行为**,需要你按需启用,例如: - -```toml -[dependencies.mingling] -version = "0.2" -features = [ - "parser", - "comp", -] -``` - -> [!NOTE] -> 请前往 [docs.rs](https://docs.rs/mingling/latest/mingling/feature/index.html) 或 [特性](pages/other/features) 以了解所有特性 - -## 编写基本入口 - -编写 `src/main.rs`,写入以下代码: - -```rust -use mingling::prelude::*; - -fn main() { - let mut program = ThisProgram::new(); - - program.exec_and_exit(); -} - -gen_program!(); -``` - -## 编译验证 - -```plaintext -~# cargo check -``` - ---- - -一切无误后,开始写点什么吧! diff --git a/docs/pages/1-getting-started.md b/docs/pages/1-getting-started.md new file mode 100644 index 0000000..4832191 --- /dev/null +++ b/docs/pages/1-getting-started.md @@ -0,0 +1,69 @@ +

Getting Started

+ +## Create a New Project + +```bash +cargo new my-cli +cd my-cli +``` + +## Add Dependency + +Add the following to `Cargo.toml`: + +```toml +[dependencies.mingling] +version = "0.2" +features = [] +``` + +## Enable Features + +**Mingling** has all features disabled by default and does not provide an all-in-one feature like `full`. + +Some features will **directly affect the behavior of the entire lifecycle**, so you need to enable them as needed, for example: + +```toml +[dependencies.mingling] +version = "0.2" +features = [ + "parser", + "comp", +] +``` + +> [!NOTE] +> Visit [docs.rs](https://docs.rs/mingling/latest/mingling/feature/index.html) or [Features](pages/other/features) to learn about all available features. + +## Write the Basic Entry Point + +Edit `src/main.rs` with the following code: + +```rust +use mingling::prelude::*; + +fn main() { + let mut program = ThisProgram::new(); + + program.exec_and_exit(); +} + +gen_program!(); +``` + +> [!IMPORTANT] +> Almost all Rust code blocks in the documentation have been compiled through the CI pipeline and are guaranteed to be usable. +> +> However, code blocks starting with `// NOT VERIFIED` have **not been verified**. +> +> Want to know which `*.md` files have been compiled? Check [`verified-docs.toml`](https://github.com/mingling-rs/mingling/blob/main/verified-docs.toml) + +## Verify Compilation + +```plaintext +~# cargo check +``` + +--- + +Once everything is good, start building! diff --git a/docs/pages/1-intro.md b/docs/pages/1-intro.md deleted file mode 100644 index edf83bb..0000000 --- a/docs/pages/1-intro.md +++ /dev/null @@ -1,32 +0,0 @@ -

Introduction

- -If you're troubled by these issues — - -1. Too many subcommands make `main.rs` bloat rapidly; -2. Handler logic mixed with side effects; -3. Logging, auth, and other cross-cutting concerns are hard to inject non-invasively; -4. Maintaining shell completion scripts for multiple platforms wears you out; -5. Global resources everywhere, making testing difficult. - -… then you've come to the right place. - -Of course, if you're just curious about "how to write maintainable CLIs in Rust," you've also come to the right place — it'll be fun. - -## What is Mingling? - -> **Mìng Lìng** is the pinyin of the Chinese word **命令**, -> which translates to **Command** in English. - -Mingling is a CLI framework built with Rust. It's free, open-source, and licensed under the permissive MIT / Apache 2.0 license. - -Mingling's design goals: - -- **Extensible**: From 3 subcommands to 30, same pattern, no framework swap -- **Decoupled**: Parse args once, write business logic once, define output format once. Each independent. -- **Type-driven**: Clear, typed data flows through the pipeline — not `Vec` -- **Lightweight deps**: Minimal core deps, low cost to pull in; advanced features on demand, no compile-time drag -- **Efficient**: Dispatch logic generated at compile time, no unnecessary runtime overhead - ---- - -Alright, wanna give it a try? diff --git a/docs/pages/2-getting-started.md b/docs/pages/2-getting-started.md deleted file mode 100644 index 35da464..0000000 --- a/docs/pages/2-getting-started.md +++ /dev/null @@ -1,62 +0,0 @@ -

Getting Started

- -## Create a New Project - -```bash -cargo new my-cli -cd my-cli -``` - -## Add Dependency - -Add the following to `Cargo.toml`: - -```toml -[dependencies.mingling] -version = "0.2" -features = [] -``` - -## Enable Features - -**Mingling** has all features disabled by default and does not provide an all-in-one feature like `full`. - -Some features will **directly affect the behavior of the entire lifecycle**, so you need to enable them as needed, for example: - -```toml -[dependencies.mingling] -version = "0.2" -features = [ - "parser", - "comp", -] -``` - -> [!NOTE] -> Visit [docs.rs](https://docs.rs/mingling/latest/mingling/feature/index.html) or [Features](pages/other/features) to learn about all available features. - -## Write the Basic Entry Point - -Edit `src/main.rs` with the following code: - -```rust -use mingling::prelude::*; - -fn main() { - let mut program = ThisProgram::new(); - - program.exec_and_exit(); -} - -gen_program!(); -``` - -## Verify Compilation - -```plaintext -~# cargo check -``` - ---- - -Once everything is good, start building! -- cgit