cover all parsed patterns with an error message

but, some invalid patterns are not parsed as expected. See https://github.com/rtfeldman/roc/issues/399
This commit is contained in:
Folkert 2020-07-04 20:18:03 +02:00
parent 0c7a4179aa
commit b7d689226c
4 changed files with 53 additions and 24 deletions

View file

@ -343,20 +343,33 @@ fn pretty_runtime_error<'b>(
use roc_problem::can::MalformedPatternProblem::*;
let name = match problem {
MalformedInt => "integer",
MalformedFloat => "float",
MalformedBase(Base::Hex) => "hex integer",
MalformedBase(Base::Binary) => "binary integer",
MalformedBase(Base::Octal) => "octal integer",
MalformedInt => " integer ",
MalformedFloat => " float ",
MalformedBase(Base::Hex) => " hex integer ",
MalformedBase(Base::Binary) => " binary integer ",
MalformedBase(Base::Octal) => " octal integer ",
Unknown => " ",
QualifiedIdentifier => " qualified ",
};
let hint = match problem {
MalformedInt | MalformedFloat | MalformedBase(_) => alloc
.hint()
.append(alloc.reflow("Learn more about number literals at TODO")),
Unknown => alloc.nil(),
QualifiedIdentifier => alloc.hint().append(
alloc.reflow("In patterns, only private and global tags can be qualified"),
),
};
alloc.stack(vec![
alloc.concat(vec![
alloc.reflow("This "),
alloc.reflow("This"),
alloc.text(name),
alloc.reflow(" pattern is malformed:"),
alloc.reflow("pattern is malformed:"),
]),
alloc.region(region),
hint,
])
}