diff --git a/src/modules/imports/import.rs b/src/modules/imports/import.rs index 22ff4484..54dc9857 100644 --- a/src/modules/imports/import.rs +++ b/src/modules/imports/import.rs @@ -146,21 +146,35 @@ impl SyntaxModule for Import { Err(_) => { token(meta, "{")?; let mut exports = vec![]; - loop { - let tok = meta.get_current_token(); - let name = variable(meta, variable_name_extensions())?; - let alias = match token(meta, "as") { - Ok(_) => Some(variable(meta, variable_name_extensions())?), - Err(_) => None - }; - exports.push((name, alias, tok)); - match token(meta, ",") { - Ok(_) => {}, - Err(_) => break + if token(meta, "}").is_err() { + loop { + let tok = meta.get_current_token(); + let name = variable(meta, variable_name_extensions())?; + let alias = match token(meta, "as") { + Ok(_) => Some(variable(meta, variable_name_extensions())?), + Err(_) => None + }; + exports.push((name, alias, tok)); + if token(meta, "}").is_ok() { + break; + } + match token(meta, ",") { + Ok(_) => { + if token(meta, "}").is_ok() { + break + } + } + Err(_) => { + return error!(meta, meta.get_current_token(), "Expected ',' or '}' after import"); + } + } } + } else { + let message = Message::new_warn_at_token(meta, self.token_import.clone()) + .message("Empty import statement"); + meta.add_message(message); } self.export_defs = exports; - token(meta, "}")?; } } token(meta, "from")?; diff --git a/src/tests/validity/import_with_trailing_comma.ab b/src/tests/validity/import_with_trailing_comma.ab new file mode 100644 index 00000000..727f6f5c --- /dev/null +++ b/src/tests/validity/import_with_trailing_comma.ab @@ -0,0 +1,12 @@ +import { + replace, + replace_regex, +} from "std/text" +import { sum, abs } from "std/math" + +// Output +// c +// 3 + +echo replace_regex(replace("aa", "a", "b"), "b+", "c", true) +echo sum([abs(-2), 1])