mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 21:39:07 +00:00
New app
header syntax
Implements the new app header syntax as discussed in Zulip [1].
app [main] {
cli: platform "../platform/main.roc",
json: "../json/main.roc"
}
Old headers still parse and are automatically upgraded to the new
syntax by the formatter.
[1] 418444862
This commit is contained in:
parent
057a18573a
commit
8dedd9f03c
90 changed files with 1044 additions and 1056 deletions
|
@ -48,6 +48,18 @@ impl<'a, T> Spaced<'a, T> {
|
|||
Spaced::SpaceBefore(next, _spaces) | Spaced::SpaceAfter(next, _spaces) => next.item(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn map<U, F: Fn(&T) -> U>(&self, arena: &'a Bump, f: F) -> Spaced<'a, U> {
|
||||
match self {
|
||||
Spaced::Item(item) => Spaced::Item(f(item)),
|
||||
Spaced::SpaceBefore(next, spaces) => {
|
||||
Spaced::SpaceBefore(arena.alloc(next.map(arena, f)), spaces)
|
||||
}
|
||||
Spaced::SpaceAfter(next, spaces) => {
|
||||
Spaced::SpaceAfter(arena.alloc(next.map(arena, f)), spaces)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T: Debug> Debug for Spaced<'a, T> {
|
||||
|
@ -108,7 +120,16 @@ impl<'a> Module<'a> {
|
|||
}),
|
||||
Self::header_imports_to_defs(arena, header.interface_imports),
|
||||
),
|
||||
header => (header, Defs::default()),
|
||||
Header::App(header) => (
|
||||
Header::App(AppHeader {
|
||||
old_imports: None,
|
||||
..header
|
||||
}),
|
||||
Self::header_imports_to_defs(arena, header.old_imports),
|
||||
),
|
||||
Header::Package(_) | Header::Platform(_) | Header::Hosted(_) => {
|
||||
(self.header, Defs::default())
|
||||
}
|
||||
};
|
||||
|
||||
(Module { header, ..self }, defs)
|
||||
|
@ -174,6 +195,7 @@ impl<'a> Module<'a> {
|
|||
},
|
||||
if index == len - 1 {
|
||||
let mut after = spaced.after.to_vec();
|
||||
after.extend_from_slice(imports.item.final_comments());
|
||||
after.push(CommentOrNewline::Newline);
|
||||
after.push(CommentOrNewline::Newline);
|
||||
arena.alloc(after)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue