Skip to content

Commit aee1e86

Browse files
zaniebkonstin
authored andcommitted
Move formatting of explanations into the report formatter (#19)
1 parent f70c9e9 commit aee1e86

File tree

2 files changed

+263
-147
lines changed

2 files changed

+263
-147
lines changed

examples/unsat_root_message_no_version.rs

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
use pubgrub::error::PubGrubError;
44
use pubgrub::range::Range;
5-
use pubgrub::report::Reporter;
5+
use pubgrub::report::{Derived, Reporter};
66
use pubgrub::solver::{resolve, OfflineDependencyProvider};
77
use pubgrub::version::SemanticVersion;
88

@@ -108,6 +108,105 @@ impl ReportFormatter<Package, Range<SemanticVersion>> for CustomReportFormatter
108108
}
109109
}
110110
}
111+
112+
/// Simplest case, we just combine two external incompatibilities.
113+
fn explain_both_external(
114+
&self,
115+
external1: &External<Package, Range<SemanticVersion>>,
116+
external2: &External<Package, Range<SemanticVersion>>,
117+
current_terms: &Map<Package, Term<Range<SemanticVersion>>>,
118+
) -> String {
119+
// TODO: order should be chosen to make it more logical.
120+
format!(
121+
"Because {} and {}, {}.",
122+
self.format_external(external1),
123+
self.format_external(external2),
124+
self.format_terms(current_terms)
125+
)
126+
}
127+
128+
/// Both causes have already been explained so we use their refs.
129+
fn explain_both_ref(
130+
&self,
131+
ref_id1: usize,
132+
derived1: &Derived<Package, Range<SemanticVersion>>,
133+
ref_id2: usize,
134+
derived2: &Derived<Package, Range<SemanticVersion>>,
135+
current_terms: &Map<Package, Term<Range<SemanticVersion>>>,
136+
) -> String {
137+
// TODO: order should be chosen to make it more logical.
138+
format!(
139+
"Because {} ({}) and {} ({}), {}.",
140+
self.format_terms(&derived1.terms),
141+
ref_id1,
142+
self.format_terms(&derived2.terms),
143+
ref_id2,
144+
self.format_terms(current_terms)
145+
)
146+
}
147+
148+
/// One cause is derived (already explained so one-line),
149+
/// the other is a one-line external cause,
150+
/// and finally we conclude with the current incompatibility.
151+
fn explain_ref_and_external(
152+
&self,
153+
ref_id: usize,
154+
derived: &Derived<Package, Range<SemanticVersion>>,
155+
external: &External<Package, Range<SemanticVersion>>,
156+
current_terms: &Map<Package, Term<Range<SemanticVersion>>>,
157+
) -> String {
158+
// TODO: order should be chosen to make it more logical.
159+
format!(
160+
"Because {} ({}) and {}, {}.",
161+
self.format_terms(&derived.terms),
162+
ref_id,
163+
self.format_external(external),
164+
self.format_terms(current_terms)
165+
)
166+
}
167+
168+
/// Add an external cause to the chain of explanations.
169+
fn and_explain_external(
170+
&self,
171+
external: &External<Package, Range<SemanticVersion>>,
172+
current_terms: &Map<Package, Term<Range<SemanticVersion>>>,
173+
) -> String {
174+
format!(
175+
"And because {}, {}.",
176+
self.format_external(external),
177+
self.format_terms(current_terms)
178+
)
179+
}
180+
181+
/// Add an already explained incompat to the chain of explanations.
182+
fn and_explain_ref(
183+
&self,
184+
ref_id: usize,
185+
derived: &Derived<Package, Range<SemanticVersion>>,
186+
current_terms: &Map<Package, Term<Range<SemanticVersion>>>,
187+
) -> String {
188+
format!(
189+
"And because {} ({}), {}.",
190+
self.format_terms(&derived.terms),
191+
ref_id,
192+
self.format_terms(current_terms)
193+
)
194+
}
195+
196+
/// Add an already explained incompat to the chain of explanations.
197+
fn and_explain_prior_and_external(
198+
&self,
199+
prior_external: &External<Package, Range<SemanticVersion>>,
200+
external: &External<Package, Range<SemanticVersion>>,
201+
current_terms: &Map<Package, Term<Range<SemanticVersion>>>,
202+
) -> String {
203+
format!(
204+
"And because {} and {}, {}.",
205+
self.format_external(prior_external),
206+
self.format_external(external),
207+
self.format_terms(current_terms)
208+
)
209+
}
111210
}
112211

113212
fn main() {

0 commit comments

Comments
 (0)