Add tests and cover edge cases of the :: delim.

This commit is contained in:
Jakub Žádník
2021-10-19 23:38:49 +03:00
parent cbda1b1650
commit 5163dbb7a1
3 changed files with 47 additions and 0 deletions

View File

@ -171,6 +171,10 @@ pub enum ParseError {
#[diagnostic(code(nu::parser::missing_import_pattern), url(docsrs))]
MissingImportPattern(#[label = "needs an import pattern"] Span),
#[error("Wrong import pattern structure.")]
#[diagnostic(code(nu::parser::missing_import_pattern), url(docsrs))]
WrongImportPattern(#[label = "invalid import pattern structure"] Span),
#[error("Module export not found.")]
#[diagnostic(code(nu::parser::export_not_found), url(docsrs))]
ExportNotFound(#[label = "could not find imports"] Span),

View File

@ -1711,6 +1711,33 @@ pub fn parse_import_pattern(
);
}
if (tokens.len() != 1) && (tokens.len() != 4) {
return (
ImportPattern {
head: vec![],
members: vec![],
},
Some(ParseError::WrongImportPattern(span)),
);
}
let has_second_colon = if let Some(t) = tokens.get(2) {
let potential_colon = working_set.get_span_contents(t.span);
potential_colon == b":"
} else {
false
};
if (tokens.len() == 4) && !has_second_colon {
return (
ImportPattern {
head: vec![],
members: vec![],
},
Some(ParseError::WrongImportPattern(span)),
);
}
let head = working_set.get_span_contents(tokens[0].span).to_vec();
if let Some(tail) = tokens.get(3) {