From 2aa7bda3cb21ce6c052b82e08bcab79a625d04f2 Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Sun, 31 May 2026 02:42:52 +0800 Subject: Enhance code quality across the entire codebase --- mling/src/project_solver.rs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'mling/src/project_solver.rs') diff --git a/mling/src/project_solver.rs b/mling/src/project_solver.rs index b6517b3..3aec2b4 100644 --- a/mling/src/project_solver.rs +++ b/mling/src/project_solver.rs @@ -17,13 +17,24 @@ pub struct BinaryItem { pub path: PathBuf, } +/// Solves the current directory for project metadata. +/// +/// # Errors +/// +/// Returns an `io::Error` if the current directory cannot be determined +/// or if `cargo metadata` fails. pub fn solve_current_dir() -> Result { let current = std::env::current_dir()?; - solve(current) + solve(¤t) } -pub fn solve(current: PathBuf) -> Result { - let (target_dir, workspace_root, binaries) = solve_inner(¤t)?; +/// Solves the given directory path for project metadata. +/// +/// # Errors +/// +/// Returns an `io::Error` if `cargo metadata` fails for the given path. +pub fn solve(current: &PathBuf) -> Result { + let (target_dir, workspace_root, binaries) = solve_inner(current)?; Ok(ProjectSolveResult { target_dir, workspace_root, @@ -40,9 +51,9 @@ fn solve_inner(current: &PathBuf) -> Result<(PathBuf, PathBuf, Vec), .output()?; if !output.status.success() { let stderr = String::from_utf8_lossy(&output.stderr); - return Err(std::io::Error::other( - format!("cargo metadata failed: {}", stderr), - )); + return Err(std::io::Error::other(format!( + "cargo metadata failed: {stderr}" + ))); } let metadata: serde_json::Value = serde_json::from_slice(&output.stdout) .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?; @@ -75,9 +86,7 @@ fn solve_inner(current: &PathBuf) -> Result<(PathBuf, PathBuf, Vec), if let Some(targets) = pkg["targets"].as_array() { for target in targets { let kind = target["kind"].as_array(); - let is_bin = kind - .map(|k| k.iter().any(|v| v.as_str() == Some("bin"))) - .unwrap_or(false); + let is_bin = kind.is_some_and(|k| k.iter().any(|v| v.as_str() == Some("bin"))); if is_bin { let name = target["name"].as_str().ok_or_else(|| { std::io::Error::new( -- cgit