Description
Recently, I was constructing a diagnostic with code like this:
let mut diag = self.struct_warn("skipping const checks");
for &(span, feature_gate) in unleashed_features.iter() {
if let Some(feature_gate) = feature_gate {
diag.span_label(span, format!("skipping check for `{}` feature", feature_gate));
} else {
diag.span_label(span, "skipping check that does not even have a feature gate");
}
}
diag.emit();
I expected this to print a warning with a bunch of labels pointing to the given spans attached to it. But instead, the labels are just entirely ignored.
I am now using span_help
instead, but that's a gross hack as this is not a "help" information. (This warning is for permanently unstable nightly-only testing flags, so it's not a big deal.) Unfortunately the span_label
doc comment is also not very helpful, talking about the internal representation of the diagnostic builder ("multispan" etc) and about what happens when I do not call this method (?!?) but not about why adding a label might just have no effect at all.
Cc @rust-lang/wg-diagnostics which hopefully has people that actually understand this API, unlike me. :)