about summary refs log tree commit diff
path: root/compiler/rustc_lint/src/context/diagnostics.rs
AgeCommit message (Collapse)AuthorLines
2024-12-15Access `TyCtxt` from early diagnostic decorationUrgau-462/+0
2024-11-25fix confusing diagnostic for reserved `##`Peter Jaszkowiak-2/+6
2024-10-08Reserve guarded string literals (RFC 3593)Peter Jaszkowiak-0/+3
2024-10-05Make deprecated_cfg_attr_crate_type_name a hard errorest31-6/+0
2024-09-22Reformat using the new identifier sorting from rustfmtMichael Goulet-3/+3
2024-09-07Rollup merge of #126452 - compiler-errors:raw-lifetimes, r=spastorinoMatthias Krüger-0/+4
Implement raw lifetimes and labels (`'r#ident`) This PR does two things: 1. Reserve lifetime prefixes, e.g. `'prefix#lt` in edition 2021. 2. Implements raw lifetimes, e.g. `'r#async` in edition 2021. This PR additionally extends the `keyword_idents_2024` lint to also check lifetimes. cc `@traviscross` r? parser
2024-09-06Add initial support for raw lifetimesMichael Goulet-0/+4
2024-09-06elided_named_lifetimes: manually implement `LintDiagnostic`Pavel Grigorenko-25/+7
2024-09-06elided_named_lifetimes: add suggestionsPavel Grigorenko-15/+29
2024-09-06elided_named_lifetimes: unify lint def & pass MissingLifetimeKindPavel Grigorenko-10/+13
2024-08-31Implement `elided_named_lifetimes` lintPavel Grigorenko-0/+13
2024-08-07Disallow setting built-in cfgs via set the command-lineUrgau-0/+3
2024-07-29Reformat `use` declarations.Nicholas Nethercote-2/+3
The previous commit updated `rustfmt.toml` appropriately. This commit is the outcome of running `x fmt --all` with the new formatting options.
2024-06-24resolve: Implement a lint for out-of-scope use of `macro_rules`Vadim Petrochenkov-0/+3
2024-06-23Add hard error and migration lint for unsafe attrscarbotaniuman-0/+10
2024-06-14Resolve elided lifetimes in assoc const to static if no other lifetimes are ↵Michael Goulet-3/+12
in scope
2024-06-11Rollup merge of #125913 - fmease:early-lints-spruce-up-some-diags, r=Nadrieril许杰友 Jieyou Xu (Joe)-2/+3
Spruce up the diagnostics of some early lints Implement the various "*(note to myself) in a follow-up PR we should turn parts of this message into a subdiagnostic (help msg or even struct sugg)*" drive-by comments I left in #124417 during my review. For context, before #124417, only a few early lints touched/decorated/customized their diagnostic because the former API made it a bit awkward. Likely because of that, things that should've been subdiagnostics were just crammed into the primary message. This PR rectifies this.
2024-06-06Auto merge of #124482 - spastorino:unsafe-extern-blocks, r=oli-obkbors-0/+3
Unsafe extern blocks This implements RFC 3484. Tracking issue #123743 and RFC https://github.com/rust-lang/rfcs/pull/3484 This is better reviewed commit by commit.
2024-06-05Make MISSING_UNSAFE_ON_EXTERN lint emit future compat info with suggestion ↵Santiago Pastorino-2/+2
to prepend unsafe
2024-06-04Make extern blocks without unsafe warn in edition 2024Santiago Pastorino-0/+3
2024-06-03Spruce up the diagnostics of some early lintsLeón Orell Valerian Liehr-2/+3
2024-05-28Convert `proc_macro_back_compat` lint to an unconditional error.Nicholas Nethercote-3/+0
We still check for the `rental`/`allsorts-rental` crates. But now if they are detected we just emit a fatal error, instead of emitting a warning and providing alternative behaviour. The original "hack" implementing alternative behaviour was added in #73345. The lint was added in #83127. The tracking issue is #83125. The direct motivation for the change is that providing the alternative behaviour is interfering with #125174 and follow-on work.
2024-05-27Auto merge of #125410 - fmease:adj-lint-diag-api, r=nnethercotebors-230/+153
[perf] Delay the construction of early lint diag structs Attacks some of the perf regressions from https://github.com/rust-lang/rust/pull/124417#issuecomment-2123700666. See individual commits for details. The first three commits are not strictly necessary. However, the 2nd one (06bc4fc67145e3a7be9b5a2cf2b5968cef36e587, *Remove `LintDiagnostic::msg`*) makes the main change way nicer to implement. It's also pretty sweet on its own if I may say so myself.
2024-05-23Remove `#[macro_use] extern crate tracing` from `rustc_lint`.Nicholas Nethercote-0/+1
2024-05-23Delay the construction of early lint diag structsLeón Orell Valerian Liehr-230/+153
Fixes a slew of perf regressions.
2024-05-21Make early lints translatableXiretza-440/+327
2024-05-21Convert uses of BuiltinLintDiag::Normal to custom variantsXiretza-12/+125
This ensures all diagnostic messages are created at diagnostic emission time, making them translatable.
2024-05-21Port DeprecatedMacro to diag structsXiretza-4/+21
2024-05-21Generate lint diagnostic message from BuiltinLintDiagXiretza-14/+136
Translation of the lint message happens when the actual diagnostic is created, not when the lint is buffered. Generating the message from BuiltinLintDiag ensures that all required data to construct the message is preserved in the LintBuffer, eventually allowing the messages to be moved to fluent. Remove the `msg` field from BufferedEarlyLint, it is either generated from the data in the BuiltinLintDiag or stored inside BuiltinLintDiag::Normal.
2024-05-21Convert NAMED_ASM_LABELS lint to diag structXiretza-4/+0
2024-05-15Add `on_unimplemented" typo suggestionsmejrs-0/+8
2024-04-21Move "elided lifetime in path" to subdiagnostic structXiretza-8/+10
This requires nested subdiagnostics.
2024-04-11Rollup merge of #122954 - fmease:defined-by-extern-prelude, r=petrochenkovLeón Orell Valerian Liehr-1/+1
Be more specific when flagging imports as redundant due to the extern prelude There are multiple distinct kinds of [preludes](https://doc.rust-lang.org/reference/names/preludes.html). Be more specific when flagging imports as redundant due to the [extern prelude](https://doc.rust-lang.org/reference/names/preludes.html#extern-prelude). r? Nilstrieb or compiler
2024-04-09Add a helper for extending a span to include any trailing whitespaceMichael Goulet-4/+1
2024-04-08Be more specific when flagging imports that are redundant due to the extern ↵León Orell Valerian Liehr-1/+1
prelude
2024-03-16Move check-cfg diagnostic logic into it's own moduleUrgau-274/+5
2024-03-06Fix redundant import errors for preload extern crateyukang-1/+5
2024-03-05Limit the number of names and values in check-cfg diagnosticsUrgau-20/+51
2024-03-05Rename `BuiltinLintDiagnostics` as `BuiltinLintDiag`.Nicholas Nethercote-47/+38
Not the dropping of the trailing `s` -- this type describes a single diagnostic and its name should be singular.
2024-03-05Rename all `ParseSess` variables/fields/lifetimes as `psess`.Nicholas Nethercote-7/+5
Existing names for values of this type are `sess`, `parse_sess`, `parse_session`, and `ps`. `sess` is particularly annoying because that's also used for `Session` values, which are often co-located, and it can be difficult to know which type a value named `sess` refers to. (That annoyance is the main motivation for this change.) `psess` is nice and short, which is good for a name used this much. The commit also renames some `parse_sess_created` values as `psess_created`.
2024-03-01Rollup merge of #121580 - Suyashtnt:issue-121502-fix, r=michaelwoeristerMatthias Krüger-1/+1
make unused_imports less assertive in test modules closes #121502 This is a fairly small change and I used the fix suggested in the example expected error message. Not sure if I should've rather used the alternatives but this one seems the most descriptive. Some alternatives: - if this is meant to be a test module, add `#[cfg(test)]` to the containing module - try adding #[cfg(test)] to this test module - consider adding #[allow(unused_imports)] if you want to silent the lint on the unused import - consider removing the unused import
2024-02-29Detect empty leading where-clauses on type aliasesLeón Orell Valerian Liehr-9/+16
2024-02-28Rename `DiagnosticBuilder` as `Diag`.Nicholas Nethercote-85/+85
Much better! Note that this involves renaming (and updating the value of) `DIAGNOSTIC_BUILDER` in clippy.
2024-02-25make unused_imports less assertive in test modulesSuyashtnt-1/+1
closes #121502
2024-02-20Reduce capabilities of `Diagnostic`.Nicholas Nethercote-0/+3
Currently many diagnostic modifier methods are available on both `Diagnostic` and `DiagnosticBuilder`. This commit removes most of them from `Diagnostic`. To minimize the diff size, it keeps them within `diagnostic.rs` but changes the surrounding `impl Diagnostic` block to `impl DiagnosticBuilder`. (I intend to move things around later, to give a more sensible code layout.) `Diagnostic` keeps a few methods that it still needs, like `sub`, `arg`, and `replace_args`. The `forward!` macro, which defined two additional methods per call (e.g. `note` and `with_note`), is replaced by the `with_fn!` macro, which defines one additional method per call (e.g. `with_note`). It's now also only used when necessary -- not all modifier methods currently need a `with_*` form. (New ones can be easily added as necessary.) All this also requires changing `trait AddToDiagnostic` so its methods take `DiagnosticBuilder` instead of `Diagnostic`, which leads to many mechanical changes. `SubdiagnosticMessageOp` gains a type parameter `G`. There are three subdiagnostics -- `DelayedAtWithoutNewline`, `DelayedAtWithNewline`, and `InvalidFlushedDelayedDiagnosticLevel` -- that are created within the diagnostics machinery and appended to external diagnostics. These are handled at the `Diagnostic` level, which means it's now hard to construct them via `derive(Diagnostic)`, so instead we construct them by hand. This has no effect on what they look like when printed. There are lots of new `allow` markers for `untranslatable_diagnostics` and `diagnostics_outside_of_impl`. This is because `#[rustc_lint_diagnostics]` annotations were present on the `Diagnostic` modifier methods, but missing from the `DiagnosticBuilder` modifier methods. They're now present.
2024-02-17Use better heuristic for printing Cargo specific diagnosticsUrgau-2/+2
2024-02-06Rollup merge of #120435 - chenyukang:yukang-fix-120427-cfg-name, ↵Matthias Krüger-10/+40
r=Urgau,Nilstrieb Suggest name value cfg when only value is used for check-cfg Fixes #120427 r? `````````````@Nilstrieb`````````````
2024-01-30add missing potential_query_instability for keys and values in hashmapyukang-0/+1
2024-01-30limit the names_possiblilities to less than 3Yukang-1/+1
Co-authored-by: Urgau <3616612+Urgau@users.noreply.github.com>
2024-01-28Suggest name value cfg when only value is used for check-cfgyukang-10/+40