Skip to content

Commit 0643708

Browse files
committed
pretty print rigid types
1 parent c151b28 commit 0643708

27 files changed

+118
-53
lines changed

crates/formality-prove/src/prove/minimize/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ fn minimize_a() {
8383
},
8484
known_true: true,
8585
substitution: {
86-
?ty_1 => (rigid (scalar u32)),
86+
?ty_1 => u32,
8787
?ty_3 => ?ty_4,
8888
},
8989
}

crates/formality-prove/src/test/eq_assumptions.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ fn test_b() {
4545
},
4646
known_true: true,
4747
substitution: {
48-
?ty_1 => (rigid (adt Vec) (rigid (scalar u32))),
49-
?ty_2 => (rigid (scalar u32)),
48+
?ty_1 => Vec<u32>,
49+
?ty_2 => u32,
5050
},
5151
},
5252
}

crates/formality-prove/src/test/exists_constraints.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ fn exists_u_for_t() {
3131
},
3232
known_true: true,
3333
substitution: {
34-
?ty_1 => (rigid (adt Vec) ?ty_2),
34+
?ty_1 => Vec<?ty_2>,
3535
},
3636
},
3737
}

crates/formality-prove/src/test/occurs_check.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fn eq_variable_to_rigid() {
4242
},
4343
known_true: true,
4444
substitution: {
45-
?ty_1 => (rigid (adt Vec) ?ty_3),
45+
?ty_1 => Vec<?ty_3>,
4646
?ty_2 => ?ty_3,
4747
},
4848
},
@@ -68,7 +68,7 @@ fn eq_rigid_to_variable() {
6868
},
6969
known_true: true,
7070
substitution: {
71-
?ty_1 => (rigid (adt Vec) ?ty_3),
71+
?ty_1 => Vec<?ty_3>,
7272
?ty_2 => ?ty_3,
7373
},
7474
},

crates/formality-types/src/grammar/ty.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ impl UpcastFrom<Ty> for TyData {
118118
}
119119

120120
#[term((rigid $name $*parameters))]
121-
#[customize(parse)]
121+
#[customize(parse, debug)]
122122
pub struct RigidTy {
123123
pub name: RigidName,
124124
pub parameters: Parameters,
Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,48 @@
1-
use super::{AliasName, AliasTy, AssociatedTyName};
1+
use super::{AliasName, AliasTy, AssociatedTyName, Parameter, RefKind, RigidName, RigidTy};
22
use std::fmt::Debug;
33

4+
impl Debug for RigidTy {
5+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6+
let RigidTy { name, parameters } = self;
7+
match name {
8+
RigidName::AdtId(name) => {
9+
write!(
10+
f,
11+
"{:?}{:?}",
12+
name,
13+
PrettyParameters::new("<", ">", parameters)
14+
)
15+
}
16+
RigidName::ScalarId(s) if parameters.is_empty() => {
17+
write!(f, "{:?}", s)
18+
}
19+
RigidName::Ref(RefKind::Shared) if parameters.len() == 2 => {
20+
write!(f, "&{:?} {:?}", parameters[0], parameters[1])
21+
}
22+
RigidName::Ref(RefKind::Mut) if parameters.len() == 2 => {
23+
write!(f, "&mut {:?} {:?}", parameters[0], parameters[1])
24+
}
25+
RigidName::Tuple(arity) if parameters.len() == *arity => {
26+
if *arity != 0 {
27+
write!(f, "{:?}", PrettyParameters::new("(", ")", parameters))
28+
} else {
29+
// PrettyParameters would skip the separators
30+
// for 0 arity
31+
write!(f, "()")
32+
}
33+
}
34+
_ => {
35+
write!(
36+
f,
37+
"{:?}{:?}",
38+
name,
39+
PrettyParameters::new("<", ">", parameters)
40+
)
41+
}
42+
}
43+
}
44+
}
45+
446
impl Debug for AliasTy {
547
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
648
let AliasTy { name, parameters } = self;
@@ -9,16 +51,39 @@ impl Debug for AliasTy {
951
// Grr, wish we would remember the number of parameters assigned to each position.
1052
write!(
1153
f,
12-
"({:?}::{:?})<{}>",
54+
"({:?}::{:?}){:?}",
1355
trait_id,
1456
item_id,
15-
parameters
16-
.iter()
17-
.map(|p| format!("{p:?}"))
18-
.collect::<Vec<String>>()
19-
.join(","),
57+
PrettyParameters::new("<", ">", parameters),
2058
)
2159
}
2260
}
2361
}
2462
}
63+
64+
struct PrettyParameters<'a> {
65+
open: &'a str,
66+
close: &'a str,
67+
p: &'a [Parameter],
68+
}
69+
impl<'a> PrettyParameters<'a> {
70+
fn new(open: &'a str, close: &'a str, p: &'a [Parameter]) -> Self {
71+
Self { open, close, p }
72+
}
73+
}
74+
75+
impl Debug for PrettyParameters<'_> {
76+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
77+
if self.p.len() == 0 {
78+
Ok(())
79+
} else {
80+
write!(f, "{}", self.open)?;
81+
write!(f, "{:?}", self.p[0])?;
82+
for p in &self.p[1..] {
83+
write!(f, ", {:?}", p)?;
84+
}
85+
write!(f, "{}", self.close)?;
86+
Ok(())
87+
}
88+
}
89+
}

crates/formality-types/src/grammar/ty/parse_impls.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use formality_core::Upcast;
55
use formality_core::{seq, Set};
66

77
use crate::grammar::{
8-
AdtId, AssociatedItemId, Bool, ConstData, RefKind, RigidName, Scalar, TraitId, ValTree,
8+
AdtId, AssociatedItemId, Bool, ConstData, RefKind, RigidName, Scalar, TraitId,
99
};
1010

1111
use super::{AliasTy, AssociatedTyName, Lt, Parameter, RigidTy, ScalarId, Ty};

crates/formality-types/src/grammar/ty/term_impls.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::grammar::{Const, ConstData, Parameter, ValTree};
1+
use crate::grammar::{Parameter, ValTree};
22
use crate::FormalityLang;
33
use formality_core::{
44
fold::{CoreFold, SubstitutionFn},

tests/associated_type_normalization.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ fn test_mirror_normalizes_u32_to_u32() {
2727
},
2828
known_true: true,
2929
substitution: {
30-
?ty_1 => (rigid (scalar u32)),
30+
?ty_1 => u32,
3131
},
3232
},
3333
Constraints {
@@ -39,7 +39,7 @@ fn test_mirror_normalizes_u32_to_u32() {
3939
},
4040
known_true: true,
4141
substitution: {
42-
?ty_1 => (Mirror::Assoc)<(rigid (scalar u32))>,
42+
?ty_1 => (Mirror::Assoc)<u32>,
4343
},
4444
},
4545
},

tests/coherence_overlap.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ fn test_overlap_normalize_alias_to_LocalType() {
5353

5454
expect_test::expect![[r#"
5555
Err(
56-
"impls may overlap:\nimpl <ty> LocalTrait < > for ^ty0_0 where [^ty0_0 : Iterator < >] { }\nimpl <> LocalTrait < > for (Mirror::T)<(rigid (adt LocalType))> where [] { }",
56+
"impls may overlap:\nimpl <ty> LocalTrait < > for ^ty0_0 where [^ty0_0 : Iterator < >] { }\nimpl <> LocalTrait < > for (Mirror::T)<LocalType> where [] { }",
5757
)
5858
"#]]
5959
.assert_debug_eq(&test_program_ok(&gen_program(

0 commit comments

Comments
 (0)