mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 04:08:19 +00:00
Introduce record!
combinator
... and refactor header parser to fully use combinators, in support of future combinator-based superpowers
This commit is contained in:
parent
ec6db293f5
commit
2b91af02df
26 changed files with 1709 additions and 1486 deletions
|
@ -1,24 +1,48 @@
|
|||
App {
|
||||
header: AppHeader {
|
||||
name: @4-14 PlainLine(
|
||||
"test-app",
|
||||
),
|
||||
packages: [],
|
||||
imports: [],
|
||||
provides: [],
|
||||
provides_types: None,
|
||||
to: @53-57 ExistingPackage(
|
||||
"blah",
|
||||
),
|
||||
before_header: [],
|
||||
after_app_keyword: [],
|
||||
before_packages: [],
|
||||
after_packages: [],
|
||||
before_imports: [],
|
||||
after_imports: [],
|
||||
before_provides: [],
|
||||
after_provides: [],
|
||||
before_to: [],
|
||||
after_to: [],
|
||||
},
|
||||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_name: [],
|
||||
name: @4-14 PlainLine(
|
||||
"test-app",
|
||||
),
|
||||
packages: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
),
|
||||
imports: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
),
|
||||
provides: ProvidesTo {
|
||||
provides_keyword: Spaces {
|
||||
before: [],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
entries: [],
|
||||
types: None,
|
||||
to_keyword: Spaces {
|
||||
before: [],
|
||||
item: ToKeyword,
|
||||
after: [],
|
||||
},
|
||||
to: @53-57 ExistingPackage(
|
||||
"blah",
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,23 +1,45 @@
|
|||
Hosted {
|
||||
header: HostedHeader {
|
||||
name: @7-10 ModuleName(
|
||||
"Foo",
|
||||
),
|
||||
exposes: [],
|
||||
imports: [],
|
||||
generates: UppercaseIdent(
|
||||
"Bar",
|
||||
),
|
||||
generates_with: [],
|
||||
before_header: [],
|
||||
after_hosted_keyword: [],
|
||||
before_exposes: [],
|
||||
after_exposes: [],
|
||||
before_imports: [],
|
||||
after_imports: [],
|
||||
before_generates: [],
|
||||
after_generates: [],
|
||||
before_with: [],
|
||||
after_with: [],
|
||||
},
|
||||
Module {
|
||||
comments: [],
|
||||
header: Hosted(
|
||||
HostedHeader {
|
||||
before_name: [],
|
||||
name: @7-10 ModuleName(
|
||||
"Foo",
|
||||
),
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
generates: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: GeneratesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: UppercaseIdent(
|
||||
"Bar",
|
||||
),
|
||||
},
|
||||
generates_with: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: WithKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,15 +1,27 @@
|
|||
Interface {
|
||||
header: InterfaceHeader {
|
||||
name: @10-13 ModuleName(
|
||||
"Foo",
|
||||
),
|
||||
exposes: [],
|
||||
imports: [],
|
||||
before_header: [],
|
||||
after_interface_keyword: [],
|
||||
before_exposes: [],
|
||||
after_exposes: [],
|
||||
before_imports: [],
|
||||
after_imports: [],
|
||||
},
|
||||
Module {
|
||||
comments: [],
|
||||
header: Interface(
|
||||
InterfaceHeader {
|
||||
before_name: [],
|
||||
name: @10-13 ModuleName(
|
||||
"Foo",
|
||||
),
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,34 +1,61 @@
|
|||
Platform {
|
||||
header: PlatformHeader {
|
||||
name: @9-25 PackageName(
|
||||
"rtfeldman/blah",
|
||||
),
|
||||
requires: PlatformRequires {
|
||||
rigids: [],
|
||||
signature: @40-49 TypedIdent {
|
||||
ident: @40-44 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @47-49 Record {
|
||||
fields: [],
|
||||
ext: None,
|
||||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-25 PackageName(
|
||||
"rtfeldman/blah",
|
||||
),
|
||||
requires: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: RequiresKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: PlatformRequires {
|
||||
rigids: [],
|
||||
signature: @40-49 TypedIdent {
|
||||
ident: @40-44 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @47-49 Record {
|
||||
fields: [],
|
||||
ext: None,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
packages: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
provides: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
},
|
||||
exposes: [],
|
||||
packages: [],
|
||||
imports: [],
|
||||
provides: [],
|
||||
before_header: [],
|
||||
after_platform_keyword: [],
|
||||
before_requires: [],
|
||||
after_requires: [],
|
||||
before_exposes: [],
|
||||
after_exposes: [],
|
||||
before_packages: [],
|
||||
after_packages: [],
|
||||
before_imports: [],
|
||||
after_imports: [],
|
||||
before_provides: [],
|
||||
after_provides: [],
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,50 +1,74 @@
|
|||
App {
|
||||
header: AppHeader {
|
||||
name: @4-15 PlainLine(
|
||||
"quicksort",
|
||||
),
|
||||
packages: [
|
||||
@31-47 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @35-47 PackageName(
|
||||
"./platform",
|
||||
),
|
||||
},
|
||||
],
|
||||
imports: [
|
||||
@64-75 Package(
|
||||
"foo",
|
||||
ModuleName(
|
||||
"Bar.Baz",
|
||||
),
|
||||
[],
|
||||
),
|
||||
],
|
||||
provides: [
|
||||
@93-102 ExposedName(
|
||||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_name: [],
|
||||
name: @4-15 PlainLine(
|
||||
"quicksort",
|
||||
),
|
||||
],
|
||||
provides_types: None,
|
||||
to: @108-110 ExistingPackage(
|
||||
"pf",
|
||||
),
|
||||
before_header: [],
|
||||
after_app_keyword: [],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
after_packages: [],
|
||||
before_imports: [
|
||||
Newline,
|
||||
],
|
||||
after_imports: [],
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
after_provides: [],
|
||||
before_to: [],
|
||||
after_to: [],
|
||||
},
|
||||
packages: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@31-47 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @35-47 PackageName(
|
||||
"./platform",
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
imports: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@64-75 Package(
|
||||
"foo",
|
||||
ModuleName(
|
||||
"Bar.Baz",
|
||||
),
|
||||
[],
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
provides: ProvidesTo {
|
||||
provides_keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
entries: [
|
||||
@93-102 ExposedName(
|
||||
"quicksort",
|
||||
),
|
||||
],
|
||||
types: None,
|
||||
to_keyword: Spaces {
|
||||
before: [],
|
||||
item: ToKeyword,
|
||||
after: [],
|
||||
},
|
||||
to: @108-110 ExistingPackage(
|
||||
"pf",
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,75 +1,99 @@
|
|||
App {
|
||||
header: AppHeader {
|
||||
name: @4-15 PlainLine(
|
||||
"quicksort",
|
||||
),
|
||||
packages: [
|
||||
@31-47 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @35-47 PackageName(
|
||||
"./platform",
|
||||
),
|
||||
},
|
||||
],
|
||||
imports: [
|
||||
@65-141 Package(
|
||||
"foo",
|
||||
ModuleName(
|
||||
"Bar",
|
||||
),
|
||||
Collection {
|
||||
items: [
|
||||
@83-86 SpaceBefore(
|
||||
ExposedName(
|
||||
"Baz",
|
||||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_name: [],
|
||||
name: @4-15 PlainLine(
|
||||
"quicksort",
|
||||
),
|
||||
packages: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@31-47 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @35-47 PackageName(
|
||||
"./platform",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@96-104 SpaceBefore(
|
||||
ExposedName(
|
||||
"FortyTwo",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
},
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
LineComment(
|
||||
" I'm a happy comment",
|
||||
},
|
||||
),
|
||||
imports: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@65-141 Package(
|
||||
"foo",
|
||||
ModuleName(
|
||||
"Bar",
|
||||
),
|
||||
Collection {
|
||||
items: [
|
||||
@83-86 SpaceBefore(
|
||||
ExposedName(
|
||||
"Baz",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@96-104 SpaceBefore(
|
||||
ExposedName(
|
||||
"FortyTwo",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
LineComment(
|
||||
" I'm a happy comment",
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
provides: [
|
||||
@159-168 ExposedName(
|
||||
"quicksort",
|
||||
),
|
||||
],
|
||||
provides_types: None,
|
||||
to: @175-177 ExistingPackage(
|
||||
"pf",
|
||||
),
|
||||
before_header: [],
|
||||
after_app_keyword: [],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
after_packages: [],
|
||||
before_imports: [
|
||||
Newline,
|
||||
],
|
||||
after_imports: [],
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
after_provides: [],
|
||||
before_to: [],
|
||||
after_to: [],
|
||||
},
|
||||
provides: ProvidesTo {
|
||||
provides_keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
entries: [
|
||||
@159-168 ExposedName(
|
||||
"quicksort",
|
||||
),
|
||||
],
|
||||
types: None,
|
||||
to_keyword: Spaces {
|
||||
before: [],
|
||||
item: ToKeyword,
|
||||
after: [],
|
||||
},
|
||||
to: @175-177 ExistingPackage(
|
||||
"pf",
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,71 +1,98 @@
|
|||
Platform {
|
||||
header: PlatformHeader {
|
||||
name: @9-14 PackageName(
|
||||
"cli",
|
||||
),
|
||||
requires: PlatformRequires {
|
||||
rigids: [],
|
||||
signature: @32-49 TypedIdent {
|
||||
ident: @32-36 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @39-49 Apply(
|
||||
"",
|
||||
"Task",
|
||||
[
|
||||
@44-46 Record {
|
||||
fields: [],
|
||||
ext: None,
|
||||
},
|
||||
@47-49 TagUnion {
|
||||
ext: None,
|
||||
tags: [],
|
||||
},
|
||||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-14 PackageName(
|
||||
"cli",
|
||||
),
|
||||
requires: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
item: RequiresKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: PlatformRequires {
|
||||
rigids: [],
|
||||
signature: @32-49 TypedIdent {
|
||||
ident: @32-36 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @39-49 Apply(
|
||||
"",
|
||||
"Task",
|
||||
[
|
||||
@44-46 Record {
|
||||
fields: [],
|
||||
ext: None,
|
||||
},
|
||||
@47-49 TagUnion {
|
||||
ext: None,
|
||||
tags: [],
|
||||
},
|
||||
],
|
||||
),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
exposes: [],
|
||||
packages: [],
|
||||
imports: [
|
||||
@110-123 Module(
|
||||
ModuleName(
|
||||
"Task",
|
||||
),
|
||||
[
|
||||
@117-121 ExposedName(
|
||||
"Task",
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
LineComment(
|
||||
" TODO FIXME",
|
||||
),
|
||||
],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
packages: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@110-123 Module(
|
||||
ModuleName(
|
||||
"Task",
|
||||
),
|
||||
[
|
||||
@117-121 ExposedName(
|
||||
"Task",
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
provides: [
|
||||
@141-152 ExposedName(
|
||||
"mainForHost",
|
||||
),
|
||||
],
|
||||
before_header: [],
|
||||
after_platform_keyword: [],
|
||||
before_requires: [
|
||||
Newline,
|
||||
],
|
||||
after_requires: [],
|
||||
before_exposes: [
|
||||
LineComment(
|
||||
" TODO FIXME",
|
||||
),
|
||||
],
|
||||
after_exposes: [],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
after_packages: [],
|
||||
before_imports: [
|
||||
Newline,
|
||||
],
|
||||
after_imports: [],
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
after_provides: [],
|
||||
},
|
||||
},
|
||||
provides: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@141-152 ExposedName(
|
||||
"mainForHost",
|
||||
),
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,15 +1,27 @@
|
|||
Interface {
|
||||
header: InterfaceHeader {
|
||||
name: @10-11 ModuleName(
|
||||
"T",
|
||||
),
|
||||
exposes: [],
|
||||
imports: [],
|
||||
before_header: [],
|
||||
after_interface_keyword: [],
|
||||
before_exposes: [],
|
||||
after_exposes: [],
|
||||
before_imports: [],
|
||||
after_imports: [],
|
||||
},
|
||||
Module {
|
||||
comments: [],
|
||||
header: Interface(
|
||||
InterfaceHeader {
|
||||
before_name: [],
|
||||
name: @10-11 ModuleName(
|
||||
"T",
|
||||
),
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,26 +1,32 @@
|
|||
App {
|
||||
header: AppHeader {
|
||||
name: @4-14 PlainLine(
|
||||
"test-app",
|
||||
),
|
||||
packages: [],
|
||||
imports: [],
|
||||
provides: [],
|
||||
provides_types: None,
|
||||
to: @30-38 NewPackage(
|
||||
PackageName(
|
||||
"./blah",
|
||||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_name: [],
|
||||
name: @4-14 PlainLine(
|
||||
"test-app",
|
||||
),
|
||||
),
|
||||
before_header: [],
|
||||
after_app_keyword: [],
|
||||
before_packages: [],
|
||||
after_packages: [],
|
||||
before_imports: [],
|
||||
after_imports: [],
|
||||
before_provides: [],
|
||||
after_provides: [],
|
||||
before_to: [],
|
||||
after_to: [],
|
||||
},
|
||||
packages: None,
|
||||
imports: None,
|
||||
provides: ProvidesTo {
|
||||
provides_keyword: Spaces {
|
||||
before: [],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
entries: [],
|
||||
types: None,
|
||||
to_keyword: Spaces {
|
||||
before: [],
|
||||
item: ToKeyword,
|
||||
after: [],
|
||||
},
|
||||
to: @30-38 NewPackage(
|
||||
PackageName(
|
||||
"./blah",
|
||||
),
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,15 +1,27 @@
|
|||
Interface {
|
||||
header: InterfaceHeader {
|
||||
name: @10-21 ModuleName(
|
||||
"Foo.Bar.Baz",
|
||||
),
|
||||
exposes: [],
|
||||
imports: [],
|
||||
before_header: [],
|
||||
after_interface_keyword: [],
|
||||
before_exposes: [],
|
||||
after_exposes: [],
|
||||
before_imports: [],
|
||||
after_imports: [],
|
||||
},
|
||||
Module {
|
||||
comments: [],
|
||||
header: Interface(
|
||||
InterfaceHeader {
|
||||
before_name: [],
|
||||
name: @10-21 ModuleName(
|
||||
"Foo.Bar.Baz",
|
||||
),
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,130 +1,152 @@
|
|||
Hosted {
|
||||
header: HostedHeader {
|
||||
name: @7-10 ModuleName(
|
||||
"Foo",
|
||||
),
|
||||
exposes: Collection {
|
||||
items: [
|
||||
@45-50 SpaceBefore(
|
||||
ExposedName(
|
||||
"Stuff",
|
||||
),
|
||||
[
|
||||
Module {
|
||||
comments: [],
|
||||
header: Hosted(
|
||||
HostedHeader {
|
||||
before_name: [],
|
||||
name: @7-10 ModuleName(
|
||||
"Foo",
|
||||
),
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@64-70 SpaceBefore(
|
||||
ExposedName(
|
||||
"Things",
|
||||
),
|
||||
[
|
||||
item: ExposesKeyword,
|
||||
after: [
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@84-97 SpaceBefore(
|
||||
ExposedName(
|
||||
"somethingElse",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
imports: Collection {
|
||||
items: [
|
||||
@143-147 SpaceBefore(
|
||||
Module(
|
||||
ModuleName(
|
||||
"Blah",
|
||||
),
|
||||
[],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@161-182 SpaceBefore(
|
||||
Module(
|
||||
ModuleName(
|
||||
"Baz",
|
||||
),
|
||||
[
|
||||
@167-172 ExposedName(
|
||||
"stuff",
|
||||
},
|
||||
item: Collection {
|
||||
items: [
|
||||
@45-50 SpaceBefore(
|
||||
ExposedName(
|
||||
"Stuff",
|
||||
),
|
||||
@174-180 ExposedName(
|
||||
"things",
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@64-70 SpaceBefore(
|
||||
ExposedName(
|
||||
"Things",
|
||||
),
|
||||
],
|
||||
),
|
||||
[
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@84-97 SpaceBefore(
|
||||
ExposedName(
|
||||
"somethingElse",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ImportsKeyword,
|
||||
after: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
item: Collection {
|
||||
items: [
|
||||
@143-147 SpaceBefore(
|
||||
Module(
|
||||
ModuleName(
|
||||
"Blah",
|
||||
),
|
||||
[],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@161-182 SpaceBefore(
|
||||
Module(
|
||||
ModuleName(
|
||||
"Baz",
|
||||
),
|
||||
[
|
||||
@167-172 ExposedName(
|
||||
"stuff",
|
||||
),
|
||||
@174-180 ExposedName(
|
||||
"things",
|
||||
),
|
||||
],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
},
|
||||
generates: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: GeneratesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: UppercaseIdent(
|
||||
"Bar",
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
generates_with: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [],
|
||||
item: WithKeyword,
|
||||
after: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
item: Collection {
|
||||
items: [
|
||||
@239-242 SpaceBefore(
|
||||
ExposedName(
|
||||
"map",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@256-261 SpaceBefore(
|
||||
ExposedName(
|
||||
"after",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@275-279 SpaceBefore(
|
||||
ExposedName(
|
||||
"loop",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
generates: UppercaseIdent(
|
||||
"Bar",
|
||||
),
|
||||
generates_with: Collection {
|
||||
items: [
|
||||
@239-242 SpaceBefore(
|
||||
ExposedName(
|
||||
"map",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@256-261 SpaceBefore(
|
||||
ExposedName(
|
||||
"after",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@275-279 SpaceBefore(
|
||||
ExposedName(
|
||||
"loop",
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
before_header: [],
|
||||
after_hosted_keyword: [],
|
||||
before_exposes: [
|
||||
Newline,
|
||||
],
|
||||
after_exposes: [
|
||||
Newline,
|
||||
],
|
||||
before_imports: [
|
||||
Newline,
|
||||
],
|
||||
after_imports: [
|
||||
Newline,
|
||||
],
|
||||
before_generates: [
|
||||
Newline,
|
||||
],
|
||||
after_generates: [],
|
||||
before_with: [],
|
||||
after_with: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,60 +1,87 @@
|
|||
Platform {
|
||||
header: PlatformHeader {
|
||||
name: @9-21 PackageName(
|
||||
"foo/barbaz",
|
||||
),
|
||||
requires: PlatformRequires {
|
||||
rigids: [
|
||||
@36-41 UppercaseIdent(
|
||||
"Model",
|
||||
),
|
||||
],
|
||||
signature: @45-54 TypedIdent {
|
||||
ident: @45-49 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @52-54 Record {
|
||||
fields: [],
|
||||
ext: None,
|
||||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-21 PackageName(
|
||||
"foo/barbaz",
|
||||
),
|
||||
requires: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: RequiresKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: PlatformRequires {
|
||||
rigids: [
|
||||
@36-41 UppercaseIdent(
|
||||
"Model",
|
||||
),
|
||||
],
|
||||
signature: @45-54 TypedIdent {
|
||||
ident: @45-49 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @52-54 Record {
|
||||
fields: [],
|
||||
ext: None,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
exposes: [],
|
||||
packages: [
|
||||
@87-99 PackageEntry {
|
||||
shorthand: "foo",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @92-99 PackageName(
|
||||
"./foo",
|
||||
),
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
],
|
||||
imports: [],
|
||||
provides: [
|
||||
@132-143 ExposedName(
|
||||
"mainForHost",
|
||||
),
|
||||
],
|
||||
before_header: [],
|
||||
after_platform_keyword: [],
|
||||
before_requires: [
|
||||
Newline,
|
||||
],
|
||||
after_requires: [],
|
||||
before_exposes: [
|
||||
Newline,
|
||||
],
|
||||
after_exposes: [],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
after_packages: [],
|
||||
before_imports: [
|
||||
Newline,
|
||||
],
|
||||
after_imports: [],
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
after_provides: [],
|
||||
},
|
||||
packages: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@87-99 PackageEntry {
|
||||
shorthand: "foo",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @92-99 PackageName(
|
||||
"./foo",
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
provides: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@132-143 ExposedName(
|
||||
"mainForHost",
|
||||
),
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,59 +1,83 @@
|
|||
App {
|
||||
header: AppHeader {
|
||||
name: @4-10 PlainLine(
|
||||
"test",
|
||||
),
|
||||
packages: [
|
||||
@26-42 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @30-42 PackageName(
|
||||
"./platform",
|
||||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_name: [],
|
||||
name: @4-10 PlainLine(
|
||||
"test",
|
||||
),
|
||||
packages: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@26-42 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
package_name: @30-42 PackageName(
|
||||
"./platform",
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
imports: Some(
|
||||
KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@59-70 Package(
|
||||
"foo",
|
||||
ModuleName(
|
||||
"Bar.Baz",
|
||||
),
|
||||
[],
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
provides: ProvidesTo {
|
||||
provides_keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
entries: [
|
||||
@88-97 ExposedName(
|
||||
"quicksort",
|
||||
),
|
||||
],
|
||||
types: Some(
|
||||
[
|
||||
@102-107 UppercaseIdent(
|
||||
"Flags",
|
||||
),
|
||||
@109-114 UppercaseIdent(
|
||||
"Model",
|
||||
),
|
||||
],
|
||||
),
|
||||
to_keyword: Spaces {
|
||||
before: [],
|
||||
item: ToKeyword,
|
||||
after: [],
|
||||
},
|
||||
to: @121-123 ExistingPackage(
|
||||
"pf",
|
||||
),
|
||||
},
|
||||
],
|
||||
imports: [
|
||||
@59-70 Package(
|
||||
"foo",
|
||||
ModuleName(
|
||||
"Bar.Baz",
|
||||
),
|
||||
[],
|
||||
),
|
||||
],
|
||||
provides: [
|
||||
@88-97 ExposedName(
|
||||
"quicksort",
|
||||
),
|
||||
],
|
||||
provides_types: Some(
|
||||
[
|
||||
@102-107 UppercaseIdent(
|
||||
"Flags",
|
||||
),
|
||||
@109-114 UppercaseIdent(
|
||||
"Model",
|
||||
),
|
||||
],
|
||||
),
|
||||
to: @121-123 ExistingPackage(
|
||||
"pf",
|
||||
),
|
||||
before_header: [],
|
||||
after_app_keyword: [],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
after_packages: [],
|
||||
before_imports: [
|
||||
Newline,
|
||||
],
|
||||
after_imports: [],
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
after_provides: [],
|
||||
before_to: [],
|
||||
after_to: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
|
@ -1,67 +1,94 @@
|
|||
Platform {
|
||||
header: PlatformHeader {
|
||||
name: @9-21 PackageName(
|
||||
"test/types",
|
||||
),
|
||||
requires: PlatformRequires {
|
||||
rigids: [
|
||||
@37-42 UppercaseIdent(
|
||||
"Flags",
|
||||
),
|
||||
@44-49 UppercaseIdent(
|
||||
"Model",
|
||||
),
|
||||
],
|
||||
signature: @55-77 TypedIdent {
|
||||
ident: @55-59 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @62-77 Apply(
|
||||
"",
|
||||
"App",
|
||||
[
|
||||
@66-71 Apply(
|
||||
"",
|
||||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-21 PackageName(
|
||||
"test/types",
|
||||
),
|
||||
requires: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: RequiresKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: PlatformRequires {
|
||||
rigids: [
|
||||
@37-42 UppercaseIdent(
|
||||
"Flags",
|
||||
[],
|
||||
),
|
||||
@72-77 Apply(
|
||||
"",
|
||||
@44-49 UppercaseIdent(
|
||||
"Model",
|
||||
[],
|
||||
),
|
||||
],
|
||||
),
|
||||
signature: @55-77 TypedIdent {
|
||||
ident: @55-59 "main",
|
||||
spaces_before_colon: [],
|
||||
ann: @62-77 Apply(
|
||||
"",
|
||||
"App",
|
||||
[
|
||||
@66-71 Apply(
|
||||
"",
|
||||
"Flags",
|
||||
[],
|
||||
),
|
||||
@72-77 Apply(
|
||||
"",
|
||||
"Model",
|
||||
[],
|
||||
),
|
||||
],
|
||||
),
|
||||
},
|
||||
},
|
||||
},
|
||||
exposes: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ExposesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
packages: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: PackagesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
imports: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ImportsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [],
|
||||
},
|
||||
provides: KeywordItem {
|
||||
keyword: Spaces {
|
||||
before: [
|
||||
Newline,
|
||||
],
|
||||
item: ProvidesKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: [
|
||||
@141-152 ExposedName(
|
||||
"mainForHost",
|
||||
),
|
||||
],
|
||||
},
|
||||
},
|
||||
exposes: [],
|
||||
packages: [],
|
||||
imports: [],
|
||||
provides: [
|
||||
@141-152 ExposedName(
|
||||
"mainForHost",
|
||||
),
|
||||
],
|
||||
before_header: [],
|
||||
after_platform_keyword: [],
|
||||
before_requires: [
|
||||
Newline,
|
||||
],
|
||||
after_requires: [],
|
||||
before_exposes: [
|
||||
Newline,
|
||||
],
|
||||
after_exposes: [],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
after_packages: [],
|
||||
before_imports: [
|
||||
Newline,
|
||||
],
|
||||
after_imports: [],
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
after_provides: [],
|
||||
},
|
||||
),
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue