Skip to content

Commit 09e479d

Browse files
committed
Show which where clause failed in diagnostics
1 parent 4471cf3 commit 09e479d

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

crates/formality-check/src/lib.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![allow(dead_code)]
22

3-
use std::collections::VecDeque;
3+
use std::{collections::VecDeque, fmt::Debug};
44

55
use anyhow::bail;
66
use formality_prove::{Decls, Env};
@@ -86,7 +86,12 @@ impl Check<'_> {
8686
}
8787
}
8888

89-
fn prove_goal(&self, env: &Env, assumptions: impl ToWcs, goal: impl ToWcs) -> Fallible<()> {
89+
fn prove_goal(
90+
&self,
91+
env: &Env,
92+
assumptions: impl ToWcs,
93+
goal: impl ToWcs + Debug,
94+
) -> Fallible<()> {
9095
let goal: Wcs = goal.to_wcs();
9196
let assumptions: Wcs = assumptions.to_wcs();
9297

@@ -101,7 +106,12 @@ impl Check<'_> {
101106
bail!("failed to prove {goal:?} given {assumptions:?}, got {cs:?}")
102107
}
103108

104-
fn prove_not_goal(&self, env: &Env, assumptions: impl ToWcs, goal: impl ToWcs) -> Fallible<()> {
109+
fn prove_not_goal(
110+
&self,
111+
env: &Env,
112+
assumptions: impl ToWcs,
113+
goal: impl ToWcs + Debug,
114+
) -> Fallible<()> {
105115
let goal: Wcs = goal.to_wcs();
106116
let assumptions: Wcs = assumptions.to_wcs();
107117

crates/formality-check/src/where_clauses.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use fn_error_context::context;
12
use formality_prove::Env;
23
use formality_rust::{
34
grammar::{WhereClause, WhereClauseData},
@@ -21,6 +22,7 @@ impl super::Check<'_> {
2122
Ok(())
2223
}
2324

25+
#[context("prove_where_clauses_well_formed({where_clause:?})")]
2426
fn prove_where_clause_well_formed(
2527
&self,
2628
in_env: &Env,

tests/hello_world.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ fn test_broken() {
66
Err(
77
Error {
88
context: "check_trait(Foo)",
9-
source: "failed to prove {@ WellFormedTraitRef(Bar(!ty_2, !ty_1))} given {Bar(!ty_2, !ty_1)}, got {}",
9+
source: Error {
10+
context: "prove_where_clause_well_formed(!ty_2 : Bar < !ty_1 >)",
11+
source: "failed to prove {@ WellFormedTraitRef(Bar(!ty_2, !ty_1))} given {Bar(!ty_2, !ty_1)}, got {}",
12+
},
1013
},
1114
)
1215
"#]].assert_debug_eq(&test_program_ok(

0 commit comments

Comments
 (0)