forked from extern/nushell
Prevent invalid var names
This commit is contained in:
parent
5f14faf4b4
commit
aea8627c30
@ -73,6 +73,10 @@ pub enum ParseError {
|
|||||||
#[diagnostic(code(nu::parser::variable_not_found), url(docsrs))]
|
#[diagnostic(code(nu::parser::variable_not_found), url(docsrs))]
|
||||||
VariableNotFound(#[label = "variable not found"] Span),
|
VariableNotFound(#[label = "variable not found"] Span),
|
||||||
|
|
||||||
|
#[error("Variable name not supported.")]
|
||||||
|
#[diagnostic(code(nu::parser::variable_not_valid), url(docsrs))]
|
||||||
|
VariableNotValid(#[label = "variable name can't contain spaces or quotes"] Span),
|
||||||
|
|
||||||
#[error("Module not found.")]
|
#[error("Module not found.")]
|
||||||
#[diagnostic(code(nu::parser::module_not_found), url(docsrs))]
|
#[diagnostic(code(nu::parser::module_not_found), url(docsrs))]
|
||||||
ModuleNotFound(#[label = "module not found"] Span),
|
ModuleNotFound(#[label = "module not found"] Span),
|
||||||
|
@ -1782,6 +1782,13 @@ pub fn parse_var_with_opt_type(
|
|||||||
) -> (Expression, Option<ParseError>) {
|
) -> (Expression, Option<ParseError>) {
|
||||||
let bytes = working_set.get_span_contents(spans[*spans_idx]).to_vec();
|
let bytes = working_set.get_span_contents(spans[*spans_idx]).to_vec();
|
||||||
|
|
||||||
|
if bytes.contains(&b' ') || bytes.contains(&b'"') || bytes.contains(&b'\'') {
|
||||||
|
return (
|
||||||
|
garbage(spans[*spans_idx]),
|
||||||
|
Some(ParseError::VariableNotValid(spans[*spans_idx])),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if bytes.ends_with(b":") {
|
if bytes.ends_with(b":") {
|
||||||
// We end with colon, so the next span should be the type
|
// We end with colon, so the next span should be the type
|
||||||
if *spans_idx + 1 < spans.len() {
|
if *spans_idx + 1 < spans.len() {
|
||||||
|
@ -759,3 +759,8 @@ fn custom_switch4() -> TestResult {
|
|||||||
"bar",
|
"bar",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn bad_var_name() -> TestResult {
|
||||||
|
fail_test(r#"let $"foo bar" = 4"#, "can't contain")
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user