summaryrefslogtreecommitdiff
path: root/dhall_syntax/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dhall_syntax/src/parser.rs74
1 files changed, 37 insertions, 37 deletions
diff --git a/dhall_syntax/src/parser.rs b/dhall_syntax/src/parser.rs
index d86e35a..761795a 100644
--- a/dhall_syntax/src/parser.rs
+++ b/dhall_syntax/src/parser.rs
@@ -6,7 +6,7 @@ use pest::Parser;
use std::rc::Rc;
use dhall_generated_parser::{DhallParser, Rule};
-use pest_consume::{make_parser, parse_children};
+use pest_consume::{make_parser, match_inputs};
use crate::map::{DupTreeMap, DupTreeSet};
use crate::ExprF::*;
@@ -168,7 +168,7 @@ impl Parsers {
fn double_quote_literal<E: Clone>(
input: ParseInput,
) -> ParseResult<ParsedText<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[double_quote_chunk(chunks)..] => {
chunks.collect()
}
@@ -178,7 +178,7 @@ impl Parsers {
fn double_quote_chunk<E: Clone>(
input: ParseInput,
) -> ParseResult<ParsedTextContents<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(e)] => {
InterpolatedTextContents::Expr(e)
},
@@ -265,7 +265,7 @@ impl Parsers {
fn single_quote_literal<E: Clone>(
input: ParseInput,
) -> ParseResult<ParsedText<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[single_quote_continue(lines)] => {
let newline: ParsedText<E> = "\n".to_string().into();
@@ -308,7 +308,7 @@ impl Parsers {
fn single_quote_continue<E: Clone>(
input: ParseInput,
) -> ParseResult<Vec<Vec<ParsedTextContents<E>>>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(e), single_quote_continue(lines)] => {
let c = InterpolatedTextContents::Expr(e);
let mut lines = lines;
@@ -393,7 +393,7 @@ impl Parsers {
#[alias(expression, shortcut = true)]
fn identifier<E: Clone>(input: ParseInput) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[variable(v)] => {
spanned(input, Var(v))
},
@@ -402,7 +402,7 @@ impl Parsers {
}
fn variable(input: ParseInput) -> ParseResult<V<Label>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[label(l), natural_literal(idx)] => {
V(l, idx)
},
@@ -444,7 +444,7 @@ impl Parsers {
.collect())
}
fn path(input: ParseInput) -> ParseResult<Vec<String>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[path_component(components)..] => {
components.collect()
}
@@ -455,7 +455,7 @@ impl Parsers {
fn local<E: Clone>(
input: ParseInput,
) -> ParseResult<ImportLocation<Expr<E>>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[local_path((prefix, p))] => ImportLocation::Local(prefix, p),
))
}
@@ -464,19 +464,19 @@ impl Parsers {
fn parent_path(
input: ParseInput,
) -> ParseResult<(FilePrefix, Vec<String>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[path(p)] => (FilePrefix::Parent, p)
))
}
#[alias(local_path)]
fn here_path(input: ParseInput) -> ParseResult<(FilePrefix, Vec<String>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[path(p)] => (FilePrefix::Here, p)
))
}
#[alias(local_path)]
fn home_path(input: ParseInput) -> ParseResult<(FilePrefix, Vec<String>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[path(p)] => (FilePrefix::Home, p)
))
}
@@ -484,7 +484,7 @@ impl Parsers {
fn absolute_path(
input: ParseInput,
) -> ParseResult<(FilePrefix, Vec<String>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[path(p)] => (FilePrefix::Absolute, p)
))
}
@@ -498,7 +498,7 @@ impl Parsers {
}
fn http_raw<E: Clone>(input: ParseInput) -> ParseResult<URL<Expr<E>>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[scheme(sch), authority(auth), path(p)] => URL {
scheme: sch,
authority: auth,
@@ -528,7 +528,7 @@ impl Parsers {
fn http<E: Clone>(
input: ParseInput,
) -> ParseResult<ImportLocation<Expr<E>>> {
- Ok(ImportLocation::Remote(parse_children!(input.children();
+ Ok(ImportLocation::Remote(match_inputs!(input.children();
[http_raw(url)] => url,
[http_raw(url), expression(e)] => URL { headers: Some(e), ..url },
)))
@@ -538,7 +538,7 @@ impl Parsers {
fn env<E: Clone>(
input: ParseInput,
) -> ParseResult<ImportLocation<Expr<E>>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[environment_variable(v)] => ImportLocation::Env(v),
))
}
@@ -548,7 +548,7 @@ impl Parsers {
}
#[alias(environment_variable)]
fn posix_environment_variable(input: ParseInput) -> ParseResult<String> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[posix_environment_variable_character(chars)..] => {
chars.collect()
},
@@ -593,7 +593,7 @@ impl Parsers {
) -> ParseResult<crate::Import<Expr<E>>> {
use crate::Import;
let mode = ImportMode::Code;
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[import_type(location)] => Import { mode, location, hash: None },
[import_type(location), hash(h)] => Import { mode, location, hash: Some(h) },
))
@@ -611,7 +611,7 @@ impl Parsers {
#[alias(expression)]
fn import<E: Clone>(input: ParseInput) -> ParseResult<Expr<E>> {
use crate::Import;
- let import = parse_children!(input.children();
+ let import = match_inputs!(input.children();
[import_hashed(imp)] => {
Import { mode: ImportMode::Code, ..imp }
},
@@ -646,13 +646,13 @@ impl Parsers {
#[alias(expression)]
fn empty_list_literal<E: Clone>(input: ParseInput) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(e)] => spanned(input, EmptyListLit(e)),
))
}
fn expression<E: Clone>(input: ParseInput) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[lambda(()), label(l), expression(typ),
arrow(()), expression(body)] => {
spanned(input, Lam(l, typ, body))
@@ -699,7 +699,7 @@ impl Parsers {
fn let_binding<E: Clone>(
input: ParseInput,
) -> ParseResult<(Label, Option<Expr<E>>, Expr<E>, Span)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[label(name), expression(annot), expression(expr)] =>
(name, Some(annot), expr, input_to_span(input)),
[label(name), expression(expr)] =>
@@ -749,7 +749,7 @@ impl Parsers {
fn application_expression<E: Clone>(
input: ParseInput,
) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(e)] => e,
[expression(first), expression(rest)..] => {
rest.fold(
@@ -770,7 +770,7 @@ impl Parsers {
fn first_application_expression<E: Clone>(
input: ParseInput,
) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[Some_(()), expression(e)] => {
spanned(input, SomeLit(e))
},
@@ -788,7 +788,7 @@ impl Parsers {
fn selector_expression<E: Clone>(
input: ParseInput,
) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(e)] => e,
[expression(first), selector(rest)..] => {
rest.fold(
@@ -811,7 +811,7 @@ impl Parsers {
fn selector(
input: ParseInput,
) -> ParseResult<(Either<Label, DupTreeSet<Label>>, Span)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[label(l)] => (Either::Left(l), input_to_span(input)),
[labels(ls)] => (Either::Right(ls), input_to_span(input)),
// [expression(_e)] => unimplemented!("selection by expression"), // TODO
@@ -819,7 +819,7 @@ impl Parsers {
}
fn labels(input: ParseInput) -> ParseResult<DupTreeSet<Label>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[label(ls)..] => ls.collect(),
))
}
@@ -828,7 +828,7 @@ impl Parsers {
fn primitive_expression<E: Clone>(
input: ParseInput,
) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[double_literal(n)] => spanned(input, DoubleLit(n)),
[natural_literal(n)] => spanned(input, NaturalLit(n)),
[integer_literal(n)] => spanned(input, IntegerLit(n)),
@@ -854,7 +854,7 @@ impl Parsers {
fn non_empty_record_type_or_literal<E: Clone>(
input: ParseInput,
) -> ParseResult<Expr<E>> {
- let e = parse_children!(input.children();
+ let e = match_inputs!(input.children();
[label(first_label), non_empty_record_type(rest)] => {
let (first_expr, mut map) = rest;
map.insert(first_label, first_expr);
@@ -872,7 +872,7 @@ impl Parsers {
fn non_empty_record_type<E: Clone>(
input: ParseInput,
) -> ParseResult<(Expr<E>, DupTreeMap<Label, Expr<E>>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(expr), record_type_entry(entries)..] => {
(expr, entries.collect())
}
@@ -882,7 +882,7 @@ impl Parsers {
fn record_type_entry<E: Clone>(
input: ParseInput,
) -> ParseResult<(Label, Expr<E>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[label(name), expression(expr)] => (name, expr)
))
}
@@ -890,7 +890,7 @@ impl Parsers {
fn non_empty_record_literal<E: Clone>(
input: ParseInput,
) -> ParseResult<(Expr<E>, DupTreeMap<Label, Expr<E>>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(expr), record_literal_entry(entries)..] => {
(expr, entries.collect())
}
@@ -900,14 +900,14 @@ impl Parsers {
fn record_literal_entry<E: Clone>(
input: ParseInput,
) -> ParseResult<(Label, Expr<E>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[label(name), expression(expr)] => (name, expr)
))
}
#[alias(expression)]
fn union_type<E: Clone>(input: ParseInput) -> ParseResult<Expr<E>> {
- let map = parse_children!(input.children();
+ let map = match_inputs!(input.children();
[empty_union_type(_)] => Default::default(),
[union_type_entry(entries)..] => entries.collect(),
);
@@ -921,7 +921,7 @@ impl Parsers {
fn union_type_entry<E: Clone>(
input: ParseInput,
) -> ParseResult<(Label, Option<Expr<E>>)> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[label(name), expression(expr)] => (name, Some(expr)),
[label(name)] => (name, None),
))
@@ -931,7 +931,7 @@ impl Parsers {
fn non_empty_list_literal<E: Clone>(
input: ParseInput,
) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(items)..] => spanned(
input,
NEListLit(items.collect())
@@ -940,7 +940,7 @@ impl Parsers {
}
fn final_expression<E: Clone>(input: ParseInput) -> ParseResult<Expr<E>> {
- Ok(parse_children!(input.children();
+ Ok(match_inputs!(input.children();
[expression(e), EOI(_)] => e
))
}