summaryrefslogtreecommitdiff
path: root/dhall/src/syntax/text/printer.rs
diff options
context:
space:
mode:
authorNadrieril2020-03-20 11:46:46 +0000
committerNadrieril2020-03-20 12:20:38 +0000
commit4ff536cb593aa022e71042ab4fe008e2381b0680 (patch)
tree08fc691ba174831cb85c0fffa474e58e59a47d8c /dhall/src/syntax/text/printer.rs
parente28d9e6f2422f47e250304e053238adc458f6a98 (diff)
Remove more unnecessary parens in printer
Diffstat (limited to '')
-rw-r--r--dhall/src/syntax/text/printer.rs21
1 files changed, 13 insertions, 8 deletions
diff --git a/dhall/src/syntax/text/printer.rs b/dhall/src/syntax/text/printer.rs
index e9584bb..2b7bc2e 100644
--- a/dhall/src/syntax/text/printer.rs
+++ b/dhall/src/syntax/text/printer.rs
@@ -8,17 +8,23 @@ use std::fmt::{self, Display};
// of automatically getting all the parentheses and precedences right.
#[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
enum PrintPhase {
+ // `expression`
Base,
+ // `operator-expression`
Operator,
+ // All the operator `*-expression`s
BinOp(ast::BinOp),
+ // `application-expression`
App,
+ // `import-expression`
Import,
+ // `primitive-expression`
Primitive,
}
// Wraps an Expr with a phase, so that phase selection can be done separate from the actual
// printing.
-#[derive(Clone)]
+#[derive(Copy, Clone)]
struct PhasedExpr<'a>(&'a Expr, PrintPhase);
impl<'a> PhasedExpr<'a> {
@@ -58,7 +64,7 @@ impl UnspannedExpr {
),
SomeLit(e) => SomeLit(e.phase(PrintPhase::Import)),
ExprKind::App(f, a) => ExprKind::App(
- f.phase(PrintPhase::Import),
+ f.phase(PrintPhase::App),
a.phase(PrintPhase::Import),
),
Field(a, b) => Field(a.phase(Primitive), b),
@@ -67,6 +73,9 @@ impl UnspannedExpr {
Completion(a, b) => {
Completion(a.phase(Primitive), b.phase(Primitive))
}
+ ExprKind::Import(a) => {
+ ExprKind::Import(a.map_ref(|x| x.phase(PrintPhase::Import)))
+ }
e => e,
}
}
@@ -84,7 +93,6 @@ impl UnspannedExpr {
| Pi(_, _, _)
| Let(_, _, _, _)
| EmptyListLit(_)
- | NEListLit(_)
| SomeLit(_)
| Merge(_, _, _)
| ToMap(_, _)
@@ -92,10 +100,7 @@ impl UnspannedExpr {
// Precedence is magically handled by the ordering of BinOps.
ExprKind::BinOp(op, _, _) => phase > PrintPhase::BinOp(*op),
ExprKind::App(_, _) => phase > PrintPhase::App,
- Field(_, _)
- | Projection(_, _)
- | ProjectionByExpr(_, _)
- | Completion(_, _) => phase > PrintPhase::Import,
+ Completion(_, _) => phase > PrintPhase::Import,
_ => false,
};
@@ -413,7 +418,7 @@ impl<SubExpr: Display> Display for Import<SubExpr> {
write!(f, "?{}", q)?
}
if let Some(h) = &url.headers {
- write!(f, " using ({})", h)?
+ write!(f, " using {}", h)?
}
}
Env(s) => {