aboutsummaryrefslogtreecommitdiff
path: root/mling/src/cli.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-07-20 15:29:22 +0800
committer魏曹先生 <1992414357@qq.com>2026-07-20 15:29:22 +0800
commit62e323c80306d7dca68e47377a0ed6f4e146ba48 (patch)
tree0c6fe91d7197c83af52b08f793d12b0f01646d7d /mling/src/cli.rs
parent33da7c8cb4f24caeef4e8127bc484bc9d236a0f3 (diff)
feat: remove deprecated mling scaffolding tool
The mling CLI tool is being rewritten, so remove all its source files, resources, and workspace membership to clean up the repository
Diffstat (limited to 'mling/src/cli.rs')
-rw-r--r--mling/src/cli.rs198
1 files changed, 0 insertions, 198 deletions
diff --git a/mling/src/cli.rs b/mling/src/cli.rs
deleted file mode 100644
index 20906c0..0000000
--- a/mling/src/cli.rs
+++ /dev/null
@@ -1,198 +0,0 @@
-// `mling` has not been replaced from `parser` to `picker` yet
-#![allow(deprecated)]
-
-use crate::{
- CMDCompletion, ErrorDispatcherNotFound, Next, ThisProgram,
- display::markdown,
- eformat_cargo, eprintln_cargo, hformat_cargo,
- pkg_mgr::{CMDInstall, CMDListNamespace, CMDRemoveNamespace, PackageManagerSetup},
- proj_mgr::ProjectManagerSetup,
- res::{ResCurrentDir, ResManifestPath},
-};
-use colored::Colorize;
-use mingling::{
- Grouped, Program, RenderResult, Routable,
- hook::ProgramHook,
- macros::{chain, help, pack, program_setup, renderer},
- res::ResExitCode,
- setup::{ExitCodeSetup, HelpFlagSetup, QuietFlagSetup, StructuralRendererSetup},
-};
-use std::{env::current_dir, io::Write, path::PathBuf, process::exit, str::FromStr};
-
-pub fn run() {
- #[cfg(windows)]
- colored::control::set_virtual_terminal(true).unwrap();
-
- // Preprocess args to handle cargo-mling invocations
- let mut args: Vec<String> = std::env::args().collect();
- if args.first().is_some_and(|a| a.contains("cargo-mling")) {
- args[0] = "cargo-mling".to_string();
- }
- if args.get(1).is_some_and(|a| a == "mling") {
- args.remove(1);
- }
-
- // Build program with preprocessed args
- let mut program = Program::<ThisProgram>::new_with_args(args);
-
- // Intercept Version
- program.global_flag(["-V", "--version"], |_| {
- eprintln!(include_str!("helps/version.txt"));
- exit(0)
- });
-
- // Intercept Help
- program.with_hook(
- ProgramHook::empty().on_post_dispatch(|info| match info.entry {
- // When dispatcher is not found
- ThisProgram::ErrorDispatcherNotFound
- // And user requests Help
- if ThisProgram::this().user_context.help => {
- // Print help
- eprintln!("{}", markdown(include_str!("helps/mling_help.txt")));
- exit(0)
- }
- _ => {}
- }),
- );
-
- // Commands
- program.with_dispatcher(CMDCompletion);
-
- // Setups
- program.with_setup(HelpFlagSetup::new(["-h", "--help"]));
- program.with_setup(StructuralRendererSetup);
- program.with_setup(ExitCodeSetup::default());
-
- program.with_setup(StandardOutputSetup);
- program.with_setup(PackageManagerSetup);
- program.with_setup(ProjectManagerSetup);
-
- // Resources
- program.with_resource(ResCurrentDir {
- path: current_dir().unwrap(),
- });
-
- let manifest_path = program.pick_global_argument(["-P", "--manifest-path"]);
- program.with_resource(ResManifestPath {
- raw: manifest_path,
- resolved: None,
- });
-
- // Manifest Path Check
- if !program.is_completing() {
- program.with_hook(ProgramHook::empty().on_post_dispatch(|_| {
- let p = ThisProgram::this();
- p.modify_res(|manifest_path: &mut ResManifestPath| {
- manifest_path.resolved = Some(resolve_manifest_path(manifest_path.raw.clone()));
- });
- }));
- }
-
- // Execute
- let quiet = program.stdout_setting.quiet;
- let error_output = program.stdout_setting.error_output && !quiet;
- let render_output = program.stdout_setting.render_output && !quiet;
- let result = program.exec_without_render().unwrap();
- if !result.is_empty() {
- if result.exit_code == 0 && render_output {
- println!("{}", result.trim());
- } else if error_output {
- eprintln!("{}", result.trim());
- }
- }
- exit(result.exit_code);
-}
-
-#[program_setup]
-fn standard_output_setup(program: &mut Program<ThisProgram>) {
- program.with_setup(QuietFlagSetup::new("--silence"));
- program.global_flag(["--no-error"], |program| {
- program.stdout_setting.error_output = false;
- });
- program.global_flag(["--no-result"], |program| {
- program.stdout_setting.render_output = false;
- });
- program.global_flag(["--silence", "--quiet"], |program| {
- program.stdout_setting.quiet = true;
- });
-}
-
-fn resolve_manifest_path(provided: Option<String>) -> PathBuf {
- let p = ThisProgram::this();
- let disable_error_output =
- // --no-error
- !p.stdout_setting.error_output ||
- // or --quiet/--silence
- p.stdout_setting.quiet;
-
- if let Some(path) = provided {
- let p = PathBuf::from_str(&path).unwrap();
- if p.is_dir() {
- let candidate = p.join("Cargo.toml");
- if candidate.exists() {
- return candidate;
- }
- if !disable_error_output {
- eprintln_cargo!("`{}` is not a crate root", p.display());
- }
- exit(1);
- }
- return p;
- }
- // Walk up from current directory to find nearest Cargo.toml
- let mut dir = current_dir().unwrap();
- loop {
- let candidate = dir.join("Cargo.toml");
- if candidate.exists() {
- return candidate;
- }
- if !dir.pop() {
- // Reached filesystem root without finding Cargo.toml
- if !disable_error_output {
- eprintln_cargo!("`{}` is not a crate root", current_dir().unwrap().display());
- }
- exit(1);
- }
- }
-}
-
-pack!(ResultMlingHelp = ());
-pack!(ResultUnknownCommand = String);
-
-#[chain]
-pub fn handle_error_dispatcher_not_found(err: ErrorDispatcherNotFound) -> Next {
- if err.is_empty() {
- ResultMlingHelp::default().to_render()
- } else {
- ResultUnknownCommand::new(err.join(" ")).to_render()
- }
-}
-
-#[renderer]
-pub fn render_mling_help(_prev: ResultMlingHelp, ec: &mut ResExitCode) -> RenderResult {
- let mut result = RenderResult::default();
- writeln!(result, "{}", markdown(include_str!("helps/mling_help.txt"))).ok();
- ec.exit_code = 0;
- result
-}
-
-#[renderer]
-pub fn render_unknown_command(prev: ResultUnknownCommand, ec: &mut ResExitCode) -> RenderResult {
- let mut result = RenderResult::default();
- writeln!(
- result,
- "{}",
- eformat_cargo!("no such command: `{}`", prev.bright_yellow().bold())
- )
- .ok();
- writeln!(result).ok();
- writeln!(
- result,
- "{}",
- hformat_cargo!("view all commands with `cargo help mling`")
- )
- .ok();
- ec.exit_code = 101;
- result
-}