diff --git a/crates/nu-parser/src/parse_keywords.rs b/crates/nu-parser/src/parse_keywords.rs index e338ac52f1..dd93ee6167 100644 --- a/crates/nu-parser/src/parse_keywords.rs +++ b/crates/nu-parser/src/parse_keywords.rs @@ -204,8 +204,7 @@ pub fn parse_alias( } if let Some(decl_id) = working_set.find_decl(b"alias") { - let (call, call_span, _) = - parse_internal_call(working_set, spans[0], &spans[1..], decl_id); + let (call, _) = parse_internal_call(working_set, spans[0], &spans[1..], decl_id); if spans.len() >= 4 { let alias_name = working_set.get_span_contents(spans[1]); @@ -228,7 +227,7 @@ pub fn parse_alias( return ( Statement::Pipeline(Pipeline::from_vec(vec![Expression { expr: Expr::Call(call), - span: call_span, + span: span(spans), ty: Type::Unknown, custom_completion: None, }])), @@ -1008,7 +1007,7 @@ pub fn parse_let( } } } - let (call, _, err) = parse_internal_call(working_set, spans[0], &spans[1..], decl_id); + let (call, err) = parse_internal_call(working_set, spans[0], &spans[1..], decl_id); return ( Statement::Pipeline(Pipeline { @@ -1043,8 +1042,7 @@ pub fn parse_source( if let Some(decl_id) = working_set.find_decl(b"source") { // Is this the right call to be using here? // Some of the others (`parse_let`) use it, some of them (`parse_hide`) don't. - let (call, call_span, err) = - parse_internal_call(working_set, spans[0], &spans[1..], decl_id); + let (call, err) = parse_internal_call(working_set, spans[0], &spans[1..], decl_id); error = error.or(err); // Command and one file name @@ -1092,7 +1090,7 @@ pub fn parse_source( return ( Statement::Pipeline(Pipeline::from_vec(vec![Expression { expr: Expr::Call(call_with_block), - span: call_span, + span: span(spans), ty: Type::Unknown, custom_completion: None, }])), @@ -1113,7 +1111,7 @@ pub fn parse_source( return ( Statement::Pipeline(Pipeline::from_vec(vec![Expression { expr: Expr::Call(call), - span: call_span, + span: span(spans), ty: Type::Unknown, custom_completion: None, }])), @@ -1165,10 +1163,11 @@ pub fn parse_register( ) } Some(decl_id) => { - let (call, call_span, mut err) = - parse_internal_call(working_set, spans[0], &spans[1..], decl_id); + let (call, mut err) = parse_internal_call(working_set, spans[0], &spans[1..], decl_id); let decl = working_set.get_decl(decl_id); + let call_span = span(spans); + err = check_call(call_span, &decl.signature(), &call).or(err); if err.is_some() || call.has_flag("help") { return ( diff --git a/crates/nu-parser/src/parser.rs b/crates/nu-parser/src/parser.rs index 63ccd8eb3a..5868c60743 100644 --- a/crates/nu-parser/src/parser.rs +++ b/crates/nu-parser/src/parser.rs @@ -487,7 +487,7 @@ pub fn parse_internal_call( command_span: Span, spans: &[Span], decl_id: usize, -) -> (Box, Span, Option) { +) -> (Box, Option) { let mut error = None; let mut call = Call::new(); @@ -618,7 +618,7 @@ pub fn parse_internal_call( } // FIXME: output type unknown - (Box::new(call), span(spans), error) + (Box::new(call), error) } pub fn parse_call( @@ -725,7 +725,7 @@ pub fn parse_call( } // parse internal command - let (call, _, err) = parse_internal_call( + let (call, err) = parse_internal_call( working_set, span(&spans[cmd_start..pos]), &spans[pos..],