diff options
Diffstat (limited to 'mingling_cli/src/linter')
| -rw-r--r-- | mingling_cli/src/linter/cmd_explain.rs | 32 | ||||
| -rw-r--r-- | mingling_cli/src/linter/cmd_lint.rs | 16 | ||||
| -rw-r--r-- | mingling_cli/src/linter/cmd_ra_lints.rs | 6 | ||||
| -rw-r--r-- | mingling_cli/src/linter/mlint_report.rs | 21 | ||||
| -rw-r--r-- | mingling_cli/src/linter/registry.rs | 5 |
5 files changed, 43 insertions, 37 deletions
diff --git a/mingling_cli/src/linter/cmd_explain.rs b/mingling_cli/src/linter/cmd_explain.rs index 5346255..1d99c62 100644 --- a/mingling_cli/src/linter/cmd_explain.rs +++ b/mingling_cli/src/linter/cmd_explain.rs @@ -1,10 +1,7 @@ use crate::{Next, eprintln_cargo, linter::registry::ResLintRegistry}; use mingling::{ - Grouped, LazyRes, RenderResult, Routable, ShellContext, Suggest, SuggestItem, - macros::{ - arg, buffer, chain, completion, dispatcher, metadata, pack, pack_err, r_println, renderer, - routeify, - }, + Grouped, LazyRes, RenderResult, Routable, ShellContext, Suggest, SuggestItem, Wrap, + macros::{arg, buffer, chain, completion, dispatcher, metadata, r_println, renderer, routeify}, metadata::Description, picker::EntryPicker, }; @@ -16,9 +13,14 @@ pub fn desc_explain() -> Description { "Explain the meaning of the specified Lint".into() } -pack!(StateExplainLint = String); -pack_err!(ErrorNoExplainLintProvided); -pack_err!(ErrorNoSuchLint = String); +#[derive(Grouped, Wrap)] +pub struct StateExplainLint(String); + +#[derive(Grouped, Default)] +pub struct ErrorNoExplainLintProvided; + +#[derive(Grouped, Wrap)] +pub struct ErrorNoSuchLint(String); #[derive(Debug, Default, Grouped)] pub struct ResultExplainLint { @@ -33,11 +35,9 @@ pub struct ResultExplainLint { #[chain(routeify)] pub fn handle_explain(args: EntryExplain) -> Next { let lint_name = args - .pick_or_route(&arg![String], || { - ErrorNoExplainLintProvided::default().to_chain() - }) + .pick_or_route(&arg![String], || ErrorNoExplainLintProvided.to_chain()) .to_result()?; - StateExplainLint::new(lint_name).into() + StateExplainLint(lint_name).into() } #[chain] @@ -46,9 +46,9 @@ pub fn handle_state_explain_lint( registry: &mut LazyRes<ResLintRegistry>, ) -> Next { let registry = registry.get_ref(); - let lint_name = p.inner; + let lint_name = p.0; let Some(entry) = registry.lints.iter().find(|l| l.name == lint_name) else { - return ErrorNoSuchLint::new(lint_name).to_chain(); + return ErrorNoSuchLint(lint_name).to_chain(); }; ResultExplainLint { lint_name: entry.name.clone(), @@ -87,7 +87,7 @@ pub fn render_error_no_such_lint( ) -> RenderResult { let mut r = RenderResult::new(); let registry = registry.get_ref(); - eprintln_cargo!(r, "No such lint: \"{}\"", err.info); + eprintln_cargo!(r, "No such lint: \"{}\"", err.0); r_println!(r, ""); r_println!(r, "Available lints:"); for entry in registry.lints.iter() { @@ -97,7 +97,7 @@ pub fn render_error_no_such_lint( } #[completion(EntryExplain)] -pub fn complete_explain(ctx: &ShellContext, registry: &mut LazyRes<ResLintRegistry>) -> Suggest { +pub fn complete_explain(ctx: ShellContext, registry: &mut LazyRes<ResLintRegistry>) -> Suggest { let registry = registry.get_ref(); if ctx.previous_word != "explain" { return Suggest::FileCompletion; diff --git a/mingling_cli/src/linter/cmd_lint.rs b/mingling_cli/src/linter/cmd_lint.rs index 38f2973..b49605f 100644 --- a/mingling_cli/src/linter/cmd_lint.rs +++ b/mingling_cli/src/linter/cmd_lint.rs @@ -1,14 +1,15 @@ use crate::linter::mlint_report::{MlintReport, StateLintReports}; use cargo_metadata::Metadata; use mingling::consts::REMAINS; -use mingling::macros::{arg, chain, completion, dispatcher, metadata, pack, suggest}; +use mingling::macros::{arg, chain, completion, dispatcher, metadata, suggest}; use mingling::metadata::Description; use mingling::picker::parselib::ParserStyle; use mingling::picker::{EntryPicker, PickerArg}; +use mingling::{Grouped, Wrap}; use mingling::{LazyRes, ShellContext, Suggest}; use tokio::task::JoinSet; -dispatcher!("lint", CMDLint => EntryLint); +dispatcher!("lint", EntryLint); const ARG_WITH_CHECKER: PickerArg<Option<String>> = arg![with_checker: Option<String>]; @@ -77,7 +78,8 @@ async fn linter_main(metadata: &Metadata) -> Vec<MlintReport> { all_reports } -pack!(StateBeginLinter = ()); +#[derive(Grouped, Wrap)] +pub struct StateBeginLinter(()); #[chain] pub fn handle_lint(args: EntryLint) -> StateBeginLinter { @@ -88,7 +90,7 @@ pub fn handle_lint(args: EntryLint) -> StateBeginLinter { // If with_checker is not set, proceed directly to the mingling lint phase let Some(with_checker) = with_checker else { - return StateBeginLinter::new(()); + return StateBeginLinter(()); }; let with_checker: Vec<&str> = with_checker.split(',').collect(); @@ -97,7 +99,7 @@ pub fn handle_lint(args: EntryLint) -> StateBeginLinter { // Run the outer checker (e.g. cargo check) with output passed through directly execute_checker(&with_checker, checker_args.as_slice()); - StateBeginLinter::new(()) + StateBeginLinter(()) } /// Run the outer checker (e.g. cargo check) with output passed through directly. @@ -135,11 +137,11 @@ pub async fn handle_state_begin_linter( ) -> StateLintReports { let metadata = metadata.get_ref().data(); let reports = linter_main(metadata).await; - StateLintReports::new(reports) + StateLintReports(reports) } #[completion(EntryLint)] -pub fn complete_lint(ctx: &ShellContext) -> Suggest { +pub fn complete_lint(ctx: ShellContext) -> Suggest { if mingling::picker::parselib::build_possible_flags( ParserStyle::global_style(), &ARG_WITH_CHECKER.into_info(), diff --git a/mingling_cli/src/linter/cmd_ra_lints.rs b/mingling_cli/src/linter/cmd_ra_lints.rs index 733d611..60b3e88 100644 --- a/mingling_cli/src/linter/cmd_ra_lints.rs +++ b/mingling_cli/src/linter/cmd_ra_lints.rs @@ -8,15 +8,15 @@ use crate::{linter::cmd_lint::EntryLint, metadata::setup::ResUsingJson}; // Aliases dispatcher!("ra-lint-clippy", - CMDLinterSupportRustAnalyzerWithClippy => EntryLinterSupportRustAnalyzerWithClippy + EntryLinterSupportRustAnalyzerWithClippy ); dispatcher!("ra-lint-check", - CMDLinterSupportRustAnalyzerWithCheck => EntryLinterSupportRustAnalyzerWithCheck + EntryLinterSupportRustAnalyzerWithCheck ); dispatcher!("ra-lint", - CMDLinterSupportRustAnalyzer => EntryLinterSupportRustAnalyzer + EntryLinterSupportRustAnalyzer ); #[chain] diff --git a/mingling_cli/src/linter/mlint_report.rs b/mingling_cli/src/linter/mlint_report.rs index b594b9d..d7bf652 100644 --- a/mingling_cli/src/linter/mlint_report.rs +++ b/mingling_cli/src/linter/mlint_report.rs @@ -9,8 +9,8 @@ use cargo_metadata::{Message, PackageId}; use annotate_snippets::level::{ERROR, HELP, NOTE, WARNING}; use annotate_snippets::{AnnotationKind, Group, Patch, Renderer, Snippet}; -use mingling::macros::{buffer, chain, pack, r_append, r_eprintln, renderer}; -use mingling::{RendererInvoker, Routable}; +use mingling::macros::{buffer, chain, r_append, r_eprintln, renderer}; +use mingling::{Grouped, RendererInvoker, Routable, Wrap}; use crate::Next; use crate::metadata::setup::ResUsingJson; @@ -416,22 +416,25 @@ impl MlintReport { } } -pack!(StateLintReports = Vec<MlintReport>); -pack!(ResultLintReportsAnnotateSnippet = Vec<MlintReport>); -pack!(ResultLintReportsJson = Vec<MlintReport>); +#[derive(Grouped, Wrap)] +pub struct StateLintReports(pub Vec<MlintReport>); +#[derive(Grouped, Wrap)] +pub struct ResultLintReportsAnnotateSnippet(Vec<MlintReport>); +#[derive(Grouped, Wrap)] +pub struct ResultLintReportsJson(Vec<MlintReport>); #[chain] pub fn handle_state_lint_reports(reports: StateLintReports, using_json: &ResUsingJson) -> Next { if using_json.using { - ResultLintReportsJson::new(reports.inner).to_render() + ResultLintReportsJson(reports.0).to_render() } else { - ResultLintReportsAnnotateSnippet::new(reports.inner).to_render() + ResultLintReportsAnnotateSnippet(reports.0).to_render() } } #[renderer(buffer)] pub fn render_lint_reports(reports: ResultLintReportsAnnotateSnippet) { - for report in reports.inner { + for report in reports.0 { r_eprintln!("{}", report.to_annotate_snippet_render()); } } @@ -441,7 +444,7 @@ pub fn render_lint_reports_json( reports: ResultLintReportsJson, message_renderer: &RendererInvoker<Message>, ) { - for report in reports.inner { + for report in reports.0 { let message = report.to_compiler_message(); let result = message_renderer.invoke(message); r_append!(result); diff --git a/mingling_cli/src/linter/registry.rs b/mingling_cli/src/linter/registry.rs index 79f3225..b9f82fa 100644 --- a/mingling_cli/src/linter/registry.rs +++ b/mingling_cli/src/linter/registry.rs @@ -26,8 +26,9 @@ pub struct LintMetadata { #[program_setup] pub fn lint_registry_setup(p: &mut Program<ThisProgram>) { p.with_resource(ResLintRegistry::lazy_init(|| { - let registry: ResLintRegistry = serde_json::from_str(include_str!("../../registry.json")) - .expect("failed to parse embedded registry.json"); + let registry: ResLintRegistry = + serde_json::from_str(include_str!(concat!(env!("OUT_DIR"), "/registry.json"))) + .expect("failed to parse embedded registry.json"); registry })); } |
