Rollup merge of #94670 - xFrednet:rfc-2383-expect-impl-after-party, r=flip1995,wesleywiser
Improve `expect` impl and handle `#[expect(unfulfilled_lint_expectations)]` (RFC 2383) This PR updates unstable `ExpectationIds` in stashed diagnostics and adds some asserts to ensure that the stored expectations are really empty in the end. Additionally, it handles the `#[expect(unfulfilled_lint_expectations)]` case. According to the [Errors and lints docs](https://rustc-dev-guide.rust-lang.org/diagnostics.html#diagnostic-levels) the `error` level should only be used _"when the compiler detects a problem that makes it unable to compile the program"_. As this isn't the case with `#[expect(unfulfilled_lint_expectations)]` I decided to only create a warning. To avoid adding a new lint only for this case, I simply emit a `unfulfilled_lint_expectations` diagnostic with an additional note. --- r? `@wesleywiser` I'm requesting a review from you since you reviewed the previous PR https://github.com/rust-lang/rust/pull/87835. You are welcome to reassign it if you're busy 🙃 rfc: [RFC-2383](https://rust-lang.github.io/rfcs/2383-lint-reasons.html) tracking issue: https://github.com/rust-lang/rust/issues/85549 cc: `@flip1995` In case you're also interested in this :)
This commit is contained in:
commit
6548a368c8
8 changed files with 167 additions and 30 deletions
|
@ -54,7 +54,7 @@ pub enum Applicability {
|
|||
/// Expected `Diagnostic`s get the lint level `Expect` which stores the `LintExpectationId`
|
||||
/// to match it with the actual expectation later on.
|
||||
///
|
||||
/// The `LintExpectationId` has to be has stable between compilations, as diagnostic
|
||||
/// The `LintExpectationId` has to be stable between compilations, as diagnostic
|
||||
/// instances might be loaded from cache. Lint messages can be emitted during an
|
||||
/// `EarlyLintPass` operating on the AST and during a `LateLintPass` traversing the
|
||||
/// HIR tree. The AST doesn't have enough information to create a stable id. The
|
||||
|
@ -71,7 +71,7 @@ pub enum Applicability {
|
|||
#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash, Encodable, Decodable)]
|
||||
pub enum LintExpectationId {
|
||||
/// Used for lints emitted during the `EarlyLintPass`. This id is not
|
||||
/// has stable and should not be cached.
|
||||
/// hash stable and should not be cached.
|
||||
Unstable { attr_id: AttrId, lint_index: Option<u16> },
|
||||
/// The [`HirId`] that the lint expectation is attached to. This id is
|
||||
/// stable and can be cached. The additional index ensures that nodes with
|
||||
|
@ -113,7 +113,9 @@ impl<HCX: rustc_hir::HashStableContext> HashStable<HCX> for LintExpectationId {
|
|||
lint_index.hash_stable(hcx, hasher);
|
||||
}
|
||||
_ => {
|
||||
unreachable!("HashStable should only be called for a filled `LintExpectationId`")
|
||||
unreachable!(
|
||||
"HashStable should only be called for filled and stable `LintExpectationId`"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue