Merge pull request #6708 from roc-lang/module-params-syntax

Parse and format module params
This commit is contained in:
Ayaz 2024-05-12 13:51:13 -05:00 committed by GitHub
commit e5ea6dc461
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
46 changed files with 989 additions and 162 deletions

View file

@ -11,8 +11,9 @@ use roc_parse::{
WhenBranch,
},
header::{
AppHeader, ExposedName, HostedHeader, ImportsEntry, ModuleHeader, ModuleName, PackageEntry,
PackageHeader, PackageName, PlatformHeader, PlatformRequires, ProvidesTo, To, TypedIdent,
AppHeader, ExposedName, HostedHeader, ImportsEntry, ModuleHeader, ModuleName, ModuleParams,
PackageEntry, PackageHeader, PackageName, PlatformHeader, PlatformRequires, ProvidesTo, To,
TypedIdent,
},
ident::{Accessor, UppercaseIdent},
};
@ -213,12 +214,41 @@ impl IterTokens for Header<'_> {
impl IterTokens for ModuleHeader<'_> {
fn iter_tokens<'a>(&self, arena: &'a Bump) -> BumpVec<'a, Loc<Token>> {
let Self {
before_exposes: _,
after_keyword: _,
params,
exposes,
interface_imports: _,
} = self;
exposes.iter_tokens(arena)
params
.iter_tokens(arena)
.into_iter()
.chain(exposes.iter_tokens(arena))
.collect_in(arena)
}
}
impl<T> IterTokens for Option<T>
where
T: IterTokens,
{
fn iter_tokens<'a>(&self, arena: &'a Bump) -> BumpVec<'a, Loc<Token>> {
match self {
Some(params) => params.iter_tokens(arena),
None => bumpvec![in arena;],
}
}
}
impl IterTokens for ModuleParams<'_> {
fn iter_tokens<'a>(&self, arena: &'a Bump) -> BumpVec<'a, Loc<Token>> {
let Self {
params,
before_arrow: _,
after_arrow: _,
} = self;
params.iter_tokens(arena)
}
}