Make provides a Collection

This commit is contained in:
Joshua Warner 2021-11-12 10:58:45 -08:00
parent d67b6c50b1
commit df89fe7dd6
4 changed files with 14 additions and 17 deletions

View file

@ -2642,7 +2642,7 @@ fn parse_header<'a>(
opt_shorthand, opt_shorthand,
header_src, header_src,
packages, packages,
exposes: header.provides.into_bump_slice(), exposes: header.provides.items,
imports: header.imports.items, imports: header.imports.items,
to_platform: Some(header.to.value.clone()), to_platform: Some(header.to.value.clone()),
}; };
@ -3410,7 +3410,7 @@ fn fabricate_pkg_config_module<'a>(
module_timing: ModuleTiming, module_timing: ModuleTiming,
) -> (ModuleId, Msg<'a>) { ) -> (ModuleId, Msg<'a>) {
let provides: &'a [Located<ExposesEntry<'a, &'a str>>] = let provides: &'a [Located<ExposesEntry<'a, &'a str>>] =
header.provides.clone().into_bump_slice(); header.provides.items;
let info = PlatformHeaderInfo { let info = PlatformHeaderInfo {
filename, filename,

View file

@ -83,7 +83,7 @@ pub struct AppHeader<'a> {
pub name: Loc<StrLiteral<'a>>, pub name: Loc<StrLiteral<'a>>,
pub packages: Collection<'a, Loc<PackageEntry<'a>>>, pub packages: Collection<'a, Loc<PackageEntry<'a>>>,
pub imports: Collection<'a, Loc<ImportsEntry<'a>>>, pub imports: Collection<'a, Loc<ImportsEntry<'a>>>,
pub provides: Vec<'a, Loc<ExposesEntry<'a, &'a str>>>, pub provides: Collection<'a, Loc<ExposesEntry<'a, &'a str>>>,
pub to: Loc<To<'a>>, pub to: Loc<To<'a>>,
// Potential comments and newlines - these will typically all be empty. // Potential comments and newlines - these will typically all be empty.
@ -148,7 +148,7 @@ pub struct PlatformHeader<'a> {
pub exposes: Vec<'a, Loc<ExposesEntry<'a, ModuleName<'a>>>>, pub exposes: Vec<'a, Loc<ExposesEntry<'a, ModuleName<'a>>>>,
pub packages: Collection<'a, Loc<PackageEntry<'a>>>, pub packages: Collection<'a, Loc<PackageEntry<'a>>>,
pub imports: Collection<'a, Loc<ImportsEntry<'a>>>, pub imports: Collection<'a, Loc<ImportsEntry<'a>>>,
pub provides: Vec<'a, Loc<ExposesEntry<'a, &'a str>>>, pub provides: Collection<'a, Loc<ExposesEntry<'a, &'a str>>>,
pub effects: Effects<'a>, pub effects: Effects<'a>,
// Potential comments and newlines - these will typically all be empty. // Potential comments and newlines - these will typically all be empty.

View file

@ -270,7 +270,7 @@ fn platform_header<'a>() -> impl Parser<'a, PlatformHeader<'a>, EHeader<'a>> {
let (_, ((before_imports, after_imports), imports), state) = let (_, ((before_imports, after_imports), imports), state) =
specialize(EHeader::Imports, imports()).parse(arena, state)?; specialize(EHeader::Imports, imports()).parse(arena, state)?;
let (_, ((before_provides, after_provides), (provides, provides_final_comments)), state) = let (_, ((before_provides, after_provides), provides), state) =
specialize(EHeader::Provides, provides_without_to()).parse(arena, state)?; specialize(EHeader::Provides, provides_without_to()).parse(arena, state)?;
let (_, effects, state) = specialize(EHeader::Effects, effects()).parse(arena, state)?; let (_, effects, state) = specialize(EHeader::Effects, effects()).parse(arena, state)?;
@ -303,7 +303,7 @@ fn platform_header<'a>() -> impl Parser<'a, PlatformHeader<'a>, EHeader<'a>> {
#[derive(Debug)] #[derive(Debug)]
struct ProvidesTo<'a> { struct ProvidesTo<'a> {
entries: Vec<'a, Located<ExposesEntry<'a, &'a str>>>, entries: Collection<'a, Located<ExposesEntry<'a, &'a str>>>,
to: Located<To<'a>>, to: Located<To<'a>>,
before_provides_keyword: &'a [CommentOrNewline<'a>], before_provides_keyword: &'a [CommentOrNewline<'a>],
@ -342,7 +342,7 @@ fn provides_to<'a>() -> impl Parser<'a, ProvidesTo<'a>, EProvides<'a>> {
) )
), ),
|( |(
((before_provides_keyword, after_provides_keyword), (entries, final_comments)), ((before_provides_keyword, after_provides_keyword), entries),
((before_to_keyword, after_to_keyword), to), ((before_to_keyword, after_to_keyword), to),
)| { )| {
ProvidesTo { ProvidesTo {
@ -362,10 +362,7 @@ fn provides_without_to<'a>() -> impl Parser<
'a, 'a,
( (
(&'a [CommentOrNewline<'a>], &'a [CommentOrNewline<'a>]), (&'a [CommentOrNewline<'a>], &'a [CommentOrNewline<'a>]),
( Collection<'a, Located<ExposesEntry<'a, &'a str>>>,
Vec<'a, Located<ExposesEntry<'a, &'a str>>>,
&'a [CommentOrNewline<'a>],
),
), ),
EProvides<'a>, EProvides<'a>,
> { > {

View file

@ -3078,7 +3078,7 @@ mod test_parse {
let arena = Bump::new(); let arena = Bump::new();
let packages = Collection::empty(); let packages = Collection::empty();
let imports = Collection::empty(); let imports = Collection::empty();
let provides = Vec::new_in(&arena); let provides = Collection::empty();
let module_name = StrLiteral::PlainLine("test-app"); let module_name = StrLiteral::PlainLine("test-app");
let header = AppHeader { let header = AppHeader {
name: Located::new(0, 0, 4, 14, module_name), name: Located::new(0, 0, 4, 14, module_name),
@ -3118,7 +3118,7 @@ mod test_parse {
let arena = Bump::new(); let arena = Bump::new();
let packages = Collection::empty(); let packages = Collection::empty();
let imports = Collection::empty(); let imports = Collection::empty();
let provides = Vec::new_in(&arena); let provides = Collection::empty();
let module_name = StrLiteral::PlainLine("test-app"); let module_name = StrLiteral::PlainLine("test-app");
let header = AppHeader { let header = AppHeader {
before_header: &[], before_header: &[],
@ -3170,7 +3170,7 @@ mod test_parse {
let loc_import = Located::new(2, 2, 14, 25, import); let loc_import = Located::new(2, 2, 14, 25, import);
let imports = Collection::with_items(arena.alloc([loc_import])); let imports = Collection::with_items(arena.alloc([loc_import]));
let provide_entry = Located::new(3, 3, 15, 24, Exposed("quicksort")); let provide_entry = Located::new(3, 3, 15, 24, Exposed("quicksort"));
let provides = bumpalo::vec![in &arena; provide_entry]; let provides = Collection::with_items(arena.alloc([provide_entry]));
let module_name = StrLiteral::PlainLine("quicksort"); let module_name = StrLiteral::PlainLine("quicksort");
let header = AppHeader { let header = AppHeader {
@ -3255,7 +3255,7 @@ mod test_parse {
let loc_import = Located::new(2, 6, 14, 5, import); let loc_import = Located::new(2, 6, 14, 5, import);
let imports = Collection::with_items(arena.alloc([loc_import])); let imports = Collection::with_items(arena.alloc([loc_import]));
let provide_entry = Located::new(7, 7, 15, 24, Exposed("quicksort")); let provide_entry = Located::new(7, 7, 15, 24, Exposed("quicksort"));
let provides = bumpalo::vec![in &arena; provide_entry]; let provides = Collection::with_items(arena.alloc([provide_entry]));
let module_name = StrLiteral::PlainLine("quicksort"); let module_name = StrLiteral::PlainLine("quicksort");
let header = AppHeader { let header = AppHeader {
@ -3343,7 +3343,7 @@ mod test_parse {
exposes: Vec::new_in(&arena), exposes: Vec::new_in(&arena),
packages: Collection::empty(), packages: Collection::empty(),
imports: Collection::empty(), imports: Collection::empty(),
provides: Vec::new_in(&arena), provides: Collection::empty(),
effects, effects,
after_platform_keyword: &[], after_platform_keyword: &[],
before_requires: &[], before_requires: &[],
@ -3387,7 +3387,7 @@ mod test_parse {
let packages = Collection::with_items(arena.alloc([loc_pkg_entry])); let packages = Collection::with_items(arena.alloc([loc_pkg_entry]));
let imports = Collection::empty(); let imports = Collection::empty();
let provide_entry = Located::new(5, 5, 15, 26, Exposed("mainForHost")); let provide_entry = Located::new(5, 5, 15, 26, Exposed("mainForHost"));
let provides = bumpalo::vec![in &arena; provide_entry]; let provides = Collection::with_items(arena.alloc([provide_entry]));
let effects = Effects { let effects = Effects {
effect_type_name: "Effect", effect_type_name: "Effect",
effect_shortname: "fx", effect_shortname: "fx",