aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_cli/src')
-rw-r--r--mingling_cli/src/linter.rs64
-rw-r--r--mingling_cli/src/linter/cmd_lint.rs (renamed from mingling_cli/src/linter/cmd_mlint.rs)8
-rw-r--r--mingling_cli/src/linter/cmd_ra_lints.rs63
-rw-r--r--mingling_cli/src/main.rs33
-rw-r--r--mingling_cli/src/metadata.rs3
-rw-r--r--mingling_cli/src/metadata/cmd_metadata.rs10
-rw-r--r--mingling_cli/src/metadata/setup.rs32
-rw-r--r--mingling_cli/src/pkg_mgr.rs0
-rw-r--r--mingling_cli/src/proj_mgr.rs0
9 files changed, 137 insertions, 76 deletions
diff --git a/mingling_cli/src/linter.rs b/mingling_cli/src/linter.rs
index 859ffc5..45111b6 100644
--- a/mingling_cli/src/linter.rs
+++ b/mingling_cli/src/linter.rs
@@ -1,64 +1,4 @@
-use mingling::{
- Program,
- macros::{chain, dispatcher, entry, program_setup},
-};
-
-use crate::{
- linter::cmd_mlint::{CMDLint, EntryLint},
- metadata::setup::ResUsingJson,
-};
-
-pub mod cmd_mlint;
+pub mod cmd_lint;
+pub mod cmd_ra_lints;
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",
- CMDLinterSupportRustAnalyzerWithClippy => EntryLinterSupportRustAnalyzerWithClippy
-);
-
-dispatcher!("ra-lint-check",
- CMDLinterSupportRustAnalyzerWithCheck => EntryLinterSupportRustAnalyzerWithCheck
-);
-
-dispatcher!("ra-lint",
- CMDLinterSupportRustAnalyzer => EntryLinterSupportRustAnalyzer
-);
-
-#[chain]
-pub fn handle_ra_lint(_: EntryLinterSupportRustAnalyzer, use_json: &mut ResUsingJson) -> EntryLint {
- use_json.using = true;
- entry!("--message-format=json")
-}
-
-#[chain]
-pub fn handle_ra_lint_check(
- _: EntryLinterSupportRustAnalyzerWithCheck,
- use_json: &mut ResUsingJson,
-) -> EntryLint {
- use_json.using = true;
- entry!("--message-format=json", "--with-checker=cargo,check")
-}
-
-#[chain]
-pub fn handle_ra_lint_clippy(
- _: EntryLinterSupportRustAnalyzerWithClippy,
- use_json: &mut ResUsingJson,
-) -> EntryLint {
- use_json.using = true;
- entry!("--message-format=json", "--with-checker=cargo,clippy")
-}
diff --git a/mingling_cli/src/linter/cmd_mlint.rs b/mingling_cli/src/linter/cmd_lint.rs
index 1dfd02b..57a78ad 100644
--- a/mingling_cli/src/linter/cmd_mlint.rs
+++ b/mingling_cli/src/linter/cmd_lint.rs
@@ -2,12 +2,18 @@ use crate::linter::mlint_report::{MlintReport, StateLintReports};
use cargo_metadata::Metadata;
use mingling::LazyRes;
use mingling::consts::REMAINS;
-use mingling::macros::{arg, chain, dispatcher, pack};
+use mingling::macros::{arg, chain, dispatcher, metadata, pack};
+use mingling::metadata::Description;
use mingling::picker::EntryPicker;
use tokio::task::JoinSet;
dispatcher!("lint", CMDLint => EntryLint);
+#[metadata(EntryLint)]
+pub fn desc_lint() -> Description {
+ "Mingling Linter".to_string().into()
+}
+
/// Main linting function that processes all packages in the metadata.
///
/// Iterates through all packages and their targets (e.g., binaries, libraries, tests),
diff --git a/mingling_cli/src/linter/cmd_ra_lints.rs b/mingling_cli/src/linter/cmd_ra_lints.rs
new file mode 100644
index 0000000..733d611
--- /dev/null
+++ b/mingling_cli/src/linter/cmd_ra_lints.rs
@@ -0,0 +1,63 @@
+use mingling::{
+ macros::{chain, dispatcher, entry, metadata},
+ metadata::Description,
+};
+
+use crate::{linter::cmd_lint::EntryLint, metadata::setup::ResUsingJson};
+
+// Aliases
+
+dispatcher!("ra-lint-clippy",
+ CMDLinterSupportRustAnalyzerWithClippy => EntryLinterSupportRustAnalyzerWithClippy
+);
+
+dispatcher!("ra-lint-check",
+ CMDLinterSupportRustAnalyzerWithCheck => EntryLinterSupportRustAnalyzerWithCheck
+);
+
+dispatcher!("ra-lint",
+ CMDLinterSupportRustAnalyzer => EntryLinterSupportRustAnalyzer
+);
+
+#[chain]
+pub fn handle_ra_lint(_: EntryLinterSupportRustAnalyzer, use_json: &mut ResUsingJson) -> EntryLint {
+ use_json.using = true;
+ entry!("--message-format=json")
+}
+
+#[chain]
+pub fn handle_ra_lint_check(
+ _: EntryLinterSupportRustAnalyzerWithCheck,
+ use_json: &mut ResUsingJson,
+) -> EntryLint {
+ use_json.using = true;
+ entry!("--message-format=json", "--with-checker=cargo,check")
+}
+
+#[chain]
+pub fn handle_ra_lint_clippy(
+ _: EntryLinterSupportRustAnalyzerWithClippy,
+ use_json: &mut ResUsingJson,
+) -> EntryLint {
+ use_json.using = true;
+ entry!("--message-format=json", "--with-checker=cargo,clippy")
+}
+
+#[metadata(EntryLinterSupportRustAnalyzer)]
+pub fn desc_ra_lint() -> Description {
+ "Run `mling lint` and output the results".to_string().into()
+}
+
+#[metadata(EntryLinterSupportRustAnalyzerWithCheck)]
+pub fn desc_ra_lint_check() -> Description {
+ "Run `mling lint` and `cargo check`, and output the combined results"
+ .to_string()
+ .into()
+}
+
+#[metadata(EntryLinterSupportRustAnalyzerWithClippy)]
+pub fn desc_ra_lint_clippy() -> Description {
+ "Run `mling lint` and `cargo clippy`, and output the combined results"
+ .to_string()
+ .into()
+}
diff --git a/mingling_cli/src/main.rs b/mingling_cli/src/main.rs
index c822a12..cb41368 100644
--- a/mingling_cli/src/main.rs
+++ b/mingling_cli/src/main.rs
@@ -1,6 +1,14 @@
-use crate::{linter::MinglingLinterSetup, metadata::MinglingMetadataSetup};
+use crate::metadata::{
+ MinglingMetadataSetup,
+ setup::{
+ ARG_ALL_FEATURES, ARG_FEATURES, ARG_MANIFEST_PATH, ARG_MESSAGE_FORMAT,
+ ARG_NO_DEFAULT_FEATURES, ARG_NO_DEPS,
+ },
+};
use mingling::{
- macros::gen_program,
+ ShellContext, Suggest,
+ consts::HELP_FLAG,
+ macros::{completion, gen_program, help, suggest},
setup::{ExitCodeSetup, picker::HelpFlagSetup},
};
@@ -10,6 +18,8 @@ pub mod linter;
pub mod lints;
pub mod message;
pub mod metadata;
+pub mod pkg_mgr;
+pub mod proj_mgr;
#[tokio::main]
async fn main() {
@@ -20,10 +30,27 @@ 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",
+ ARG_FEATURES.clone(): "List of features to enable",
+ ARG_MANIFEST_PATH.clone(): "Custom path to Cargo.toml",
+ ARG_MESSAGE_FORMAT.clone(): "Output message format",
+ ARG_ALL_FEATURES: "Enable all features",
+ ARG_NO_DEFAULT_FEATURES: "Disable default features",
+ ARG_NO_DEPS: "Do not include dependencies in metadata",
+ }
+}
+
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);
diff --git a/mingling_cli/src/metadata/cmd_metadata.rs b/mingling_cli/src/metadata/cmd_metadata.rs
index 18241a2..3ee9f09 100644
--- a/mingling_cli/src/metadata/cmd_metadata.rs
+++ b/mingling_cli/src/metadata/cmd_metadata.rs
@@ -1,13 +1,21 @@
use cargo_metadata::Metadata;
use mingling::{
LazyRes,
- macros::{chain, dispatcher, pack},
+ macros::{chain, dispatcher, metadata, pack},
+ metadata::Description,
};
use crate::metadata::setup::ResMetadata;
dispatcher!("metadata");
+#[metadata(EntryMetadata)]
+pub fn desc_metadata() -> Description {
+ "Check your workspace metadata using 'cargo metadata'"
+ .to_string()
+ .into()
+}
+
pack!(ResultMetadata = ResMetadata);
#[chain]
diff --git a/mingling_cli/src/metadata/setup.rs b/mingling_cli/src/metadata/setup.rs
index 198baf1..d9836fd 100644
--- a/mingling_cli/src/metadata/setup.rs
+++ b/mingling_cli/src/metadata/setup.rs
@@ -4,7 +4,7 @@ use cargo_metadata::{CargoOpt, MetadataCommand};
use mingling::{
LazyInit, Program,
macros::program_setup,
- picker::{IntoPicker, value::Flag},
+ picker::{IntoPicker, PickerArg, value::Flag},
prelude::*,
res::ResCurrentDir,
};
@@ -37,6 +37,24 @@ pub struct ResUsingJson {
pub using: bool,
}
+/// Argument: list of features to enable
+pub static ARG_FEATURES: PickerArg<Vec<String>> = arg![features: Vec<String>];
+
+/// Argument: custom path to Cargo.toml
+pub static ARG_MANIFEST_PATH: PickerArg<Option<String>> = arg![manifest_path: Option<String>];
+
+/// Argument: output message format
+pub static ARG_MESSAGE_FORMAT: PickerArg<String> = arg![message_format: String];
+
+/// Argument: enable all features
+pub static ARG_ALL_FEATURES: PickerArg<Flag> = arg![all_features: Flag];
+
+/// Argument: disable default features
+pub static ARG_NO_DEFAULT_FEATURES: PickerArg<Flag> = arg![no_default_features: Flag];
+
+/// Argument: do not include dependencies in metadata
+pub static ARG_NO_DEPS: PickerArg<Flag> = arg![no_deps: Flag];
+
impl ResMetadata {
/// Returns a reference to the parsed `cargo metadata`.
///
@@ -64,12 +82,12 @@ pub fn cargo_metadata_setup(program: &mut Program<crate::ThisProgram>) {
no_default_features,
no_deps,
) = args
- .pick(&arg![features: Vec<String>])
- .pick(&arg![manifest_path: Option<String>])
- .pick_or(&arg![message_format: String], || "disable".to_string())
- .pick(&arg![all_features: Flag])
- .pick(&arg![no_default_features: Flag])
- .pick(&arg![no_deps: Flag])
+ .pick(&ARG_FEATURES)
+ .pick(&ARG_MANIFEST_PATH)
+ .pick_or(&ARG_MESSAGE_FORMAT, || "disable".to_string())
+ .pick(&ARG_ALL_FEATURES)
+ .pick(&ARG_NO_DEFAULT_FEATURES)
+ .pick(&ARG_NO_DEPS)
.unwrap();
// Is Using Json
diff --git a/mingling_cli/src/pkg_mgr.rs b/mingling_cli/src/pkg_mgr.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mingling_cli/src/pkg_mgr.rs
diff --git a/mingling_cli/src/proj_mgr.rs b/mingling_cli/src/proj_mgr.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mingling_cli/src/proj_mgr.rs