mirror of
https://github.com/nushell/nushell.git
synced 2025-03-28 16:46:18 +01:00
check for = before internal parsing
This commit is contained in:
parent
47ee50072e
commit
4b8ba29cdb
@ -72,7 +72,7 @@ fn check_name(working_set: &mut StateWorkingSet, spans: &[Span]) -> Option<Parse
|
|||||||
} else if working_set.get_span_contents(spans[2]) != b"=" {
|
} else if working_set.get_span_contents(spans[2]) != b"=" {
|
||||||
Some(ParseError::UnknownState(
|
Some(ParseError::UnknownState(
|
||||||
"missing equal sign in definition".into(),
|
"missing equal sign in definition".into(),
|
||||||
spans[2],
|
span(spans),
|
||||||
))
|
))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
@ -600,6 +600,23 @@ pub fn parse_call(
|
|||||||
name = new_name;
|
name = new_name;
|
||||||
pos += 1;
|
pos += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Before the internal parsing we check if there is no let or alias declarations
|
||||||
|
// that are missing their name, e.g.: let = 1 or alias = 2
|
||||||
|
if spans.len() > 1 {
|
||||||
|
let test_equal = working_set.get_span_contents(spans[1]);
|
||||||
|
|
||||||
|
if test_equal == &[b'='] {
|
||||||
|
return (
|
||||||
|
garbage(Span::new(0, 0)),
|
||||||
|
Some(ParseError::UnknownState(
|
||||||
|
"internal error: incomplete statement".into(),
|
||||||
|
span(spans),
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// parse internal command
|
// parse internal command
|
||||||
let (call, _, err) =
|
let (call, _, err) =
|
||||||
parse_internal_call(working_set, span(&spans[0..pos]), &spans[pos..], decl_id);
|
parse_internal_call(working_set, span(&spans[0..pos]), &spans[pos..], decl_id);
|
||||||
@ -2568,16 +2585,16 @@ pub fn parse_statement(
|
|||||||
working_set: &mut StateWorkingSet,
|
working_set: &mut StateWorkingSet,
|
||||||
spans: &[Span],
|
spans: &[Span],
|
||||||
) -> (Statement, Option<ParseError>) {
|
) -> (Statement, Option<ParseError>) {
|
||||||
let name = working_set.get_span_contents(spans[0]);
|
// FIXME: improve errors by checking keyword first
|
||||||
|
if let (decl, None) = parse_def(working_set, spans) {
|
||||||
match name {
|
(decl, None)
|
||||||
b"def" => parse_def(working_set, spans),
|
} else if let (stmt, None) = parse_let(working_set, spans) {
|
||||||
b"let" => parse_let(working_set, spans),
|
(stmt, None)
|
||||||
b"alias" => parse_alias(working_set, spans),
|
} else if let (stmt, None) = parse_alias(working_set, spans) {
|
||||||
_ => {
|
(stmt, None)
|
||||||
let (expr, err) = parse_expression(working_set, spans);
|
} else {
|
||||||
(Statement::Pipeline(Pipeline::from_vec(vec![expr])), err)
|
let (expr, err) = parse_expression(working_set, spans);
|
||||||
}
|
(Statement::Pipeline(Pipeline::from_vec(vec![expr])), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user