Rollup merge of #102953 - WaffleLapkin:better_docs_for_decorate_param, r=RalfJung
Improve docs for `struct_lint_level` function. r? ``@RalfJung`` Does this answer your questions?
This commit is contained in:
commit
d6506cc0be
@ -574,6 +574,11 @@ pub trait LintContext: Sized {
|
||||
fn sess(&self) -> &Session;
|
||||
fn lints(&self) -> &LintStore;
|
||||
|
||||
/// Emit a lint at the appropriate level, with an optional associated span and an existing diagnostic.
|
||||
///
|
||||
/// Return value of the `decorate` closure is ignored, see [`struct_lint_level`] for a detailed explanation.
|
||||
///
|
||||
/// [`struct_lint_level`]: rustc_middle::lint::struct_lint_level#decorate-signature
|
||||
fn lookup_with_diagnostics(
|
||||
&self,
|
||||
lint: &'static Lint,
|
||||
@ -872,6 +877,11 @@ fn lookup_with_diagnostics(
|
||||
|
||||
// FIXME: These methods should not take an Into<MultiSpan> -- instead, callers should need to
|
||||
// set the span in their `decorate` function (preferably using set_span).
|
||||
/// Emit a lint at the appropriate level, with an optional associated span.
|
||||
///
|
||||
/// Return value of the `decorate` closure is ignored, see [`struct_lint_level`] for a detailed explanation.
|
||||
///
|
||||
/// [`struct_lint_level`]: rustc_middle::lint::struct_lint_level#decorate-signature
|
||||
fn lookup<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
lint: &'static Lint,
|
||||
@ -893,6 +903,11 @@ fn emit_spanned_lint<S: Into<MultiSpan>>(
|
||||
self.lookup(lint, Some(span), decorator.msg(), |diag| decorator.decorate_lint(diag));
|
||||
}
|
||||
|
||||
/// Emit a lint at the appropriate level, with an associated span.
|
||||
///
|
||||
/// Return value of the `decorate` closure is ignored, see [`struct_lint_level`] for a detailed explanation.
|
||||
///
|
||||
/// [`struct_lint_level`]: rustc_middle::lint::struct_lint_level#decorate-signature
|
||||
fn struct_span_lint<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
lint: &'static Lint,
|
||||
@ -914,6 +929,10 @@ fn emit_lint(&self, lint: &'static Lint, decorator: impl for<'a> DecorateLint<'a
|
||||
}
|
||||
|
||||
/// Emit a lint at the appropriate level, with no associated span.
|
||||
///
|
||||
/// Return value of the `decorate` closure is ignored, see [`struct_lint_level`] for a detailed explanation.
|
||||
///
|
||||
/// [`struct_lint_level`]: rustc_middle::lint::struct_lint_level#decorate-signature
|
||||
fn lint(
|
||||
&self,
|
||||
lint: &'static Lint,
|
||||
|
@ -1069,6 +1069,10 @@ pub fn lint_level(&self, lint: &'static Lint) -> LevelAndSource {
|
||||
|
||||
/// Used to emit a lint-related diagnostic based on the current state of
|
||||
/// this lint context.
|
||||
///
|
||||
/// Return value of the `decorate` closure is ignored, see [`struct_lint_level`] for a detailed explanation.
|
||||
///
|
||||
/// [`struct_lint_level`]: rustc_middle::lint::struct_lint_level#decorate-signature
|
||||
pub(crate) fn struct_lint(
|
||||
&self,
|
||||
lint: &'static Lint,
|
||||
|
@ -274,6 +274,39 @@ pub fn explain_lint_level_source(
|
||||
}
|
||||
}
|
||||
|
||||
/// The innermost function for emitting lints.
|
||||
///
|
||||
/// If you are loocking to implement a lint, look for higher level functions,
|
||||
/// for example:
|
||||
/// - [`TyCtxt::emit_spanned_lint`]
|
||||
/// - [`TyCtxt::struct_span_lint_hir`]
|
||||
/// - [`TyCtxt::emit_lint`]
|
||||
/// - [`TyCtxt::struct_lint_node`]
|
||||
/// - `LintContext::lookup`
|
||||
///
|
||||
/// ## `decorate` signature
|
||||
///
|
||||
/// The return value of `decorate` is ignored by this function. So what is the
|
||||
/// point of returning `&'b mut DiagnosticBuilder<'a, ()>`?
|
||||
///
|
||||
/// There are 2 reasons for this signature.
|
||||
///
|
||||
/// First of all, it prevents accidental use of `.emit()` -- it's clear that the
|
||||
/// builder will be later used and shouldn't be emitted right away (this is
|
||||
/// especially important because the old API expected you to call `.emit()` in
|
||||
/// the closure).
|
||||
///
|
||||
/// Second of all, it makes the most common case of adding just a single label
|
||||
/// /suggestion much nicer, since [`DiagnosticBuilder`] methods return
|
||||
/// `&mut DiagnosticBuilder`, you can just chain methods, without needed
|
||||
/// awkward `{ ...; }`:
|
||||
/// ```ignore pseudo-code
|
||||
/// struct_lint_level(
|
||||
/// ...,
|
||||
/// |lint| lint.span_label(sp, "lbl")
|
||||
/// // ^^^^^^^^^^^^^^^^^^^^^ returns `&mut DiagnosticBuilder` by default
|
||||
/// )
|
||||
/// ```
|
||||
pub fn struct_lint_level(
|
||||
sess: &Session,
|
||||
lint: &'static Lint,
|
||||
|
@ -2823,6 +2823,11 @@ pub fn emit_spanned_lint(
|
||||
})
|
||||
}
|
||||
|
||||
/// Emit a lint at the appropriate level for a hir node, with an associated span.
|
||||
///
|
||||
/// Return value of the `decorate` closure is ignored, see [`struct_lint_level`] for a detailed explanation.
|
||||
///
|
||||
/// [`struct_lint_level`]: rustc_middle::lint::struct_lint_level#decorate-signature
|
||||
pub fn struct_span_lint_hir(
|
||||
self,
|
||||
lint: &'static Lint,
|
||||
@ -2848,6 +2853,11 @@ pub fn emit_lint(
|
||||
self.struct_lint_node(lint, id, decorator.msg(), |diag| decorator.decorate_lint(diag))
|
||||
}
|
||||
|
||||
/// Emit a lint at the appropriate level for a hir node.
|
||||
///
|
||||
/// Return value of the `decorate` closure is ignored, see [`struct_lint_level`] for a detailed explanation.
|
||||
///
|
||||
/// [`struct_lint_level`]: rustc_middle::lint::struct_lint_level#decorate-signature
|
||||
pub fn struct_lint_node(
|
||||
self,
|
||||
lint: &'static Lint,
|
||||
|
Loading…
Reference in New Issue
Block a user