aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-03 20:30:33 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-03 20:38:02 +0800
commitfc0df246c2f55985de1813a9c30eb0c6e61c8a99 (patch)
tree122187b5013b0021ca86fd830e5c170424dcab01
parentf7862affd74ac3b129f9e9791a4cd4e1c7e3e6d1 (diff)
feat(cli): add dynamic completion scripts and global helpwip/mingling-cli-ux
Enable the dispatch_tree and comp features to generate completion scripts during build and register global help and completion support in the main entry point.
-rw-r--r--mingling_cli/Cargo.lock1
-rw-r--r--mingling_cli/Cargo.toml4
-rw-r--r--mingling_cli/build.rs5
-rw-r--r--mingling_cli/help/help.txt3
-rw-r--r--mingling_cli/src/linter.rs23
-rw-r--r--mingling_cli/src/main.rs19
-rw-r--r--mingling_cli/src/metadata.rs3
7 files changed, 31 insertions, 27 deletions
diff --git a/mingling_cli/Cargo.lock b/mingling_cli/Cargo.lock
index 6d390e2..5a0dcd0 100644
--- a/mingling_cli/Cargo.lock
+++ b/mingling_cli/Cargo.lock
@@ -301,6 +301,7 @@ name = "mingling_core"
version = "0.3.0"
dependencies = [
"just_fmt 0.2.0",
+ "just_template",
"might_be_async",
"mingling_pathf",
]
diff --git a/mingling_cli/Cargo.toml b/mingling_cli/Cargo.toml
index 9ee8fa0..4dfea20 100644
--- a/mingling_cli/Cargo.toml
+++ b/mingling_cli/Cargo.toml
@@ -25,7 +25,9 @@ features = [
"extras",
"picker",
"pathf",
+ "dispatch_tree",
"async",
+ "comp"
]
[build-dependencies.mingling]
@@ -33,6 +35,8 @@ path = "../mingling"
features = [
"build",
"pathf",
+ "dispatch_tree",
+ "comp"
]
[dependencies]
diff --git a/mingling_cli/build.rs b/mingling_cli/build.rs
index ec4f208..3ba921b 100644
--- a/mingling_cli/build.rs
+++ b/mingling_cli/build.rs
@@ -1,4 +1,4 @@
-use mingling::build::analyze_and_build_type_mapping;
+use mingling::build::{analyze_and_build_type_mapping, build_comp_scripts};
pub mod pre;
@@ -6,6 +6,9 @@ fn main() {
// Perform path analysis and build type mapping table
analyze_and_build_type_mapping().ok();
+ // Generate Mingling CLI Completion Scripts
+ build_comp_scripts("mingling-cli").unwrap();
+
// Generate lint registry
pre::gen_mod_file().unwrap();
pre::gen_lint_registry().unwrap();
diff --git a/mingling_cli/help/help.txt b/mingling_cli/help/help.txt
index e69de29..85a4fb7 100644
--- a/mingling_cli/help/help.txt
+++ b/mingling_cli/help/help.txt
@@ -0,0 +1,3 @@
+USAGE: mling [GLOBAL_FLAGS] [COMMAND] [ARGS...]
+
+GLOBAL_FLAGS:
diff --git a/mingling_cli/src/linter.rs b/mingling_cli/src/linter.rs
index 859ffc5..8be45c8 100644
--- a/mingling_cli/src/linter.rs
+++ b/mingling_cli/src/linter.rs
@@ -1,30 +1,11 @@
-use mingling::{
- Program,
- macros::{chain, dispatcher, entry, program_setup},
-};
+use mingling::macros::{chain, dispatcher, entry};
-use crate::{
- linter::cmd_mlint::{CMDLint, EntryLint},
- metadata::setup::ResUsingJson,
-};
+use crate::{linter::cmd_mlint::EntryLint, metadata::setup::ResUsingJson};
pub mod cmd_mlint;
pub mod mlint_attr;
pub mod mlint_report;
-#[program_setup]
-pub fn mingling_linter_setup(program: &mut Program<crate::ThisProgram>) {
- program.with_setup(MinglingLinterCommandSetup);
-}
-
-#[program_setup]
-pub fn mingling_linter_command_setup(program: &mut Program<crate::ThisProgram>) {
- program.with_dispatcher(CMDLint);
- program.with_dispatcher(CMDLinterSupportRustAnalyzer);
- program.with_dispatcher(CMDLinterSupportRustAnalyzerWithClippy);
- program.with_dispatcher(CMDLinterSupportRustAnalyzerWithCheck);
-}
-
// Aliases
dispatcher!("ra-lint-clippy",
diff --git a/mingling_cli/src/main.rs b/mingling_cli/src/main.rs
index c822a12..149093c 100644
--- a/mingling_cli/src/main.rs
+++ b/mingling_cli/src/main.rs
@@ -1,6 +1,8 @@
-use crate::{linter::MinglingLinterSetup, metadata::MinglingMetadataSetup};
+use crate::metadata::MinglingMetadataSetup;
use mingling::{
- macros::gen_program,
+ ShellContext, Suggest,
+ consts::HELP_FLAG,
+ macros::{completion, gen_program, help, suggest},
setup::{ExitCodeSetup, picker::HelpFlagSetup},
};
@@ -20,10 +22,21 @@ async fn main() {
program.with_setup(ExitCodeSetup::default());
program.with_setup(MinglingMetadataSetup);
- program.with_setup(MinglingLinterSetup);
// Exec
program.exec_and_exit().await;
}
+#[help]
+pub fn help_global(_: EntryFallback) -> String {
+ include_str!("../help/help.txt").to_string()
+}
+
+#[completion(EntryFallback)]
+pub fn complete_global(_ctx: &ShellContext) -> Suggest {
+ suggest! {
+ HELP_FLAG: "Show help messages"
+ }
+}
+
gen_program!();
diff --git a/mingling_cli/src/metadata.rs b/mingling_cli/src/metadata.rs
index 2e7aeef..f11ae36 100644
--- a/mingling_cli/src/metadata.rs
+++ b/mingling_cli/src/metadata.rs
@@ -4,7 +4,7 @@ use mingling::{
macros::{buffer, group, program_setup, r_println, renderer, renderify},
};
-use crate::metadata::{cmd_metadata::CMDMetadata, setup::CargoMetadataSetup};
+use crate::metadata::setup::CargoMetadataSetup;
pub mod cmd_metadata;
pub mod setup;
@@ -12,7 +12,6 @@ pub mod setup;
#[program_setup]
pub fn mingling_metadata_setup(program: &mut Program<crate::ThisProgram>) {
program.with_setup(CargoMetadataSetup);
- program.with_dispatcher(CMDMetadata);
}
group!(Metadata);