mirror of
https://github.com/nushell/nushell.git
synced 2024-12-16 12:12:19 +01:00
Add which command
This commit is contained in:
parent
1662824a5c
commit
c97578bf6e
@ -191,6 +191,7 @@ pub async fn cli() -> Result<(), Box<dyn Error>> {
|
||||
static_command(Save),
|
||||
static_command(Table),
|
||||
static_command(VTable),
|
||||
static_command(Which),
|
||||
]);
|
||||
}
|
||||
let _ = load_plugins(&mut context);
|
||||
|
@ -48,6 +48,7 @@ crate mod to_yaml;
|
||||
crate mod trim;
|
||||
crate mod vtable;
|
||||
crate mod where_;
|
||||
crate mod which_;
|
||||
|
||||
crate use autoview::Autoview;
|
||||
//crate use cd::Cd;
|
||||
@ -69,3 +70,4 @@ crate use skip_while::SkipWhile;
|
||||
crate use table::Table;
|
||||
crate use vtable::VTable;
|
||||
crate use where_::Where;
|
||||
crate use which_::Which;
|
||||
|
70
src/commands/which_.rs
Normal file
70
src/commands/which_.rs
Normal file
@ -0,0 +1,70 @@
|
||||
use crate::errors::ShellError;
|
||||
use crate::object::Value;
|
||||
use crate::prelude::*;
|
||||
|
||||
use crate::commands::StaticCommand;
|
||||
use crate::parser::registry::Signature;
|
||||
|
||||
pub struct Which;
|
||||
|
||||
impl StaticCommand for Which {
|
||||
fn run(
|
||||
&self,
|
||||
args: CommandArgs,
|
||||
registry: &CommandRegistry,
|
||||
) -> Result<OutputStream, ShellError> {
|
||||
which(args, registry)
|
||||
}
|
||||
fn name(&self) -> &str {
|
||||
"which"
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("which").required("name", SyntaxType::Any)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn which(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
||||
let args = args.evaluate_once(registry)?;
|
||||
|
||||
let mut which_out = VecDeque::new();
|
||||
let span = args.call_info.name_span;
|
||||
|
||||
if let Some(v) = &args.call_info.args.positional {
|
||||
if v.len() > 0 {
|
||||
match &v[0] {
|
||||
Tagged {
|
||||
item: Value::Primitive(Primitive::String(s)),
|
||||
tag,
|
||||
} => match which::which(&s) {
|
||||
Ok(ok) => {
|
||||
which_out
|
||||
.push_back(Value::Primitive(Primitive::Path(ok)).tagged(tag.clone()));
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
Tagged { tag, .. } => {
|
||||
return Err(ShellError::labeled_error(
|
||||
"Expected a filename to find",
|
||||
"needs a filename",
|
||||
tag.span,
|
||||
));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return Err(ShellError::labeled_error(
|
||||
"Expected a binary to find",
|
||||
"needs application name",
|
||||
span,
|
||||
));
|
||||
}
|
||||
} else {
|
||||
return Err(ShellError::labeled_error(
|
||||
"Expected a binary to find",
|
||||
"needs application name",
|
||||
span,
|
||||
));
|
||||
}
|
||||
|
||||
Ok(which_out.to_output_stream())
|
||||
}
|
Loading…
Reference in New Issue
Block a user