From 0ff1cb1ea65d7882f5616e1beca25ff1c309cbff Mon Sep 17 00:00:00 2001 From: Klementiev Dmitry <109908018+klementievdmitry@users.noreply.github.com> Date: Fri, 10 Mar 2023 23:14:55 +0500 Subject: [PATCH] Reworking `help aliases` (#8372) --- crates/nu-engine/src/scope.rs | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/crates/nu-engine/src/scope.rs b/crates/nu-engine/src/scope.rs index 284719bf51..2b57a5bf62 100644 --- a/crates/nu-engine/src/scope.rs +++ b/crates/nu-engine/src/scope.rs @@ -1,7 +1,8 @@ use nu_protocol::{ - engine::{EngineState, Stack, Visibility}, + engine::{Command, EngineState, Stack, Visibility}, ShellError, Signature, Span, SyntaxShape, Type, Value, }; +use std::borrow::Borrow; use std::cmp::Ordering; use std::collections::HashMap; @@ -494,6 +495,36 @@ impl<'e, 's> ScopeData<'e, 's> { }); } } + for (name_bytes, decl_id) in self.engine_state.get_decls_sorted(false) { + if self.visibility.is_decl_id_visible(&decl_id) { + let decl = self.engine_state.get_decl(decl_id); + if let Some(alias) = decl.as_alias() { + let name = String::from_utf8_lossy(&name_bytes).to_string(); + let sig = decl.signature().update_from_command(name, decl.borrow()); + let key = sig.name; + + aliases.push(Value::Record { + cols: vec!["name".into(), "expansion".into(), "usage".into()], + vals: vec![ + Value::String { val: key, span }, + Value::String { + val: String::from_utf8_lossy( + self.engine_state + .get_span_contents(&alias.wrapped_call.span), + ) + .to_string(), + span, + }, + Value::String { + val: alias.signature().usage, + span, + }, + ], + span, + }); + } + } + } aliases.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal)); aliases