- Aide facon Nushell : help <cmd>, <cmd> -h/--help, help, help commands, help --find <texte>, help <agent> (fiche info) - sections Usage/Flags/ Command Type/Parameters/Input-output/Examples avec couleurs - Commande version : tableau Nushell (commit, build, rustc, theme...) + --json ; build.rs pour commit/branche git ; -V reste la version courte - Themes : --theme <nom> (default, ocean, sunset, forest, dracula, mono) + settings.theme dans la config ; activation VT Windows pour les couleurs - Cadres blancs Nushell partages : list, search, status, doctor, ls/ps/ where/get et menu d autocompletion Tab encadre (colonnes name/description)
57 lines
1.8 KiB
Rust
57 lines
1.8 KiB
Rust
//! doctor command: render the environment report, optionally with --fix.
|
|
|
|
use super::*;
|
|
use crate::doctor::{self, Status};
|
|
use crate::output::{boxed_table, print_json, status_style};
|
|
use crate::runner::SystemRunner;
|
|
use anyhow::Result;
|
|
|
|
pub fn run(app: &App, fix: bool) -> Result<i32> {
|
|
if fix {
|
|
let repaired = doctor::fix(app)?;
|
|
for r in &repaired {
|
|
app.log.success(r);
|
|
}
|
|
let runner = SystemRunner::new(false, app.cli.verbose, &app.log);
|
|
for r in doctor::install_missing_tools(app, &runner)? {
|
|
app.log.success(r);
|
|
}
|
|
app.log.info("run 'am doctor' again to verify");
|
|
return Ok(0);
|
|
}
|
|
// The doctor report probes real tools, even under --dry-run.
|
|
let runner = SystemRunner::new(false, false, &app.log);
|
|
let report = doctor::run(app, &runner);
|
|
if app.json() {
|
|
print_json(&report.checks);
|
|
return Ok(if report.ok() { 0 } else { 1 });
|
|
}
|
|
let color = app.color();
|
|
let theme = app.theme();
|
|
let mut table_rows = Vec::new();
|
|
for c in &report.checks {
|
|
let status = match c.status {
|
|
Status::Ok => status_style("ok", theme, color),
|
|
Status::Warn => status_style("warn", theme, color),
|
|
Status::Error => status_style("error", theme, color),
|
|
};
|
|
table_rows.push(vec![c.name.clone(), status, c.detail.clone()]);
|
|
}
|
|
print!(
|
|
"{}",
|
|
boxed_table(
|
|
vec!["CHECK", "STATUS", "DETAIL"],
|
|
table_rows,
|
|
theme,
|
|
color,
|
|
)
|
|
);
|
|
if report.problems() > 0 {
|
|
app.log
|
|
.warn(&format!("{} problem(s) found — 'am doctor --fix' repairs what it can", report.problems()));
|
|
} else {
|
|
app.log.success("environment looks good");
|
|
}
|
|
Ok(if report.ok() { 0 } else { 1 })
|
|
}
|