Skip to content

Commit 875488e

Browse files
committed
refactoring custom command registration
To make it less error-prone
1 parent 7b3bed0 commit 875488e

File tree

4 files changed

+19
-14
lines changed

4 files changed

+19
-14
lines changed

src/builtins.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,38 @@ use crate::{CmdEnv, CmdResult};
33
use std::io::{Read, Write};
44

55
pub(crate) fn builtin_echo(env: &mut CmdEnv) -> CmdResult {
6-
let args = env.args();
7-
let msg = if args.len() > 1 && args[1] == "-n" {
8-
args[2..].join(" ")
6+
let args = env.get_args();
7+
let msg = if !args.is_empty() && args[0] == "-n" {
8+
args[1..].join(" ")
99
} else {
10-
args[1..].join(" ") + "\n"
10+
args.join(" ") + "\n"
1111
};
1212

1313
write!(env.stdout(), "{}", msg)
1414
}
1515

1616
pub(crate) fn builtin_error(env: &mut CmdEnv) -> CmdResult {
17-
error!("{}", env.args()[1..].join(" "));
17+
error!("{}", env.get_args().join(" "));
1818
Ok(())
1919
}
2020

2121
pub(crate) fn builtin_warn(env: &mut CmdEnv) -> CmdResult {
22-
warn!("{}", env.args()[1..].join(" "));
22+
warn!("{}", env.get_args().join(" "));
2323
Ok(())
2424
}
2525

2626
pub(crate) fn builtin_info(env: &mut CmdEnv) -> CmdResult {
27-
info!("{}", env.args()[1..].join(" "));
27+
info!("{}", env.get_args().join(" "));
2828
Ok(())
2929
}
3030

3131
pub(crate) fn builtin_debug(env: &mut CmdEnv) -> CmdResult {
32-
debug!("{}", env.args()[1..].join(" "));
32+
debug!("{}", env.get_args().join(" "));
3333
Ok(())
3434
}
3535

3636
pub(crate) fn builtin_trace(env: &mut CmdEnv) -> CmdResult {
37-
trace!("{}", env.args()[1..].join(" "));
37+
trace!("{}", env.get_args().join(" "));
3838
Ok(())
3939
}
4040

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@
297297
//! # use cmd_lib::*;
298298
//! # use std::io::Write;
299299
//! fn my_cmd(env: &mut CmdEnv) -> CmdResult {
300-
//! let args = env.args();
300+
//! let args = env.get_args();
301301
//! let (res, stdout, stderr) = spawn_with_output! {
302302
//! orig_cmd $[args]
303303
//! --long-option xxx

src/process.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,14 @@ pub struct CmdEnv {
2929
current_dir: PathBuf,
3030
}
3131
impl CmdEnv {
32+
/// Returns the name of this command.
33+
pub fn get_cmd_name(&self) -> &str {
34+
&self.args[0]
35+
}
36+
3237
/// Returns the arguments for this command.
33-
pub fn args(&self) -> &[String] {
34-
&self.args
38+
pub fn get_args(&self) -> &[String] {
39+
&self.args[1..]
3540
}
3641

3742
/// Fetches the environment variable key for this command.

tests/test_macros.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,13 +189,13 @@ fn test_proc_env() {
189189
fn test_export_cmd() {
190190
use std::io::Write;
191191
fn my_cmd(env: &mut CmdEnv) -> CmdResult {
192-
let msg = format!("msg from foo(), args: {:?}", env.args());
192+
let msg = format!("msg from foo(), args: {:?}", env.get_args());
193193
writeln!(env.stderr(), "{}", msg)?;
194194
writeln!(env.stdout(), "bar")
195195
}
196196

197197
fn my_cmd2(env: &mut CmdEnv) -> CmdResult {
198-
let msg = format!("msg from foo2(), args: {:?}", env.args());
198+
let msg = format!("msg from foo2(), args: {:?}", env.get_args());
199199
writeln!(env.stderr(), "{}", msg)?;
200200
writeln!(env.stdout(), "bar2")
201201
}

0 commit comments

Comments
 (0)