mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 14:24:45 +00:00
fix all gen and cli tests
This commit is contained in:
parent
e643d1ea3c
commit
f6aa77e6a8
4 changed files with 37 additions and 7 deletions
|
@ -3382,7 +3382,6 @@ fn canonicalize_and_constrain<'a>(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse<'a>(arena: &'a Bump, header: ModuleHeader<'a>) -> Result<Msg<'a>, LoadingProblem> {
|
fn parse<'a>(arena: &'a Bump, header: ModuleHeader<'a>) -> Result<Msg<'a>, LoadingProblem> {
|
||||||
println!("-------- parsing {:?}", header.module_id);
|
|
||||||
let mut module_timing = header.module_timing;
|
let mut module_timing = header.module_timing;
|
||||||
let parse_start = SystemTime::now();
|
let parse_start = SystemTime::now();
|
||||||
let parse_state = parser::State::new(&header.src, Attempting::Module);
|
let parse_state = parser::State::new(&header.src, Attempting::Module);
|
||||||
|
|
|
@ -387,7 +387,9 @@ fn spaces<'a>(
|
||||||
);
|
);
|
||||||
if any_newlines {
|
if any_newlines {
|
||||||
state = state.check_indent(min_indent).map_err(
|
state = state.check_indent(min_indent).map_err(
|
||||||
|(fail, _)| (progress, fail, original_state),
|
|(fail, _)| {
|
||||||
|
(progress, fail, original_state.clone())
|
||||||
|
},
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -596,10 +596,13 @@ fn body<'a>(min_indent: u16) -> impl Parser<'a, Body<'a>> {
|
||||||
equals_for_def(),
|
equals_for_def(),
|
||||||
// Spaces after the '=' (at a normal indentation level) and then the expr.
|
// Spaces after the '=' (at a normal indentation level) and then the expr.
|
||||||
// The expr itself must be indented more than the pattern and '='
|
// The expr itself must be indented more than the pattern and '='
|
||||||
space0_before(
|
move |a, s| {
|
||||||
loc!(move |arena, state| parse_expr(indented_more, arena, state)),
|
space0_before(
|
||||||
min_indent,
|
loc!(move |arena, state| { parse_expr(indented_more, arena, state) }),
|
||||||
)
|
min_indent,
|
||||||
|
)
|
||||||
|
.parse(a, s)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
result
|
result
|
||||||
|
@ -1540,7 +1543,8 @@ pub fn if_expr<'a>(min_indent: u16) -> impl Parser<'a, Expr<'a>> {
|
||||||
),
|
),
|
||||||
skip_first!(
|
skip_first!(
|
||||||
parser::keyword(keyword::ELSE, min_indent),
|
parser::keyword(keyword::ELSE, min_indent),
|
||||||
space1_around(
|
// NOTE changed this from space1_around to space1_before
|
||||||
|
space1_before(
|
||||||
loc!(move |arena, state| parse_expr(min_indent, arena, state)),
|
loc!(move |arena, state| parse_expr(min_indent, arena, state)),
|
||||||
min_indent,
|
min_indent,
|
||||||
)
|
)
|
||||||
|
|
|
@ -2819,6 +2819,31 @@ mod test_parse {
|
||||||
assert!(actual.is_ok());
|
assert!(actual.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn outdenting_newline_after_else() {
|
||||||
|
use roc_parse::ast::Def::*;
|
||||||
|
|
||||||
|
let arena = Bump::new();
|
||||||
|
|
||||||
|
// highlights a problem with the else branch demanding a newline after its expression
|
||||||
|
let src = indoc!(
|
||||||
|
r#"
|
||||||
|
main =
|
||||||
|
v = \y -> if x then y else z
|
||||||
|
|
||||||
|
1
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
|
||||||
|
let actual = module_defs()
|
||||||
|
.parse(&arena, State::new(src.as_bytes(), Attempting::Module))
|
||||||
|
.map(|tuple| tuple.1);
|
||||||
|
|
||||||
|
dbg!(&actual);
|
||||||
|
|
||||||
|
assert!(actual.is_ok());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn newline_after_equals() {
|
fn newline_after_equals() {
|
||||||
// Regression test for https://github.com/rtfeldman/roc/issues/51
|
// Regression test for https://github.com/rtfeldman/roc/issues/51
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue