Skip to content

DiagnosticBuilder::span_label (sometimes?) does nothing #71857

Closed
@RalfJung

Description

@RalfJung

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. :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsC-bugCategory: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions