Skip to content

Commit

Permalink
experiment
Browse files Browse the repository at this point in the history
  • Loading branch information
reubeno committed Jan 9, 2025
1 parent 28a1e63 commit 5c71ddc
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 49 deletions.
11 changes: 11 additions & 0 deletions brush-core/src/builtins.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, error::Error> {
error::unimp("man page rendering is not yet implemented")
}
Expand Down
28 changes: 15 additions & 13 deletions brush-core/src/builtins/colon.rs
Original file line number Diff line number Diff line change
@@ -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<String>,
}
pub(crate) struct ColonCommand {}

impl builtins::SimpleCommand for ColonCommand {
fn get_content(
_name: &str,
_content_type: builtins::ContentType,
) -> Result<String, crate::error::Error> {
Ok("Always returns succcess".into())
}

impl builtins::Command for ColonCommand {
async fn execute(
&self,
fn execute(
_context: commands::ExecutionContext<'_>,
) -> Result<crate::builtins::ExitCode, crate::error::Error> {
Ok(builtins::ExitCode::Success)
_args: &[&str],
) -> Result<builtins::BuiltinResult, crate::error::Error> {
Ok(builtins::BuiltinResult {
exit_code: builtins::ExitCode::Success,
})
}
}
58 changes: 22 additions & 36 deletions brush-core/src/builtins/factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,6 @@ pub fn builtin<B: builtins::Command + Send + Sync>() -> builtins::Registration {
}
}

fn special_builtin<B: builtins::Command + Send + Sync>() -> builtins::Registration {
builtins::Registration {
execute_func: exec_builtin::<B>,
content_func: get_builtin_content::<B>,
disabled: false,
special_builtin: true,
declaration_builtin: false,
}
}

fn decl_builtin<B: builtins::DeclarationCommand + Send + Sync>() -> builtins::Registration {
builtins::Registration {
execute_func: exec_declaration_builtin::<B>,
Expand All @@ -66,16 +56,6 @@ fn decl_builtin<B: builtins::DeclarationCommand + Send + Sync>() -> builtins::Re
}
}

fn special_decl_builtin<B: builtins::DeclarationCommand + Send + Sync>() -> builtins::Registration {
builtins::Registration {
execute_func: exec_declaration_builtin::<B>,
content_func: get_builtin_content::<B>,
disabled: false,
special_builtin: true,
declaration_builtin: true,
}
}

fn get_builtin_content<T: builtins::Command + Send + Sync>(
name: &str,
content_type: builtins::ContentType,
Expand Down Expand Up @@ -194,32 +174,38 @@ pub(crate) fn get_default_builtins(
// should be a special built-in.
//

m.insert("break".into(), special_builtin::<break_::BreakCommand>());
m.insert(":".into(), special_builtin::<colon::ColonCommand>());
m.insert("break".into(), builtin::<break_::BreakCommand>().special());
m.insert(
":".into(),
simple_builtin::<colon::ColonCommand>().special(),
);
m.insert(
"continue".into(),
special_builtin::<continue_::ContinueCommand>(),
builtin::<continue_::ContinueCommand>().special(),
);
m.insert(".".into(), special_builtin::<dot::DotCommand>());
m.insert("eval".into(), special_builtin::<eval::EvalCommand>());
m.insert(".".into(), builtin::<dot::DotCommand>().special());
m.insert("eval".into(), builtin::<eval::EvalCommand>().special());
#[cfg(unix)]
m.insert("exec".into(), special_builtin::<exec::ExecCommand>());
m.insert("exit".into(), special_builtin::<exit::ExitCommand>());
m.insert("exec".into(), builtin::<exec::ExecCommand>().special());
m.insert("exit".into(), builtin::<exit::ExitCommand>().special());
m.insert(
"export".into(),
special_decl_builtin::<export::ExportCommand>(),
decl_builtin::<export::ExportCommand>().special(),
);
m.insert(
"return".into(),
builtin::<return_::ReturnCommand>().special(),
);
m.insert("return".into(), special_builtin::<return_::ReturnCommand>());
m.insert("set".into(), special_builtin::<set::SetCommand>());
m.insert("shift".into(), special_builtin::<shift::ShiftCommand>());
m.insert("trap".into(), special_builtin::<trap::TrapCommand>());
m.insert("unset".into(), special_builtin::<unset::UnsetCommand>());
m.insert("set".into(), builtin::<set::SetCommand>().special());
m.insert("shift".into(), builtin::<shift::ShiftCommand>().special());
m.insert("trap".into(), builtin::<trap::TrapCommand>().special());
m.insert("unset".into(), builtin::<unset::UnsetCommand>().special());

m.insert(
"readonly".into(),
special_decl_builtin::<declare::DeclareCommand>(),
decl_builtin::<declare::DeclareCommand>().special(),
);
m.insert("times".into(), special_builtin::<times::TimesCommand>());
m.insert("times".into(), builtin::<times::TimesCommand>().special());

//
// Non-special builtins
Expand Down Expand Up @@ -260,7 +246,7 @@ pub(crate) fn get_default_builtins(
m.insert("mapfile".into(), builtin::<mapfile::MapFileCommand>());
m.insert("printf".into(), builtin::<printf::PrintfCommand>());
m.insert("shopt".into(), builtin::<shopt::ShoptCommand>());
m.insert("source".into(), special_builtin::<dot::DotCommand>());
m.insert("source".into(), builtin::<dot::DotCommand>().special());
#[cfg(unix)]
m.insert("suspend".into(), builtin::<suspend::SuspendCommand>());
m.insert("test".into(), builtin::<test::TestCommand>());
Expand Down

0 comments on commit 5c71ddc

Please sign in to comment.