diff options
Diffstat (limited to 'mingling_cli/src')
| -rw-r--r-- | mingling_cli/src/linter.rs | 64 | ||||
| -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.rs | 63 | ||||
| -rw-r--r-- | mingling_cli/src/main.rs | 33 | ||||
| -rw-r--r-- | mingling_cli/src/metadata.rs | 3 | ||||
| -rw-r--r-- | mingling_cli/src/metadata/cmd_metadata.rs | 10 | ||||
| -rw-r--r-- | mingling_cli/src/metadata/setup.rs | 32 | ||||
| -rw-r--r-- | mingling_cli/src/pkg_mgr.rs | 0 | ||||
| -rw-r--r-- | mingling_cli/src/proj_mgr.rs | 0 |
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 |
