Support package-qualified imports

This commit is contained in:
Richard Feldman 2020-11-26 21:07:57 -05:00
parent b70f265242
commit d0c651726d
3 changed files with 15 additions and 7 deletions

View file

@ -175,7 +175,7 @@ fn fmt_imports_entry<'a>(buf: &mut String<'a>, entry: &'a ImportsEntry<'a>, inde
}
}
Package(_name, _entries) => {
Package(_pkg, _name, _entries) => {
todo!("TODO Format imported package");
}

View file

@ -2796,7 +2796,7 @@ fn exposed_from_import(entry: &ImportsEntry<'_>) -> (ModuleName, Vec<Ident>) {
(module_name.as_str().into(), exposed)
}
Package(_package_name, _exposes) => {
Package(_package_name, _module_name, _exposes) => {
todo!("TODO support exposing package-qualified module names.");
}

View file

@ -547,8 +547,12 @@ fn typed_ident<'a>() -> impl Parser<'a, TypedIdent<'a>> {
fn imports_entry<'a>() -> impl Parser<'a, ImportsEntry<'a>> {
map_with_arena!(
and!(
and!(
// e.g. `base.`
optional(skip_second!(lowercase_ident(), ascii_char(b'.'))),
// e.g. `Task`
module_name(),
module_name()
),
// e.g. `.{ Task, after}`
optional(skip_first!(
ascii_char(b'.'),
@ -562,13 +566,17 @@ fn imports_entry<'a>() -> impl Parser<'a, ImportsEntry<'a>> {
))
),
|arena,
(module_name, opt_values): (
ModuleName<'a>,
((opt_shortname, module_name), opt_values): (
(Option<&'a str>, ModuleName<'a>),
Option<Vec<'a, Located<ExposesEntry<'a, &'a str>>>>
)| {
let exposed_values = opt_values.unwrap_or_else(|| Vec::new_in(arena));
ImportsEntry::Module(module_name, exposed_values)
match opt_shortname {
Some(shortname) => ImportsEntry::Package(shortname, module_name, exposed_values),
None => ImportsEntry::Module(module_name, exposed_values),
}
}
)
}