mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 16:44:33 +00:00
Drop variant_or_ident
This commit is contained in:
parent
e5fcf70b87
commit
3244330a5d
1 changed files with 6 additions and 18 deletions
|
@ -324,33 +324,21 @@ pub fn record_literal<'a>(min_indent: u16) -> impl Parser<'a, Expr<'a>> {
|
||||||
attempt(Attempting::List, map(fields, Expr::Record))
|
attempt(Attempting::List, map(fields, Expr::Record))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This is for matching variants in patterns
|
|
||||||
///
|
|
||||||
/// * A record field, e.g. "email" in `.email` or in `email:`
|
|
||||||
/// * A named pattern match, e.g. "foo" in `foo =` or `foo ->` or `\foo ->`
|
|
||||||
fn unqualified_variant<'a>() -> impl Parser<'a, &'a str> {
|
|
||||||
variant_or_ident(|first_char| first_char.is_uppercase())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// This could be:
|
/// This could be:
|
||||||
///
|
///
|
||||||
/// * A record field, e.g. "email" in `.email` or in `email:`
|
/// * A record field, e.g. "email" in `.email` or in `email:`
|
||||||
/// * A named pattern match, e.g. "foo" in `foo =` or `foo ->` or `\foo ->`
|
/// * A named pattern match, e.g. "foo" in `foo =` or `foo ->` or `\foo ->`
|
||||||
fn unqualified_ident<'a>() -> impl Parser<'a, &'a str> {
|
pub fn unqualified_ident<'a>() -> impl Parser<'a, &'a str> {
|
||||||
variant_or_ident(|first_char| first_char.is_lowercase())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn variant_or_ident<'a, F>(pred: F) -> impl Parser<'a, &'a str> where F: Fn(char) -> bool {
|
|
||||||
move |arena, state: State<'a>| {
|
move |arena, state: State<'a>| {
|
||||||
let mut chars = state.input.chars();
|
let mut chars = state.input.chars();
|
||||||
|
|
||||||
// pred will determine if this is a variant or ident (based on capitalization)
|
// Idents must start with a lowercase letter.
|
||||||
let first_letter = match chars.next() {
|
let first_letter = match chars.next() {
|
||||||
Some(first_char) => {
|
Some(ch) => {
|
||||||
if pred(first_char) {
|
if ch.is_alphabetic() && ch.is_lowercase() {
|
||||||
first_char
|
ch
|
||||||
} else {
|
} else {
|
||||||
return Err(unexpected(first_char, 0, state, Attempting::RecordFieldLabel));
|
return Err(unexpected(ch, 0, state, Attempting::RecordFieldLabel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue