From 9976b31a56bcc3ed37ac878b351bd8d097dc67cc Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Tue, 21 Jul 2026 15:10:38 +0800 Subject: feat(mling): add linter framework with async support and registry generation --- mingling_cli/src/metadata/setup.rs | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'mingling_cli/src/metadata/setup.rs') diff --git a/mingling_cli/src/metadata/setup.rs b/mingling_cli/src/metadata/setup.rs index 4a891b6..198baf1 100644 --- a/mingling_cli/src/metadata/setup.rs +++ b/mingling_cli/src/metadata/setup.rs @@ -3,7 +3,6 @@ use std::{env::current_dir, path::PathBuf}; use cargo_metadata::{CargoOpt, MetadataCommand}; use mingling::{ LazyInit, Program, - consts::REMAINS, macros::program_setup, picker::{IntoPicker, value::Flag}, prelude::*, @@ -16,11 +15,28 @@ pub const CARGO_TOML: &str = "Cargo.toml"; use cargo_metadata::Metadata; use serde::Serialize; +/// Resource holding parsed `cargo metadata` output. +/// +/// This is lazily initialized during program setup by calling `cargo metadata` +/// with the appropriate CLI flags (e.g., `--features`, `--all-features`, +/// `--no-default-features`, `--no-deps`, `--message-format`). +/// +/// Access the inner [`Metadata`] via [`ResMetadata::data()`], which panics if +/// called before initialization (guaranteed not to happen in normal usage). #[derive(Default, Clone, Serialize)] pub struct ResMetadata { data: Option, } +/// Resource indicating whether the output format is JSON. +/// +/// Set to `true` when `--message-format json` (or similar) is passed. +/// Used by renderers to decide whether to serialize structs as JSON. +#[derive(Default, Clone, Serialize)] +pub struct ResUsingJson { + pub using: bool, +} + impl ResMetadata { /// Returns a reference to the parsed `cargo metadata`. /// @@ -38,7 +54,8 @@ impl ResMetadata { #[program_setup] pub fn cargo_metadata_setup(program: &mut Program) { - let args = program.take_args(); + let args = program.get_args().to_vec(); + let ( feature_args, manifest_path, @@ -46,7 +63,6 @@ pub fn cargo_metadata_setup(program: &mut Program) { enable_all_features, no_default_features, no_deps, - args, ) = args .pick(&arg![features: Vec]) .pick(&arg![manifest_path: Option]) @@ -54,12 +70,12 @@ pub fn cargo_metadata_setup(program: &mut Program) { .pick(&arg![all_features: Flag]) .pick(&arg![no_default_features: Flag]) .pick(&arg![no_deps: Flag]) - .pick(&REMAINS) .unwrap(); - program.replace_args(args.into()); - // Bind format setting to StructuralRenderer - program.structural_renderer_name = message_format.into(); + // Is Using Json + program.with_resource(ResUsingJson { + using: message_format.contains("json"), + }); // Current Dir let current_dir = current_dir().unwrap(); -- cgit