Require packages and imports once again

This commit is contained in:
Richard Feldman 2020-11-18 23:28:30 -05:00
parent a7eb568267
commit 09d107e469
4 changed files with 12 additions and 67 deletions

View file

@ -175,50 +175,30 @@ pub fn module_name<'a>() -> impl Parser<'a, ModuleName<'a>> {
#[inline(always)]
pub fn app_header<'a>() -> impl Parser<'a, AppHeader<'a>> {
map_with_arena!(
map!(
and!(
skip_first!(
ascii_string("app"),
and!(space1(1), loc!(string_literal::parse()))
),
and!(
optional(packages()),
and!(optional(imports()), provides_to())
)
and!(packages(), and!(imports(), provides_to()))
),
|arena, ((after_app_keyword, name), (opt_pkgs, (opt_imports, provides)))| {
let (before_packages, after_packages, package_entries) = match opt_pkgs {
Some(pkgs) => {
let pkgs: Packages<'a> = pkgs; // rustc must be told the type here
(
pkgs.before_packages_keyword,
pkgs.after_packages_keyword,
pkgs.entries,
)
}
None => (&[] as _, &[] as _, Vec::new_in(arena)),
};
// rustc must be told the type here
let opt_imports: Option<(
(&'a [CommentOrNewline<'a>], &'a [CommentOrNewline<'a>]),
Vec<'a, Located<ImportsEntry<'a>>>,
)> = opt_imports;
let ((before_imports, after_imports), imports) =
opt_imports.unwrap_or_else(|| ((&[] as _, &[] as _), Vec::new_in(arena)));
|(
(after_app_keyword, name),
(pkgs, (((before_imports, after_imports), imports), provides)),
)| {
let pkgs: Packages<'a> = pkgs; // rustc must be told the type here
let provides: ProvidesTo<'a> = provides; // rustc must be told the type here
AppHeader {
name,
packages: package_entries,
packages: pkgs.entries,
imports,
provides: provides.entries,
to: provides.to,
after_app_keyword,
before_packages,
after_packages,
before_packages: pkgs.before_packages_keyword,
after_packages: pkgs.after_packages_keyword,
before_imports,
after_imports,
before_provides: provides.before_provides_keyword,