Skip to content

Commit f3dbcda

Browse files
konstinzanieb
andauthored
Move formatting of explanations into the report formatter (#19) (pubgrub-rs#214)
Co-authored-by: Zanie Blue <contact@zanie.dev>
1 parent 2c49549 commit f3dbcda

File tree

2 files changed

+263
-161
lines changed

2 files changed

+263
-161
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

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

111210
fn main() {

0 commit comments

Comments
 (0)