mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-03 11:52:19 +00:00
Merge branch 'main' into typecheck-module-params
This commit is contained in:
commit
b451e69b20
53 changed files with 1814 additions and 1790 deletions
|
@ -1,8 +1,8 @@
|
|||
use bumpalo::Bump;
|
||||
use roc_fmt::{annotation::Formattable, module::fmt_module};
|
||||
use roc_fmt::{annotation::Formattable, header::fmt_header};
|
||||
use roc_parse::{
|
||||
ast::{Defs, Expr, Malformed, Module},
|
||||
module::parse_module_defs,
|
||||
ast::{Defs, Expr, FullAst, Header, Malformed, SpacesBefore},
|
||||
header::parse_module_defs,
|
||||
parser::{Parser, SyntaxError},
|
||||
remove_spaces::RemoveSpaces,
|
||||
state::State,
|
||||
|
@ -70,16 +70,13 @@ impl InputOwned {
|
|||
/// Output AST of a successful parse
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Output<'a> {
|
||||
Header(Module<'a>),
|
||||
Header(SpacesBefore<'a, Header<'a>>),
|
||||
|
||||
ModuleDefs(Defs<'a>),
|
||||
|
||||
Expr(Expr<'a>),
|
||||
|
||||
Full {
|
||||
header: Module<'a>,
|
||||
module_defs: Defs<'a>,
|
||||
},
|
||||
Full(FullAst<'a>),
|
||||
}
|
||||
|
||||
impl<'a> Output<'a> {
|
||||
|
@ -88,7 +85,7 @@ impl<'a> Output<'a> {
|
|||
let mut buf = Buf::new_in(&arena);
|
||||
match self {
|
||||
Output::Header(header) => {
|
||||
fmt_module(&mut buf, header);
|
||||
fmt_header(&mut buf, header);
|
||||
buf.fmt_end_of_file();
|
||||
InputOwned::Header(buf.as_str().to_string())
|
||||
}
|
||||
|
@ -101,12 +98,9 @@ impl<'a> Output<'a> {
|
|||
expr.format(&mut buf, 0);
|
||||
InputOwned::Expr(buf.as_str().to_string())
|
||||
}
|
||||
Output::Full {
|
||||
header,
|
||||
module_defs,
|
||||
} => {
|
||||
fmt_module(&mut buf, header);
|
||||
module_defs.format(&mut buf, 0);
|
||||
Output::Full(full) => {
|
||||
fmt_header(&mut buf, &full.header);
|
||||
full.defs.format(&mut buf, 0);
|
||||
buf.fmt_end_of_file();
|
||||
InputOwned::Full(buf.as_str().to_string())
|
||||
}
|
||||
|
@ -129,10 +123,7 @@ impl<'a> Malformed for Output<'a> {
|
|||
Output::Header(header) => header.is_malformed(),
|
||||
Output::ModuleDefs(defs) => defs.is_malformed(),
|
||||
Output::Expr(expr) => expr.is_malformed(),
|
||||
Output::Full {
|
||||
header,
|
||||
module_defs,
|
||||
} => header.is_malformed() || module_defs.is_malformed(),
|
||||
Output::Full(full) => full.is_malformed(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -143,13 +134,7 @@ impl<'a> RemoveSpaces<'a> for Output<'a> {
|
|||
Output::Header(header) => Output::Header(header.remove_spaces(arena)),
|
||||
Output::ModuleDefs(defs) => Output::ModuleDefs(defs.remove_spaces(arena)),
|
||||
Output::Expr(expr) => Output::Expr(expr.remove_spaces(arena)),
|
||||
Output::Full {
|
||||
header,
|
||||
module_defs,
|
||||
} => Output::Full {
|
||||
header: header.remove_spaces(arena),
|
||||
module_defs: module_defs.remove_spaces(arena),
|
||||
},
|
||||
Output::Full(full) => Output::Full(full.remove_spaces(arena)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -185,18 +170,19 @@ impl<'a> Input<'a> {
|
|||
let state = State::new(input.as_bytes());
|
||||
|
||||
let min_indent = 0;
|
||||
let (_, header, state) = roc_parse::module::header()
|
||||
let (_, header, state) = roc_parse::header::header()
|
||||
.parse(arena, state.clone(), min_indent)
|
||||
.map_err(|(_, fail)| SyntaxError::Header(fail))?;
|
||||
|
||||
let (header, defs) = header.upgrade_header_imports(arena);
|
||||
let (new_header, defs) = header.item.upgrade_header_imports(arena);
|
||||
let header = SpacesBefore {
|
||||
before: header.before,
|
||||
item: new_header,
|
||||
};
|
||||
|
||||
let module_defs = parse_module_defs(arena, state, defs)?;
|
||||
let defs = parse_module_defs(arena, state, defs)?;
|
||||
|
||||
Ok(Output::Full {
|
||||
header,
|
||||
module_defs,
|
||||
})
|
||||
Ok(Output::Full(FullAst { header, defs }))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [],
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Hosted(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Hosted(
|
||||
HostedHeader {
|
||||
before_name: [],
|
||||
name: @7-10 ModuleName(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: None,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Package(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Package(
|
||||
PackageHeader {
|
||||
before_exposes: [],
|
||||
exposes: [],
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-25 PackageName(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-14 PackageName(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [],
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: None,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: Some(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: None,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: Some(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: Some(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: Some(
|
||||
|
|
|
@ -1,81 +1,83 @@
|
|||
Full {
|
||||
header: Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
@5-9 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
before_packages: [],
|
||||
packages: @11-134 [
|
||||
@13-132 SpaceAfter(
|
||||
PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [
|
||||
Full(
|
||||
FullAst {
|
||||
header: SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
@5-9 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
before_packages: [],
|
||||
packages: @11-134 [
|
||||
@13-132 SpaceAfter(
|
||||
PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [
|
||||
Newline,
|
||||
],
|
||||
platform_marker: None,
|
||||
package_name: @17-132 PackageName(
|
||||
"https://github.com/roc-lang/basic-cli/releases/download/0.12.0/Lb8EgiejTUzbggO2HVVuPJFkwvvsfW6LojkLR20kTVE.tar.br",
|
||||
),
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
platform_marker: None,
|
||||
package_name: @17-132 PackageName(
|
||||
"https://github.com/roc-lang/basic-cli/releases/download/0.12.0/Lb8EgiejTUzbggO2HVVuPJFkwvvsfW6LojkLR20kTVE.tar.br",
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
],
|
||||
regions: [
|
||||
@136-183,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 1),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Body(
|
||||
@136-140 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@147-183 SpaceBefore(
|
||||
Apply(
|
||||
@147-158 Var {
|
||||
module_name: "Stdout",
|
||||
ident: "line",
|
||||
},
|
||||
[
|
||||
@159-183 Str(
|
||||
PlainLine(
|
||||
"I'm a Roc application!",
|
||||
),
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
module_defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
],
|
||||
regions: [
|
||||
@136-183,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 1),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Body(
|
||||
@136-140 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@147-183 SpaceBefore(
|
||||
Apply(
|
||||
@147-158 Var {
|
||||
module_name: "Stdout",
|
||||
ident: "line",
|
||||
},
|
||||
[
|
||||
@159-183 Str(
|
||||
PlainLine(
|
||||
"I'm a Roc application!",
|
||||
),
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Hosted(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Hosted(
|
||||
HostedHeader {
|
||||
before_name: [],
|
||||
name: @7-10 ModuleName(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Package(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Package(
|
||||
PackageHeader {
|
||||
before_exposes: [],
|
||||
exposes: [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-21 PackageName(
|
||||
|
|
|
@ -1,117 +1,119 @@
|
|||
Full {
|
||||
header: Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
provides: [
|
||||
@143-147 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
packages: @20-88 Collection {
|
||||
items: [
|
||||
@44-81 SpaceBefore(
|
||||
PackageEntry {
|
||||
shorthand: "cli",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: Some(
|
||||
[],
|
||||
),
|
||||
package_name: @49-81 PackageName(
|
||||
"../basic-cli/platform/main.roc",
|
||||
),
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Full(
|
||||
FullAst {
|
||||
header: SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
module_defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
Index(2147483649),
|
||||
],
|
||||
regions: [
|
||||
@111-121,
|
||||
@157-187,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 3),
|
||||
Slice(start = 6, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 3, length = 3),
|
||||
Slice(start = 8, length = 2),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
ModuleImport(
|
||||
ModuleImport {
|
||||
before_name: [],
|
||||
name: @111-121 ImportedModuleName {
|
||||
package: Some(
|
||||
"cli",
|
||||
provides: [
|
||||
@143-147 ExposedName(
|
||||
"main",
|
||||
),
|
||||
name: ModuleName(
|
||||
"Stdout",
|
||||
),
|
||||
},
|
||||
params: None,
|
||||
alias: None,
|
||||
exposed: None,
|
||||
},
|
||||
),
|
||||
Body(
|
||||
@157-161 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@168-187 SpaceBefore(
|
||||
Apply(
|
||||
@168-179 Var {
|
||||
module_name: "Stdout",
|
||||
ident: "line",
|
||||
},
|
||||
[
|
||||
@180-187 Str(
|
||||
PlainLine(
|
||||
"hello",
|
||||
),
|
||||
],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
packages: @20-88 Collection {
|
||||
items: [
|
||||
@44-81 SpaceBefore(
|
||||
PackageEntry {
|
||||
shorthand: "cli",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: Some(
|
||||
[],
|
||||
),
|
||||
package_name: @49-81 PackageName(
|
||||
"../basic-cli/platform/main.roc",
|
||||
),
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
Index(2147483649),
|
||||
],
|
||||
regions: [
|
||||
@111-121,
|
||||
@157-187,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 3),
|
||||
Slice(start = 6, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 3, length = 3),
|
||||
Slice(start = 8, length = 2),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
ModuleImport(
|
||||
ModuleImport {
|
||||
before_name: [],
|
||||
name: @111-121 ImportedModuleName {
|
||||
package: Some(
|
||||
"cli",
|
||||
),
|
||||
name: ModuleName(
|
||||
"Stdout",
|
||||
),
|
||||
},
|
||||
params: None,
|
||||
alias: None,
|
||||
exposed: None,
|
||||
},
|
||||
),
|
||||
Body(
|
||||
@157-161 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@168-187 SpaceBefore(
|
||||
Apply(
|
||||
@168-179 Var {
|
||||
module_name: "Stdout",
|
||||
ident: "line",
|
||||
},
|
||||
[
|
||||
@180-187 Str(
|
||||
PlainLine(
|
||||
"hello",
|
||||
),
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Module(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Module(
|
||||
ModuleHeader {
|
||||
after_keyword: [],
|
||||
params: None,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Module {
|
||||
comments: [],
|
||||
header: Platform(
|
||||
SpacesBefore {
|
||||
before: [],
|
||||
item: Platform(
|
||||
PlatformHeader {
|
||||
before_name: [],
|
||||
name: @9-21 PackageName(
|
||||
|
|
|
@ -1,71 +1,73 @@
|
|||
Full {
|
||||
header: Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
@6-10 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
before_packages: [],
|
||||
packages: @13-37 [
|
||||
@15-35 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: Some(
|
||||
[],
|
||||
),
|
||||
package_name: @29-35 PackageName(
|
||||
"path",
|
||||
),
|
||||
},
|
||||
],
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
module_defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
],
|
||||
regions: [
|
||||
@39-65,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 1),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Body(
|
||||
@39-43 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@46-65 Apply(
|
||||
@46-57 Var {
|
||||
module_name: "Stdout",
|
||||
ident: "line",
|
||||
},
|
||||
[
|
||||
@58-65 Str(
|
||||
PlainLine(
|
||||
"Hello",
|
||||
),
|
||||
Full(
|
||||
FullAst {
|
||||
header: SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
@6-10 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
before_packages: [],
|
||||
packages: @13-37 [
|
||||
@15-35 PackageEntry {
|
||||
shorthand: "pf",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: Some(
|
||||
[],
|
||||
),
|
||||
package_name: @29-35 PackageName(
|
||||
"path",
|
||||
),
|
||||
},
|
||||
],
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
],
|
||||
regions: [
|
||||
@39-65,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 1),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Body(
|
||||
@39-43 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@46-65 Apply(
|
||||
@46-57 Var {
|
||||
module_name: "Stdout",
|
||||
ident: "line",
|
||||
},
|
||||
[
|
||||
@58-65 Str(
|
||||
PlainLine(
|
||||
"Hello",
|
||||
),
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
),
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1,209 +1,211 @@
|
|||
Full {
|
||||
header: Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
@5-9 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
before_packages: [],
|
||||
packages: @11-55 Collection {
|
||||
items: [
|
||||
@15-52 SpaceBefore(
|
||||
PackageEntry {
|
||||
shorthand: "cli",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: None,
|
||||
package_name: @20-52 PackageName(
|
||||
"../basic-cli/platform/main.roc",
|
||||
),
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
Full(
|
||||
FullAst {
|
||||
header: SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [],
|
||||
provides: [
|
||||
@5-9 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
module_defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
Index(2147483649),
|
||||
],
|
||||
regions: [
|
||||
@57-74,
|
||||
@76-220,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
Slice(start = 2, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 0),
|
||||
Slice(start = 4, length = 2),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
ModuleImport(
|
||||
ModuleImport {
|
||||
before_name: [],
|
||||
name: @64-74 ImportedModuleName {
|
||||
package: Some(
|
||||
"cli",
|
||||
),
|
||||
name: ModuleName(
|
||||
"Stdout",
|
||||
),
|
||||
},
|
||||
params: None,
|
||||
alias: None,
|
||||
exposed: None,
|
||||
},
|
||||
),
|
||||
Body(
|
||||
@76-80 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@120-220 SpaceBefore(
|
||||
Defs(
|
||||
Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
Index(2147483649),
|
||||
],
|
||||
regions: [
|
||||
@120-133,
|
||||
@162-205,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 0),
|
||||
Slice(start = 0, length = 3),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 0, length = 0),
|
||||
Slice(start = 3, length = 0),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
LineComment(
|
||||
" what about this?",
|
||||
),
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Stmt(
|
||||
@120-133 BinOps(
|
||||
[
|
||||
(
|
||||
@120-125 Str(
|
||||
PlainLine(
|
||||
"Foo",
|
||||
),
|
||||
),
|
||||
@126-128 Pizza,
|
||||
),
|
||||
],
|
||||
@129-132 TaskAwaitBang(
|
||||
Var {
|
||||
module_name: "A",
|
||||
ident: "x",
|
||||
},
|
||||
),
|
||||
before_packages: [],
|
||||
packages: @11-55 Collection {
|
||||
items: [
|
||||
@15-52 SpaceBefore(
|
||||
PackageEntry {
|
||||
shorthand: "cli",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: None,
|
||||
package_name: @20-52 PackageName(
|
||||
"../basic-cli/platform/main.roc",
|
||||
),
|
||||
),
|
||||
Stmt(
|
||||
@162-205 BinOps(
|
||||
[
|
||||
(
|
||||
@162-167 Str(
|
||||
PlainLine(
|
||||
"Bar",
|
||||
),
|
||||
),
|
||||
@168-170 Pizza,
|
||||
),
|
||||
],
|
||||
@171-205 Apply(
|
||||
@171-174 TaskAwaitBang(
|
||||
Var {
|
||||
module_name: "B",
|
||||
ident: "y",
|
||||
},
|
||||
),
|
||||
[
|
||||
@185-205 SpaceBefore(
|
||||
Record(
|
||||
[
|
||||
@187-203 RequiredValue(
|
||||
@187-193 "config",
|
||||
[],
|
||||
@195-203 Str(
|
||||
PlainLine(
|
||||
"config",
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
},
|
||||
@211-220 SpaceBefore(
|
||||
Apply(
|
||||
@211-214 Var {
|
||||
module_name: "C",
|
||||
ident: "z",
|
||||
},
|
||||
[
|
||||
@215-220 Str(
|
||||
PlainLine(
|
||||
"Bar",
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
Index(2147483649),
|
||||
],
|
||||
regions: [
|
||||
@57-74,
|
||||
@76-220,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
Slice(start = 2, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 0),
|
||||
Slice(start = 4, length = 2),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
ModuleImport(
|
||||
ModuleImport {
|
||||
before_name: [],
|
||||
name: @64-74 ImportedModuleName {
|
||||
package: Some(
|
||||
"cli",
|
||||
),
|
||||
name: ModuleName(
|
||||
"Stdout",
|
||||
),
|
||||
},
|
||||
params: None,
|
||||
alias: None,
|
||||
exposed: None,
|
||||
},
|
||||
),
|
||||
Body(
|
||||
@76-80 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@120-220 SpaceBefore(
|
||||
Defs(
|
||||
Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
Index(2147483649),
|
||||
],
|
||||
regions: [
|
||||
@120-133,
|
||||
@162-205,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 0),
|
||||
Slice(start = 0, length = 3),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 0, length = 0),
|
||||
Slice(start = 3, length = 0),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
LineComment(
|
||||
" what about this?",
|
||||
),
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Stmt(
|
||||
@120-133 BinOps(
|
||||
[
|
||||
(
|
||||
@120-125 Str(
|
||||
PlainLine(
|
||||
"Foo",
|
||||
),
|
||||
),
|
||||
@126-128 Pizza,
|
||||
),
|
||||
],
|
||||
@129-132 TaskAwaitBang(
|
||||
Var {
|
||||
module_name: "A",
|
||||
ident: "x",
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
Stmt(
|
||||
@162-205 BinOps(
|
||||
[
|
||||
(
|
||||
@162-167 Str(
|
||||
PlainLine(
|
||||
"Bar",
|
||||
),
|
||||
),
|
||||
@168-170 Pizza,
|
||||
),
|
||||
],
|
||||
@171-205 Apply(
|
||||
@171-174 TaskAwaitBang(
|
||||
Var {
|
||||
module_name: "B",
|
||||
ident: "y",
|
||||
},
|
||||
),
|
||||
[
|
||||
@185-205 SpaceBefore(
|
||||
Record(
|
||||
[
|
||||
@187-203 RequiredValue(
|
||||
@187-193 "config",
|
||||
[],
|
||||
@195-203 Str(
|
||||
PlainLine(
|
||||
"config",
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
Space,
|
||||
},
|
||||
@211-220 SpaceBefore(
|
||||
Apply(
|
||||
@211-214 Var {
|
||||
module_name: "C",
|
||||
ident: "z",
|
||||
},
|
||||
[
|
||||
@215-220 Str(
|
||||
PlainLine(
|
||||
"Bar",
|
||||
),
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
LineComment(
|
||||
" is this a valid statement?",
|
||||
),
|
||||
],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
LineComment(
|
||||
" is this a valid statement?",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1,131 +1,133 @@
|
|||
Full {
|
||||
header: Module {
|
||||
comments: [],
|
||||
header: App(
|
||||
AppHeader {
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
provides: [
|
||||
@74-78 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
packages: @6-44 Collection {
|
||||
items: [
|
||||
@30-37 SpaceBefore(
|
||||
PackageEntry {
|
||||
shorthand: "cli",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: Some(
|
||||
[],
|
||||
),
|
||||
package_name: @35-37 PackageName(
|
||||
"",
|
||||
),
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
final_comments: [
|
||||
Full(
|
||||
FullAst {
|
||||
header: SpacesBefore {
|
||||
before: [],
|
||||
item: App(
|
||||
AppHeader {
|
||||
before_provides: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
module_defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
],
|
||||
regions: [
|
||||
@88-202,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 1),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Body(
|
||||
@88-92 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@100-202 SpaceBefore(
|
||||
BinOps(
|
||||
[
|
||||
(
|
||||
@100-114 SpaceAfter(
|
||||
Str(
|
||||
PlainLine(
|
||||
"jq --version",
|
||||
),
|
||||
provides: [
|
||||
@74-78 ExposedName(
|
||||
"main",
|
||||
),
|
||||
],
|
||||
before_packages: [
|
||||
Newline,
|
||||
],
|
||||
packages: @6-44 Collection {
|
||||
items: [
|
||||
@30-37 SpaceBefore(
|
||||
PackageEntry {
|
||||
shorthand: "cli",
|
||||
spaces_after_shorthand: [],
|
||||
platform_marker: Some(
|
||||
[],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@123-125 Pizza,
|
||||
),
|
||||
(
|
||||
@126-133 SpaceAfter(
|
||||
Var {
|
||||
module_name: "Cmd",
|
||||
ident: "new",
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@142-144 Pizza,
|
||||
),
|
||||
(
|
||||
@145-155 SpaceAfter(
|
||||
Var {
|
||||
module_name: "Cmd",
|
||||
ident: "status",
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@164-166 Pizza,
|
||||
package_name: @35-37 PackageName(
|
||||
"",
|
||||
),
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
],
|
||||
@167-202 Apply(
|
||||
@167-178 TaskAwaitBang(
|
||||
Var {
|
||||
module_name: "Task",
|
||||
ident: "mapErr",
|
||||
},
|
||||
),
|
||||
final_comments: [
|
||||
Newline,
|
||||
],
|
||||
},
|
||||
old_imports: None,
|
||||
old_provides_to_new_package: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
defs: Defs {
|
||||
tags: [
|
||||
Index(2147483648),
|
||||
],
|
||||
regions: [
|
||||
@88-202,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 2),
|
||||
],
|
||||
space_after: [
|
||||
Slice(start = 2, length = 1),
|
||||
],
|
||||
spaces: [
|
||||
Newline,
|
||||
Newline,
|
||||
Newline,
|
||||
],
|
||||
type_defs: [],
|
||||
value_defs: [
|
||||
Body(
|
||||
@88-92 Identifier {
|
||||
ident: "main",
|
||||
},
|
||||
@100-202 SpaceBefore(
|
||||
BinOps(
|
||||
[
|
||||
@180-202 Tag(
|
||||
"UnableToCheckJQVersion",
|
||||
(
|
||||
@100-114 SpaceAfter(
|
||||
Str(
|
||||
PlainLine(
|
||||
"jq --version",
|
||||
),
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@123-125 Pizza,
|
||||
),
|
||||
(
|
||||
@126-133 SpaceAfter(
|
||||
Var {
|
||||
module_name: "Cmd",
|
||||
ident: "new",
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@142-144 Pizza,
|
||||
),
|
||||
(
|
||||
@145-155 SpaceAfter(
|
||||
Var {
|
||||
module_name: "Cmd",
|
||||
ident: "status",
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
@164-166 Pizza,
|
||||
),
|
||||
],
|
||||
Space,
|
||||
@167-202 Apply(
|
||||
@167-178 TaskAwaitBang(
|
||||
Var {
|
||||
module_name: "Task",
|
||||
ident: "mapErr",
|
||||
},
|
||||
),
|
||||
[
|
||||
@180-202 Tag(
|
||||
"UnableToCheckJQVersion",
|
||||
),
|
||||
],
|
||||
Space,
|
||||
),
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
[
|
||||
Newline,
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
|
@ -5,10 +5,10 @@ extern crate indoc;
|
|||
mod test_fmt {
|
||||
use bumpalo::Bump;
|
||||
use roc_fmt::def::fmt_defs;
|
||||
use roc_fmt::module::fmt_module;
|
||||
use roc_fmt::header::fmt_header;
|
||||
use roc_fmt::Buf;
|
||||
use roc_parse::ast::{Defs, Module};
|
||||
use roc_parse::module::{self, parse_module_defs};
|
||||
use roc_parse::ast::{Defs, Header, SpacesBefore};
|
||||
use roc_parse::header::{self, parse_module_defs};
|
||||
use roc_parse::state::State;
|
||||
use roc_test_utils::assert_multiline_str_eq;
|
||||
use roc_test_utils_dir::workspace_root;
|
||||
|
@ -32,11 +32,11 @@ mod test_fmt {
|
|||
fn fmt_module_and_defs<'a>(
|
||||
arena: &Bump,
|
||||
src: &str,
|
||||
module: &Module<'a>,
|
||||
header: &SpacesBefore<'a, Header<'a>>,
|
||||
state: State<'a>,
|
||||
buf: &mut Buf<'_>,
|
||||
) {
|
||||
fmt_module(buf, module);
|
||||
fmt_header(buf, header);
|
||||
|
||||
match parse_module_defs(arena, state, Defs::default()) {
|
||||
Ok(loc_defs) => {
|
||||
|
@ -61,7 +61,7 @@ mod test_fmt {
|
|||
let src = src.trim();
|
||||
let expected = expected.trim();
|
||||
|
||||
match module::parse_header(&arena, State::new(src.as_bytes())) {
|
||||
match header::parse_header(&arena, State::new(src.as_bytes())) {
|
||||
Ok((actual, state)) => {
|
||||
use roc_parse::remove_spaces::RemoveSpaces;
|
||||
|
||||
|
@ -71,7 +71,7 @@ mod test_fmt {
|
|||
|
||||
let output = buf.as_str().trim();
|
||||
|
||||
let (reparsed_ast, state) = module::parse_header(&arena, State::new(output.as_bytes())).unwrap_or_else(|err| {
|
||||
let (reparsed_ast, state) = header::parse_header(&arena, State::new(output.as_bytes())).unwrap_or_else(|err| {
|
||||
panic!(
|
||||
"After formatting, the source code no longer parsed!\n\nParse error was: {err:?}\n\nThe code that failed to parse:\n\n{output}\n\n"
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue