forked from extern/nushell
Make Call::get_flag_expr
return Expression
by ref (#11388)
# Description A small refactor that eliminates some `Expression` cloning. # User-Facing Changes Breaking change for `nu_protocol`.
This commit is contained in:
parent
f8e63328d8
commit
6f384da57e
@ -70,7 +70,7 @@ impl CallExt for Call {
|
|||||||
name: &str,
|
name: &str,
|
||||||
) -> Result<Option<T>, ShellError> {
|
) -> Result<Option<T>, ShellError> {
|
||||||
if let Some(expr) = self.get_flag_expr(name) {
|
if let Some(expr) = self.get_flag_expr(name) {
|
||||||
let result = eval_expression(engine_state, stack, &expr)?;
|
let result = eval_expression(engine_state, stack, expr)?;
|
||||||
FromValue::from_value(result).map(Some)
|
FromValue::from_value(result).map(Some)
|
||||||
} else {
|
} else {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
@ -83,7 +83,7 @@ impl CallExt for Call {
|
|||||||
name: &str,
|
name: &str,
|
||||||
) -> Result<Option<T>, ShellError> {
|
) -> Result<Option<T>, ShellError> {
|
||||||
if let Some(expr) = self.get_flag_expr(name) {
|
if let Some(expr) = self.get_flag_expr(name) {
|
||||||
let result = eval_constant(working_set, &expr)?;
|
let result = eval_constant(working_set, expr)?;
|
||||||
FromValue::from_value(result).map(Some)
|
FromValue::from_value(result).map(Some)
|
||||||
} else {
|
} else {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
|
@ -164,10 +164,10 @@ impl Call {
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_flag_expr(&self, flag_name: &str) -> Option<Expression> {
|
pub fn get_flag_expr(&self, flag_name: &str) -> Option<&Expression> {
|
||||||
for name in self.named_iter() {
|
for name in self.named_iter() {
|
||||||
if flag_name == name.0.item {
|
if flag_name == name.0.item {
|
||||||
return name.2.clone();
|
return name.2.as_ref();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,23 +93,23 @@ pub(crate) fn parse_commandline_args(
|
|||||||
let redirect_stdin = call.get_named_arg("stdin");
|
let redirect_stdin = call.get_named_arg("stdin");
|
||||||
let login_shell = call.get_named_arg("login");
|
let login_shell = call.get_named_arg("login");
|
||||||
let interactive_shell = call.get_named_arg("interactive");
|
let interactive_shell = call.get_named_arg("interactive");
|
||||||
let commands: Option<Expression> = call.get_flag_expr("commands");
|
let commands = call.get_flag_expr("commands");
|
||||||
let testbin: Option<Expression> = call.get_flag_expr("testbin");
|
let testbin = call.get_flag_expr("testbin");
|
||||||
#[cfg(feature = "plugin")]
|
#[cfg(feature = "plugin")]
|
||||||
let plugin_file: Option<Expression> = call.get_flag_expr("plugin-config");
|
let plugin_file = call.get_flag_expr("plugin-config");
|
||||||
let no_config_file = call.get_named_arg("no-config-file");
|
let no_config_file = call.get_named_arg("no-config-file");
|
||||||
let no_std_lib = call.get_named_arg("no-std-lib");
|
let no_std_lib = call.get_named_arg("no-std-lib");
|
||||||
let config_file: Option<Expression> = call.get_flag_expr("config");
|
let config_file = call.get_flag_expr("config");
|
||||||
let env_file: Option<Expression> = call.get_flag_expr("env-config");
|
let env_file = call.get_flag_expr("env-config");
|
||||||
let log_level: Option<Expression> = call.get_flag_expr("log-level");
|
let log_level = call.get_flag_expr("log-level");
|
||||||
let log_target: Option<Expression> = call.get_flag_expr("log-target");
|
let log_target = call.get_flag_expr("log-target");
|
||||||
let execute: Option<Expression> = call.get_flag_expr("execute");
|
let execute = call.get_flag_expr("execute");
|
||||||
let table_mode: Option<Value> =
|
let table_mode: Option<Value> =
|
||||||
call.get_flag(engine_state, &mut stack, "table-mode")?;
|
call.get_flag(engine_state, &mut stack, "table-mode")?;
|
||||||
|
|
||||||
// ide flags
|
// ide flags
|
||||||
let lsp = call.has_flag("lsp");
|
let lsp = call.has_flag("lsp");
|
||||||
let include_path: Option<Expression> = call.get_flag_expr("include-path");
|
let include_path = call.get_flag_expr("include-path");
|
||||||
let ide_goto_def: Option<Value> =
|
let ide_goto_def: Option<Value> =
|
||||||
call.get_flag(engine_state, &mut stack, "ide-goto-def")?;
|
call.get_flag(engine_state, &mut stack, "ide-goto-def")?;
|
||||||
let ide_hover: Option<Value> = call.get_flag(engine_state, &mut stack, "ide-hover")?;
|
let ide_hover: Option<Value> = call.get_flag(engine_state, &mut stack, "ide-hover")?;
|
||||||
@ -119,7 +119,7 @@ pub(crate) fn parse_commandline_args(
|
|||||||
let ide_ast: Option<Spanned<String>> = call.get_named_arg("ide-ast");
|
let ide_ast: Option<Spanned<String>> = call.get_named_arg("ide-ast");
|
||||||
|
|
||||||
fn extract_contents(
|
fn extract_contents(
|
||||||
expression: Option<Expression>,
|
expression: Option<&Expression>,
|
||||||
) -> Result<Option<Spanned<String>>, ShellError> {
|
) -> Result<Option<Spanned<String>>, ShellError> {
|
||||||
if let Some(expr) = expression {
|
if let Some(expr) = expression {
|
||||||
let str = expr.as_string();
|
let str = expr.as_string();
|
||||||
|
Loading…
Reference in New Issue
Block a user