From 5c71ddc28dab182e1ec70e249f0d0e1ac10da9b0 Mon Sep 17 00:00:00 2001 From: reuben olinsky Date: Thu, 9 Jan 2025 08:49:04 -0800 Subject: [PATCH] experiment --- brush-core/src/builtins.rs | 11 ++++++ brush-core/src/builtins/colon.rs | 28 ++++++++------- brush-core/src/builtins/factory.rs | 58 ++++++++++++------------------ 3 files changed, 48 insertions(+), 49 deletions(-) diff --git a/brush-core/src/builtins.rs b/brush-core/src/builtins.rs index ad45ab8a..a5c44337 100644 --- a/brush-core/src/builtins.rs +++ b/brush-core/src/builtins.rs @@ -282,6 +282,17 @@ pub struct Registration { pub declaration_builtin: bool, } +impl Registration { + /// Updates the given registration to mark it for a special builtin. + #[must_use] + pub fn special(self) -> Self { + Self { + special_builtin: true, + ..self + } + } +} + fn get_builtin_man_page(_name: &str, _command: &clap::Command) -> Result { error::unimp("man page rendering is not yet implemented") } diff --git a/brush-core/src/builtins/colon.rs b/brush-core/src/builtins/colon.rs index 371d1ed0..8ebbbce0 100644 --- a/brush-core/src/builtins/colon.rs +++ b/brush-core/src/builtins/colon.rs @@ -1,20 +1,22 @@ -use clap::Parser; - use crate::{builtins, commands}; /// No-op command. -#[derive(Parser)] -#[clap(disable_help_flag = true, disable_version_flag = true)] -pub(crate) struct ColonCommand { - #[clap(allow_hyphen_values = true)] - args: Vec, -} +pub(crate) struct ColonCommand {} + +impl builtins::SimpleCommand for ColonCommand { + fn get_content( + _name: &str, + _content_type: builtins::ContentType, + ) -> Result { + Ok("Always returns succcess".into()) + } -impl builtins::Command for ColonCommand { - async fn execute( - &self, + fn execute( _context: commands::ExecutionContext<'_>, - ) -> Result { - Ok(builtins::ExitCode::Success) + _args: &[&str], + ) -> Result { + Ok(builtins::BuiltinResult { + exit_code: builtins::ExitCode::Success, + }) } } diff --git a/brush-core/src/builtins/factory.rs b/brush-core/src/builtins/factory.rs index 3f95ae24..aa04382d 100644 --- a/brush-core/src/builtins/factory.rs +++ b/brush-core/src/builtins/factory.rs @@ -46,16 +46,6 @@ pub fn builtin() -> builtins::Registration { } } -fn special_builtin() -> builtins::Registration { - builtins::Registration { - execute_func: exec_builtin::, - content_func: get_builtin_content::, - disabled: false, - special_builtin: true, - declaration_builtin: false, - } -} - fn decl_builtin() -> builtins::Registration { builtins::Registration { execute_func: exec_declaration_builtin::, @@ -66,16 +56,6 @@ fn decl_builtin() -> builtins::Re } } -fn special_decl_builtin() -> builtins::Registration { - builtins::Registration { - execute_func: exec_declaration_builtin::, - content_func: get_builtin_content::, - disabled: false, - special_builtin: true, - declaration_builtin: true, - } -} - fn get_builtin_content( name: &str, content_type: builtins::ContentType, @@ -194,32 +174,38 @@ pub(crate) fn get_default_builtins( // should be a special built-in. // - m.insert("break".into(), special_builtin::()); - m.insert(":".into(), special_builtin::()); + m.insert("break".into(), builtin::().special()); + m.insert( + ":".into(), + simple_builtin::().special(), + ); m.insert( "continue".into(), - special_builtin::(), + builtin::().special(), ); - m.insert(".".into(), special_builtin::()); - m.insert("eval".into(), special_builtin::()); + m.insert(".".into(), builtin::().special()); + m.insert("eval".into(), builtin::().special()); #[cfg(unix)] - m.insert("exec".into(), special_builtin::()); - m.insert("exit".into(), special_builtin::()); + m.insert("exec".into(), builtin::().special()); + m.insert("exit".into(), builtin::().special()); m.insert( "export".into(), - special_decl_builtin::(), + decl_builtin::().special(), + ); + m.insert( + "return".into(), + builtin::().special(), ); - m.insert("return".into(), special_builtin::()); - m.insert("set".into(), special_builtin::()); - m.insert("shift".into(), special_builtin::()); - m.insert("trap".into(), special_builtin::()); - m.insert("unset".into(), special_builtin::()); + m.insert("set".into(), builtin::().special()); + m.insert("shift".into(), builtin::().special()); + m.insert("trap".into(), builtin::().special()); + m.insert("unset".into(), builtin::().special()); m.insert( "readonly".into(), - special_decl_builtin::(), + decl_builtin::().special(), ); - m.insert("times".into(), special_builtin::()); + m.insert("times".into(), builtin::().special()); // // Non-special builtins @@ -260,7 +246,7 @@ pub(crate) fn get_default_builtins( m.insert("mapfile".into(), builtin::()); m.insert("printf".into(), builtin::()); m.insert("shopt".into(), builtin::()); - m.insert("source".into(), special_builtin::()); + m.insert("source".into(), builtin::().special()); #[cfg(unix)] m.insert("suspend".into(), builtin::()); m.insert("test".into(), builtin::());