From 1a71e4e0748f0de1281bb280a745f4d2a9b13aa4 Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Fri, 22 May 2026 15:19:41 +0200 Subject: type builtin: displays alias definition now --- src/run/builtin.rs | 28 +++++++++++++++++++--------- src/run/mod.rs | 9 +++++++-- 2 files changed, 26 insertions(+), 11 deletions(-) (limited to 'src/run') diff --git a/src/run/builtin.rs b/src/run/builtin.rs index d00c140..335d07d 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -7,7 +7,7 @@ use pish_derive::FromArgs; use super::{Builtin, BuiltinError as Error, BuiltinResult as Result}; use crate::parse::CmdDisplay; -use crate::run::AliasAge; +use crate::run::{AliasAge, AliasBody}; use crate::*; #[allow(unused)] @@ -187,9 +187,11 @@ impl Builtin for _type { ) -> Result { let session = session.lock().unwrap(); for arg in args { - if session.aliases.get(arg, AliasAge::MAX).is_some() { - // TODO: tell what it is aliased to - writeln!(stdout, "{} is an alias", String::from_utf8_lossy(arg))?; + if let Some((_, a)) = session.aliases.get(arg, AliasAge::MAX) { + stdout.write_all(&arg)?; + stdout.write_all(b" is aliased to ")?; + stdout.write_all(&a.unparsed)?; + stdout.write_all(b"\n")?; continue; } @@ -496,11 +498,19 @@ impl Builtin for alias { return Err(Error::Exit(-1)); } - session - .lock() - .unwrap() - .aliases - .insert(alias_name.clone(), alias_args); + session.lock().unwrap().aliases.insert( + alias_name.clone(), + AliasBody { + unparsed: args.iter().fold(BString::new(), |mut a, b| { + if !a.is_empty() { + a.push(b' '); + } + a.push_all(&b); + a + }), + parsed: alias_args, + }, + ); Ok(()) } diff --git a/src/run/mod.rs b/src/run/mod.rs index b3ed851..52d3925 100644 --- a/src/run/mod.rs +++ b/src/run/mod.rs @@ -529,12 +529,17 @@ impl parse::Expander for Executor { .lock() .unwrap() .aliases - .get(cmd, older_than.unwrap_or(AliasAge::MAX))) + .get(cmd, older_than.unwrap_or(AliasAge::MAX)) + .map(|(age, body)| (age, body.parsed))) } } type AliasAge = u32; -type AliasBody = Vec; +#[derive(Clone)] +pub struct AliasBody { + pub unparsed: BString, + pub parsed: Vec, +} type AliasSet = Vec<(AliasAge, AliasBody)>; pub struct Aliases { -- cgit v1.2.3