RFC 2383: Stabilize `lint_reasons` 🎉

This commit is contained in:
xFrednet 2024-02-10 21:53:34 +00:00
parent d929a42a66
commit 8b14e23dce
No known key found for this signature in database
GPG Key ID: F5C59D0E669E5302
89 changed files with 177 additions and 257 deletions

View File

@ -12,7 +12,7 @@
#![feature(decl_macro)]
#![feature(if_let_guard)]
#![feature(let_chains)]
#![feature(lint_reasons)]
#![cfg_attr(bootstrap, feature(lint_reasons))]
#![feature(proc_macro_internals)]
#![feature(proc_macro_quote)]
#![feature(rustdoc_internals)]

View File

@ -10,6 +10,7 @@
#![allow(internal_features)]
#![allow(rustc::default_hash_types)]
#![allow(rustc::potential_query_instability)]
#![cfg_attr(bootstrap, feature(lint_reasons))]
#![cfg_attr(not(parallel_compiler), feature(cell_leak))]
#![deny(unsafe_op_in_unsafe_fn)]
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
@ -24,7 +25,6 @@
#![feature(extend_one)]
#![feature(hash_raw_entry)]
#![feature(hasher_prefixfree_extras)]
#![feature(lint_reasons)]
#![feature(macro_metavar_expr)]
#![feature(map_try_insert)]
#![feature(min_specialization)]

View File

@ -232,6 +232,8 @@ declare_features! (
(accepted, label_break_value, "1.65.0", Some(48594)),
/// Allows `let...else` statements.
(accepted, let_else, "1.65.0", Some(87335)),
/// Allows using `reason` in lint attributes and the `#[expect(lint)]` lint check.
(accepted, lint_reasons, "CURRENT_RUSTC_VERSION", Some(54503)),
/// Allows `break {expr}` with a value inside `loop`s.
(accepted, loop_break_value, "1.19.0", Some(37339)),
/// Allows use of `?` as the Kleene "at most one" operator in macros.

View File

@ -369,9 +369,9 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
allow, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#),
DuplicatesOk, EncodeCrossCrate::No,
),
gated!(
expect, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), DuplicatesOk,
EncodeCrossCrate::No, lint_reasons, experimental!(expect)
ungated!(
expect, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#),
DuplicatesOk, EncodeCrossCrate::No,
),
ungated!(
forbid, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#),

View File

@ -512,8 +512,6 @@ declare_features! (
/// Allows using `#[link(kind = "link-arg", name = "...")]`
/// to pass custom arguments to the linker.
(unstable, link_arg_attribute, "1.76.0", Some(99427)),
/// Allows using `reason` in lint attributes and the `#[expect(lint)]` lint check.
(unstable, lint_reasons, "1.31.0", Some(54503)),
/// Give access to additional metadata about declarative macro meta-variables.
(unstable, macro_metavar_expr, "1.61.0", Some(83527)),
/// Provides a way to concatenate identifiers using metavariable expressions.

View File

@ -3,7 +3,6 @@ use rustc_middle::query::Providers;
use rustc_middle::ty::TyCtxt;
use rustc_session::lint::builtin::UNFULFILLED_LINT_EXPECTATIONS;
use rustc_session::lint::LintExpectationId;
use rustc_span::symbol::sym;
use rustc_span::Symbol;
pub(crate) fn provide(providers: &mut Providers) {
@ -11,10 +10,6 @@ pub(crate) fn provide(providers: &mut Providers) {
}
fn check_expectations(tcx: TyCtxt<'_>, tool_filter: Option<Symbol>) {
if !tcx.features().active(sym::lint_reasons) {
return;
}
let lint_expectations = tcx.lint_expectations(());
let fulfilled_expectations = tcx.dcx().steal_fulfilled_expectation_ids();

View File

@ -37,7 +37,6 @@ use rustc_session::lint::{
},
Level, Lint, LintExpectationId, LintId,
};
use rustc_session::parse::feature_err;
use rustc_session::Session;
use rustc_span::symbol::{sym, Symbol};
use rustc_span::{Span, DUMMY_SP};
@ -788,15 +787,6 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
ast::MetaItemKind::NameValue(ref name_value) => {
if item.path == sym::reason {
if let ast::LitKind::Str(rationale, _) = name_value.kind {
if !self.features.lint_reasons {
feature_err(
&self.sess,
sym::lint_reasons,
item.span,
"lint reasons are experimental",
)
.emit();
}
reason = Some(rationale);
} else {
sess.dcx().emit_err(MalformedAttribute {

View File

@ -608,13 +608,13 @@ declare_lint! {
}
declare_lint! {
/// The `unfulfilled_lint_expectations` lint detects lint trigger expectations
/// that have not been fulfilled.
/// The `unfulfilled_lint_expectations` lint warns if a lint expectation is
/// unfulfilled.
///
/// ### Example
///
/// ```rust
/// #![feature(lint_reasons)]
/// #![cfg_attr(bootstrap, feature(lint_reasons))]
///
/// #[expect(unused_variables)]
/// let x = 10;
@ -625,24 +625,14 @@ declare_lint! {
///
/// ### Explanation
///
/// It was expected that the marked code would emit a lint. This expectation
/// has not been fulfilled.
/// The `#[expect]` attribute can be used to create a lint expectation. The
/// expectation is fulfilled, if a `#[warn]` attribute at the same location
/// would result in a lint emission. If the expectation is unfulfilled,
/// because no lint was emitted, this lint will be emitted on the attribute.
///
/// The `expect` attribute can be removed if this is intended behavior otherwise
/// it should be investigated why the expected lint is no longer issued.
///
/// In rare cases, the expectation might be emitted at a different location than
/// shown in the shown code snippet. In most cases, the `#[expect]` attribute
/// works when added to the outer scope. A few lints can only be expected
/// on a crate level.
///
/// Part of RFC 2383. The progress is being tracked in [#54503]
///
/// [#54503]: https://github.com/rust-lang/rust/issues/54503
pub UNFULFILLED_LINT_EXPECTATIONS,
Warn,
"unfulfilled lint expectation",
@feature_gate = rustc_span::sym::lint_reasons;
"unfulfilled lint expectation"
}
declare_lint! {

View File

@ -142,9 +142,9 @@ pub const INERT_ATTRIBUTES: &[BuiltinAttribute] = &[
allow, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#),
DuplicatesOk, @only_local: true,
),
gated!(
expect, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), DuplicatesOk,
lint_reasons, experimental!(expect)
ungated!(
expect, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#),
DuplicatesOk, @only_local: true,
),
ungated!(
forbid, Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#),

View File

@ -1,5 +1,4 @@
//@ check-pass
#![feature(lint_reasons)]
//! This file tests the `#[expect]` attribute implementation for tool lints. The same
//! file is used to test clippy and rustdoc. Any changes to this file should be synced

View File

@ -1,8 +1,6 @@
//@ check-pass
//@ edition: 2021
#![feature(lint_reasons)]
use std::future::Future;
use std::pin::Pin;
use std::task::Poll;

View File

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
pub mod inner {
#[expect(unexpected_cfgs)]
pub fn i_am_here() {

View File

@ -1,5 +1,5 @@
error[E0425]: cannot find function `i_am_not` in module `inner`
--> $DIR/diagnostics-not-a-def.rs:14:12
--> $DIR/diagnostics-not-a-def.rs:12:12
|
LL | inner::i_am_not();
| ^^^^^^^^ not found in `inner`

View File

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
#![deny(unused_attributes)]
#![allow()] //~ ERROR unused attribute
#![expect()] //~ ERROR unused attribute

View File

@ -1,18 +1,18 @@
error: unused attribute
--> $DIR/empty-attributes.rs:11:1
--> $DIR/empty-attributes.rs:9:1
|
LL | #[repr()]
| ^^^^^^^^^ help: remove this attribute
|
= note: attribute `repr` with an empty list has no effect
note: the lint level is defined here
--> $DIR/empty-attributes.rs:3:9
--> $DIR/empty-attributes.rs:1:9
|
LL | #![deny(unused_attributes)]
| ^^^^^^^^^^^^^^^^^
error: unused attribute
--> $DIR/empty-attributes.rs:14:1
--> $DIR/empty-attributes.rs:12:1
|
LL | #[target_feature()]
| ^^^^^^^^^^^^^^^^^^^ help: remove this attribute
@ -20,7 +20,7 @@ LL | #[target_feature()]
= note: attribute `target_feature` with an empty list has no effect
error: unused attribute
--> $DIR/empty-attributes.rs:4:1
--> $DIR/empty-attributes.rs:2:1
|
LL | #![allow()]
| ^^^^^^^^^^^ help: remove this attribute
@ -28,7 +28,7 @@ LL | #![allow()]
= note: attribute `allow` with an empty list has no effect
error: unused attribute
--> $DIR/empty-attributes.rs:5:1
--> $DIR/empty-attributes.rs:3:1
|
LL | #![expect()]
| ^^^^^^^^^^^^ help: remove this attribute
@ -36,7 +36,7 @@ LL | #![expect()]
= note: attribute `expect` with an empty list has no effect
error: unused attribute
--> $DIR/empty-attributes.rs:6:1
--> $DIR/empty-attributes.rs:4:1
|
LL | #![warn()]
| ^^^^^^^^^^ help: remove this attribute
@ -44,7 +44,7 @@ LL | #![warn()]
= note: attribute `warn` with an empty list has no effect
error: unused attribute
--> $DIR/empty-attributes.rs:7:1
--> $DIR/empty-attributes.rs:5:1
|
LL | #![deny()]
| ^^^^^^^^^^ help: remove this attribute
@ -52,7 +52,7 @@ LL | #![deny()]
= note: attribute `deny` with an empty list has no effect
error: unused attribute
--> $DIR/empty-attributes.rs:8:1
--> $DIR/empty-attributes.rs:6:1
|
LL | #![forbid()]
| ^^^^^^^^^^^^ help: remove this attribute
@ -60,7 +60,7 @@ LL | #![forbid()]
= note: attribute `forbid` with an empty list has no effect
error: unused attribute
--> $DIR/empty-attributes.rs:9:1
--> $DIR/empty-attributes.rs:7:1
|
LL | #![feature()]
| ^^^^^^^^^^^^^ help: remove this attribute

View File

@ -13,6 +13,11 @@ warning[E0602]: unknown lint: `bogus`
= note: requested on the command line with `-D bogus`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: 3 warnings emitted
warning[E0602]: unknown lint: `bogus`
|
= note: requested on the command line with `-D bogus`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: 4 warnings emitted
For more information about this error, try `rustc --explain E0602`.

View File

@ -1,5 +0,0 @@
#![warn(nonstandard_style, reason = "the standard should be respected")]
//~^ ERROR lint reasons are experimental
//~| ERROR lint reasons are experimental
fn main() {}

View File

@ -1,24 +0,0 @@
error[E0658]: lint reasons are experimental
--> $DIR/feature-gate-lint-reasons.rs:1:28
|
LL | #![warn(nonstandard_style, reason = "the standard should be respected")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: lint reasons are experimental
--> $DIR/feature-gate-lint-reasons.rs:1:28
|
LL | #![warn(nonstandard_style, reason = "the standard should be respected")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
use std::ops::Deref;
pub trait Foo {

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
pub struct Wrapper<T>(T);
pub trait Foo {

View File

@ -5,7 +5,7 @@ LL | let _: &dyn rpitit::Foo = todo!();
| ^^^^^^^^^^^^^^^^ `Foo` cannot be made into an object
|
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
--> $DIR/auxiliary/rpitit.rs:6:21
--> $DIR/auxiliary/rpitit.rs:4:21
|
LL | fn bar(self) -> impl Deref<Target = impl Sized>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait cannot be made into an object because method `bar` references an `impl Trait` type in its return type

View File

@ -1,8 +1,6 @@
//@ check-pass
//@ aux-build: rpitit.rs
#![feature(lint_reasons)]
extern crate rpitit;
use rpitit::{Foo, Foreign};

View File

@ -1,5 +1,5 @@
warning: impl trait in impl method signature does not match trait method signature
--> $DIR/foreign.rs:23:21
--> $DIR/foreign.rs:21:21
|
LL | fn bar(self) -> Arc<String> {
| ^^^^^^^^^^^
@ -7,7 +7,7 @@ LL | fn bar(self) -> Arc<String> {
= note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
= note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
note: the lint level is defined here
--> $DIR/foreign.rs:22:12
--> $DIR/foreign.rs:20:12
|
LL | #[warn(refining_impl_trait)]
| ^^^^^^^^^^^^^^^^^^^
@ -18,7 +18,7 @@ LL | fn bar(self) -> impl Deref<Target = impl Sized> {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: impl trait in impl method signature does not match trait method signature
--> $DIR/foreign.rs:33:21
--> $DIR/foreign.rs:31:21
|
LL | fn bar(self) -> Arc<String> {
| ^^^^^^^^^^^
@ -26,7 +26,7 @@ LL | fn bar(self) -> Arc<String> {
= note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
= note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
note: the lint level is defined here
--> $DIR/foreign.rs:31:12
--> $DIR/foreign.rs:29:12
|
LL | #[warn(refining_impl_trait)]
| ^^^^^^^^^^^^^^^^^^^

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
use std::fmt::Display;
use std::ops::Deref;

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
pub trait Foo {
fn f() -> Box<impl Sized>;
}

View File

@ -1,7 +1,5 @@
// issue: 113903
#![feature(lint_reasons)]
use std::ops::Deref;
pub trait Tr {

View File

@ -1,5 +1,5 @@
error[E0412]: cannot find type `Missing` in this scope
--> $DIR/rpitit-shadowed-by-missing-adt.rs:8:35
--> $DIR/rpitit-shadowed-by-missing-adt.rs:6:35
|
LL | fn w() -> impl Deref<Target = Missing<impl Sized>>;
| ^^^^^^^ not found in this scope

View File

@ -1,5 +1,5 @@
error[E0623]: lifetime mismatch
--> $DIR/signature-mismatch.rs:79:10
--> $DIR/signature-mismatch.rs:77:10
|
LL | &'a self,
| -------- this parameter and the return type are declared with different lifetimes...

View File

@ -2,8 +2,6 @@
//@ revisions: success failure
//@[success] check-pass
#![feature(lint_reasons)]
use std::future::Future;
pub trait Captures<'a> {}

View File

@ -1,7 +1,6 @@
//@ check-pass
#![feature(specialization)]
#![feature(lint_reasons)]
#![allow(incomplete_features)]
pub trait Foo {

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
use std::fmt::Display;
pub trait Foo {

View File

@ -13,6 +13,11 @@ warning[E0602]: unknown lint: `foo_qux`
= note: requested on the command line with `--force-warn foo_qux`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: 3 warnings emitted
warning[E0602]: unknown lint: `foo_qux`
|
= note: requested on the command line with `--force-warn foo_qux`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: 4 warnings emitted
For more information about this error, try `rustc --explain E0602`.

View File

@ -7,7 +7,6 @@
// it also checks that the `dead_code` lint is also *NOT* emited
// for `bar` as it's suppresed by the `#[expect]` on `bar`
#![feature(lint_reasons)]
#![warn(dead_code)] // to override compiletest
fn bar() {}

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/allow-or-expect-dead_code-114557-2.rs:15:10
--> $DIR/allow-or-expect-dead_code-114557-2.rs:14:10
|
LL | #[expect(dead_code)]
| ^^^^^^^^^

View File

@ -3,7 +3,6 @@
// this test makes sure that the `unfulfilled_lint_expectations` lint
// is being emited for `foo` as foo is not dead code, it's pub
#![feature(lint_reasons)]
#![warn(dead_code)] // to override compiletest
#[expect(dead_code)]

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/allow-or-expect-dead_code-114557-3.rs:9:10
--> $DIR/allow-or-expect-dead_code-114557-3.rs:8:10
|
LL | #[expect(dead_code)]
| ^^^^^^^^^

View File

@ -4,7 +4,6 @@
// this test checks that no matter if we put #[allow(dead_code)]
// or #[expect(dead_code)], no warning is being emited
#![feature(lint_reasons)]
#![warn(dead_code)] // to override compiletest
fn f() {}

View File

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
//@ check-pass
// Empty (and reason-only) lint attributes are legal—although we may want to

View File

@ -26,5 +26,10 @@ LL | #[deny(warnings)]
| ^^^^^^^^
= note: `#[deny(unused_variables)]` implied by `#[deny(warnings)]`
error: aborting due to 4 previous errors
error: lint `raw_pointer_derive` has been removed: using derive with raw pointers is ok
|
= note: requested on the command line with `-D raw_pointer_derive`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 5 previous errors

View File

@ -26,5 +26,10 @@ LL | #[deny(warnings)]
| ^^^^^^^^
= note: `#[deny(unused_variables)]` implied by `#[deny(warnings)]`
error: aborting due to 1 previous error; 3 warnings emitted
warning: lint `raw_pointer_derive` has been removed: using derive with raw pointers is ok
|
= note: requested on the command line with `-D raw_pointer_derive`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 1 previous error; 4 warnings emitted

View File

@ -29,5 +29,11 @@ LL | #[deny(unused)]
| ^^^^^^
= note: `#[deny(unused_variables)]` implied by `#[deny(unused)]`
error: aborting due to 4 previous errors
error: lint `bare_trait_object` has been renamed to `bare_trait_objects`
|
= help: use the new name `bare_trait_objects`
= note: requested on the command line with `-D bare_trait_object`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 5 previous errors

View File

@ -29,5 +29,11 @@ LL | #[deny(unused)]
| ^^^^^^
= note: `#[deny(unused_variables)]` implied by `#[deny(unused)]`
error: aborting due to 1 previous error; 3 warnings emitted
warning: lint `bare_trait_object` has been renamed to `bare_trait_objects`
|
= help: use the new name `bare_trait_objects`
= note: requested on the command line with `-D bare_trait_object`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 1 previous error; 4 warnings emitted

View File

@ -45,5 +45,15 @@ LL | pub const PUB_FOO: u64 = 1;
| |
| help: try a static value: `pub static`
error: aborting due to 2 previous errors; 6 warnings emitted
warning: lint `private_no_mangle_fns` has been removed: no longer a warning, `#[no_mangle]` functions always exported
|
= note: requested on the command line with `-F private_no_mangle_fns`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: lint `private_no_mangle_statics` has been removed: no longer a warning, `#[no_mangle]` statics always exported
|
= note: requested on the command line with `-F private_no_mangle_statics`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 2 previous errors; 8 warnings emitted

View File

@ -30,6 +30,17 @@ error[E0602]: unknown lint: `dead_cod`
= note: requested on the command line with `-D dead_cod`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 6 previous errors
error[E0602]: unknown lint: `bogus`
|
= note: requested on the command line with `-D bogus`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0602]: unknown lint: `dead_cod`
|
= help: did you mean: `dead_code`
= note: requested on the command line with `-D dead_cod`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 8 previous errors
For more information about this error, try `rustc --explain E0602`.

View File

@ -30,6 +30,17 @@ warning[E0602]: unknown lint: `dead_cod`
= note: requested on the command line with `-D dead_cod`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: 6 warnings emitted
warning[E0602]: unknown lint: `bogus`
|
= note: requested on the command line with `-D bogus`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning[E0602]: unknown lint: `dead_cod`
|
= help: did you mean: `dead_code`
= note: requested on the command line with `-D dead_cod`
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: 8 warnings emitted
For more information about this error, try `rustc --explain E0602`.

View File

@ -1,7 +1,5 @@
//@ compile-flags: -Zdeduplicate-diagnostics=yes
#![feature(lint_reasons)]
#![warn(absolute_paths_not_starting_with_crate, reason = 0)]
//~^ ERROR malformed lint attribute
//~| NOTE reason must be a string literal

View File

@ -1,47 +1,47 @@
error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:5:58
--> $DIR/reasons-erroneous.rs:3:58
|
LL | #![warn(absolute_paths_not_starting_with_crate, reason = 0)]
| ^ reason must be a string literal
error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:8:40
--> $DIR/reasons-erroneous.rs:6:40
|
LL | #![warn(anonymous_parameters, reason = b"consider these, for we have condemned them")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reason must be a string literal
error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:11:29
--> $DIR/reasons-erroneous.rs:9:29
|
LL | #![warn(bare_trait_objects, reasons = "leaders to no sure land, guides their bearings lost")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bad attribute argument
error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:14:23
--> $DIR/reasons-erroneous.rs:12:23
|
LL | #![warn(box_pointers, blerp = "or in league with robbers have reversed the signposts")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bad attribute argument
error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:17:36
--> $DIR/reasons-erroneous.rs:15:36
|
LL | #![warn(elided_lifetimes_in_paths, reason("disrespectful to ancestors", "irresponsible to heirs"))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bad attribute argument
error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:20:44
--> $DIR/reasons-erroneous.rs:18:44
|
LL | #![warn(ellipsis_inclusive_range_patterns, reason = "born barren", reason = "a freak growth")]
| ^^^^^^^^^^^^^^^^^^^^^^ reason in lint attribute must come last
error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:23:25
--> $DIR/reasons-erroneous.rs:21:25
|
LL | #![warn(keyword_idents, reason = "root in rubble", macro_use_extern_crate)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ reason in lint attribute must come last
warning: unknown lint: `reason`
--> $DIR/reasons-erroneous.rs:26:39
--> $DIR/reasons-erroneous.rs:24:39
|
LL | #![warn(missing_copy_implementations, reason)]
| ^^^^^^

View File

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
// If you turn off deduplicate diagnostics (which rustc turns on by default but
// compiletest turns off when it runs ui tests), then the errors are
// (unfortunately) repeated here because the checking is done as we read in the

View File

@ -1,5 +1,5 @@
error[E0453]: allow(unsafe_code) incompatible with previous forbid
--> $DIR/reasons-forbidden.rs:25:13
--> $DIR/reasons-forbidden.rs:23:13
|
LL | unsafe_code,
| ----------- `forbid` level set here
@ -10,7 +10,7 @@ LL | #[allow(unsafe_code)]
= note: our errors & omissions insurance policy doesn't cover unsafe Rust
error: usage of an `unsafe` block
--> $DIR/reasons-forbidden.rs:29:5
--> $DIR/reasons-forbidden.rs:27:5
|
LL | / unsafe {
LL | |
@ -21,7 +21,7 @@ LL | | }
|
= note: our errors & omissions insurance policy doesn't cover unsafe Rust
note: the lint level is defined here
--> $DIR/reasons-forbidden.rs:14:5
--> $DIR/reasons-forbidden.rs:12:5
|
LL | unsafe_code,
| ^^^^^^^^^^^

View File

@ -1,6 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(elided_lifetimes_in_paths,
//~^ NOTE the lint level is defined here
reason = "explicit anonymous lifetimes aid reasoning about ownership")]

View File

@ -1,5 +1,5 @@
warning: hidden lifetime parameters in types are deprecated
--> $DIR/reasons.rs:20:34
--> $DIR/reasons.rs:19:34
|
LL | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
| -----^^^^^^^^^
@ -8,7 +8,7 @@ LL | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
= note: explicit anonymous lifetimes aid reasoning about ownership
note: the lint level is defined here
--> $DIR/reasons.rs:4:9
--> $DIR/reasons.rs:3:9
|
LL | #![warn(elided_lifetimes_in_paths,
| ^^^^^^^^^^^^^^^^^^^^^^^^^
@ -18,7 +18,7 @@ LL | fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
| ++++
warning: variable `Social_exchange_psychology` should have a snake case name
--> $DIR/reasons.rs:30:9
--> $DIR/reasons.rs:29:9
|
LL | let Social_exchange_psychology = CheaterDetectionMechanism {};
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case (notice the capitalization): `social_exchange_psychology`
@ -26,7 +26,7 @@ LL | let Social_exchange_psychology = CheaterDetectionMechanism {};
= note: people shouldn't have to change their usual style habits
to contribute to our project
note: the lint level is defined here
--> $DIR/reasons.rs:8:5
--> $DIR/reasons.rs:7:5
|
LL | nonstandard_style,
| ^^^^^^^^^^^^^^^^^

View File

@ -1,5 +1,4 @@
//@ check-pass
#![feature(lint_reasons)]
#[expect(drop_bounds)]
fn trigger_rustc_lints<T: Drop>() {

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
// This expect attribute should catch all lint triggers

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
#![expect(unused_mut)]

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/crate_level_expect.rs:7:11
--> $DIR/crate_level_expect.rs:5:11
|
LL | #![expect(unused_mut)]
| ^^^^^^^^^^

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
macro_rules! expect_inside_macro {

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused_variables)]
macro_rules! trigger_unused_variables_macro {

View File

@ -1,5 +1,5 @@
warning: unused variable: `x`
--> $DIR/expect_lint_from_macro.rs:9:13
--> $DIR/expect_lint_from_macro.rs:7:13
|
LL | let x = 0;
| ^ help: if this is intentional, prefix it with an underscore: `_x`
@ -8,14 +8,14 @@ LL | trigger_unused_variables_macro!();
| --------------------------------- in this macro invocation
|
note: the lint level is defined here
--> $DIR/expect_lint_from_macro.rs:5:9
--> $DIR/expect_lint_from_macro.rs:3:9
|
LL | #![warn(unused_variables)]
| ^^^^^^^^^^^^^^^^
= note: this warning originates in the macro `trigger_unused_variables_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
warning: unused variable: `x`
--> $DIR/expect_lint_from_macro.rs:9:13
--> $DIR/expect_lint_from_macro.rs:7:13
|
LL | let x = 0;
| ^ help: if this is intentional, prefix it with an underscore: `_x`

View File

@ -1,9 +0,0 @@
// should error due to missing feature gate.
#![warn(unused)]
#[expect(unused)]
//~^ ERROR: the `#[expect]` attribute is an experimental feature [E0658]
fn main() {
let x = 1;
}

View File

@ -1,13 +0,0 @@
error[E0658]: the `#[expect]` attribute is an experimental feature
--> $DIR/expect_missing_feature_gate.rs:5:1
|
LL | #[expect(unused)]
| ^^^^^^^^^^^^^^^^^
|
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
// The warnings are not double triggers, they identify different unfulfilled lint

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:10:28
--> $DIR/expect_multiple_lints.rs:8:28
|
LL | #[expect(unused_variables, unused_mut, while_true)]
| ^^^^^^^^^^
@ -7,43 +7,43 @@ LL | #[expect(unused_variables, unused_mut, while_true)]
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:10:40
--> $DIR/expect_multiple_lints.rs:8:40
|
LL | #[expect(unused_variables, unused_mut, while_true)]
| ^^^^^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:19:10
--> $DIR/expect_multiple_lints.rs:17:10
|
LL | #[expect(unused_variables, unused_mut, while_true)]
| ^^^^^^^^^^^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:19:40
--> $DIR/expect_multiple_lints.rs:17:40
|
LL | #[expect(unused_variables, unused_mut, while_true)]
| ^^^^^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:28:10
--> $DIR/expect_multiple_lints.rs:26:10
|
LL | #[expect(unused_variables, unused_mut, while_true)]
| ^^^^^^^^^^^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:28:28
--> $DIR/expect_multiple_lints.rs:26:28
|
LL | #[expect(unused_variables, unused_mut, while_true)]
| ^^^^^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:36:18
--> $DIR/expect_multiple_lints.rs:34:18
|
LL | #[expect(unused, while_true)]
| ^^^^^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/expect_multiple_lints.rs:45:10
--> $DIR/expect_multiple_lints.rs:43:10
|
LL | #[expect(unused, while_true)]
| ^^^^^^

View File

@ -1,6 +1,5 @@
// ignore-tidy-linelength
#![feature(lint_reasons)]
#![warn(unused_mut)]
#[expect(

View File

@ -1,5 +1,5 @@
warning: variable does not need to be mutable
--> $DIR/expect_nested_lint_levels.rs:36:13
--> $DIR/expect_nested_lint_levels.rs:35:13
|
LL | let mut v = 0;
| ----^
@ -8,25 +8,25 @@ LL | let mut v = 0;
|
= note: this overrides the previous `expect` lint level and warns about the `unused_mut` lint here
note: the lint level is defined here
--> $DIR/expect_nested_lint_levels.rs:31:9
--> $DIR/expect_nested_lint_levels.rs:30:9
|
LL | unused_mut,
| ^^^^^^^^^^
error: unused variable: `this_is_my_function`
--> $DIR/expect_nested_lint_levels.rs:48:9
--> $DIR/expect_nested_lint_levels.rs:47:9
|
LL | let this_is_my_function = 3;
| ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_this_is_my_function`
|
note: the lint level is defined here
--> $DIR/expect_nested_lint_levels.rs:45:10
--> $DIR/expect_nested_lint_levels.rs:44:10
|
LL | #[forbid(unused_variables)]
| ^^^^^^^^^^^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/expect_nested_lint_levels.rs:7:5
--> $DIR/expect_nested_lint_levels.rs:6:5
|
LL | unused_mut,
| ^^^^^^^^^^
@ -35,7 +35,7 @@ LL | unused_mut,
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
warning: this lint expectation is unfulfilled
--> $DIR/expect_nested_lint_levels.rs:24:5
--> $DIR/expect_nested_lint_levels.rs:23:5
|
LL | unused_mut,
| ^^^^^^^^^^
@ -43,7 +43,7 @@ LL | unused_mut,
= note: this `expect` is overridden by a `warn` attribute before the `unused_mut` lint is triggered
warning: this lint expectation is unfulfilled
--> $DIR/expect_nested_lint_levels.rs:43:10
--> $DIR/expect_nested_lint_levels.rs:42:10
|
LL | #[expect(unused_variables)]
| ^^^^^^^^^^^^^^^^

View File

@ -1,5 +1,4 @@
//@ check-pass
#![feature(lint_reasons)]
#[warn(unused_variables)]

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/expect_on_fn_params.rs:9:43
--> $DIR/expect_on_fn_params.rs:8:43
|
LL | fn check_unfulfilled_expectation(#[expect(unused_variables)] used_value: u32) {
| ^^^^^^^^^^^^^^^^

View File

@ -1,5 +1,4 @@
//@ check-pass
#![feature(lint_reasons)]
//! This file tests the `#[expect]` attribute implementation for tool lints. The same
//! file is used to test clippy and rustdoc. Any changes to this file should be synced

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/expect_tool_lint_rfc_2383.rs:33:14
--> $DIR/expect_tool_lint_rfc_2383.rs:32:14
|
LL | #[expect(dead_code)]
| ^^^^^^^^^
@ -7,7 +7,7 @@ LL | #[expect(dead_code)]
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
warning: this lint expectation is unfulfilled
--> $DIR/expect_tool_lint_rfc_2383.rs:39:18
--> $DIR/expect_tool_lint_rfc_2383.rs:38:18
|
LL | #[expect(invalid_nan_comparisons)]
| ^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -1,7 +1,6 @@
//@ check-pass
// ignore-tidy-linelength
#![feature(lint_reasons)]
#![warn(unused_mut)]
#![expect(unfulfilled_lint_expectations, reason = "idk why you would expect this")]

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/expect_unfulfilled_expectation.rs:7:11
--> $DIR/expect_unfulfilled_expectation.rs:6:11
|
LL | #![expect(unfulfilled_lint_expectations, reason = "idk why you would expect this")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -9,7 +9,7 @@ LL | #![expect(unfulfilled_lint_expectations, reason = "idk why you would expect
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
warning: this lint expectation is unfulfilled
--> $DIR/expect_unfulfilled_expectation.rs:13:10
--> $DIR/expect_unfulfilled_expectation.rs:12:10
|
LL | #[expect(unfulfilled_lint_expectations, reason = "a local: idk why you would expect this")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -18,7 +18,7 @@ LL | #[expect(unfulfilled_lint_expectations, reason = "a local: idk why you woul
= note: the `unfulfilled_lint_expectations` lint can't be expected and will always produce this message
warning: this lint expectation is unfulfilled
--> $DIR/expect_unfulfilled_expectation.rs:18:14
--> $DIR/expect_unfulfilled_expectation.rs:17:14
|
LL | #[expect(unused_mut, reason = "this expectation will create a diagnostic with the default lint level")]
| ^^^^^^^^^^
@ -26,7 +26,7 @@ LL | #[expect(unused_mut, reason = "this expectation will create a diagnosti
= note: this expectation will create a diagnostic with the default lint level
warning: this lint expectation is unfulfilled
--> $DIR/expect_unfulfilled_expectation.rs:25:22
--> $DIR/expect_unfulfilled_expectation.rs:24:22
|
LL | #[expect(unused, unfulfilled_lint_expectations, reason = "the expectation for `unused` should be fulfilled")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -1,7 +1,6 @@
//@ check-pass
//@ incremental
#![feature(lint_reasons)]
#![warn(unused)]
struct OneUnused;

View File

@ -1,7 +1,5 @@
//@ compile-flags: -Zdeduplicate-diagnostics=yes
#![feature(lint_reasons)]
#[forbid(unused_variables)]
//~^ NOTE `forbid` level set here
#[expect(unused_variables)]

View File

@ -1,5 +1,5 @@
error[E0453]: expect(unused_variables) incompatible with previous forbid
--> $DIR/expect_with_forbid.rs:7:10
--> $DIR/expect_with_forbid.rs:5:10
|
LL | #[forbid(unused_variables)]
| ---------------- `forbid` level set here
@ -8,7 +8,7 @@ LL | #[expect(unused_variables)]
| ^^^^^^^^^^^^^^^^ overruled by previous forbid
error[E0453]: expect(while_true) incompatible with previous forbid
--> $DIR/expect_with_forbid.rs:15:10
--> $DIR/expect_with_forbid.rs:13:10
|
LL | #[forbid(while_true)]
| ---------- `forbid` level set here
@ -17,13 +17,13 @@ LL | #[expect(while_true)]
| ^^^^^^^^^^ overruled by previous forbid
error: denote infinite loops with `loop { ... }`
--> $DIR/expect_with_forbid.rs:22:5
--> $DIR/expect_with_forbid.rs:20:5
|
LL | while true {}
| ^^^^^^^^^^ help: use `loop`
|
note: the lint level is defined here
--> $DIR/expect_with_forbid.rs:12:10
--> $DIR/expect_with_forbid.rs:10:10
|
LL | #[forbid(while_true)]
| ^^^^^^^^^^

View File

@ -1,6 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
#![expect(unused_variables, reason = "<This should fail and display this reason>")]

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/expect_with_reason.rs:6:11
--> $DIR/expect_with_reason.rs:5:11
|
LL | #![expect(unused_variables, reason = "<This should fail and display this reason>")]
| ^^^^^^^^^^^^^^^^

View File

@ -3,8 +3,6 @@
//@ compile-flags: --force-warn unused_mut
//@ check-pass
#![feature(lint_reasons)]
fn expect_early_pass_lint() {
#[expect(while_true)]
while true {

View File

@ -1,5 +1,5 @@
warning: unused variable: `x`
--> $DIR/force_warn_expected_lints_fulfilled.rs:20:9
--> $DIR/force_warn_expected_lints_fulfilled.rs:18:9
|
LL | let x = 2;
| ^ help: if this is intentional, prefix it with an underscore: `_x`
@ -7,13 +7,13 @@ LL | let x = 2;
= note: requested on the command line with `--force-warn unused-variables`
warning: unused variable: `fox_name`
--> $DIR/force_warn_expected_lints_fulfilled.rs:28:9
--> $DIR/force_warn_expected_lints_fulfilled.rs:26:9
|
LL | let fox_name = "Sir Nibbles";
| ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fox_name`
warning: variable does not need to be mutable
--> $DIR/force_warn_expected_lints_fulfilled.rs:32:9
--> $DIR/force_warn_expected_lints_fulfilled.rs:30:9
|
LL | let mut what_does_the_fox_say = "*ding* *deng* *dung*";
| ----^^^^^^^^^^^^^^^^^^^^^
@ -23,13 +23,13 @@ LL | let mut what_does_the_fox_say = "*ding* *deng* *dung*";
= note: requested on the command line with `--force-warn unused-mut`
warning: unused variable: `this_should_fulfill_the_expectation`
--> $DIR/force_warn_expected_lints_fulfilled.rs:43:9
--> $DIR/force_warn_expected_lints_fulfilled.rs:41:9
|
LL | let this_should_fulfill_the_expectation = "The `#[allow]` has no power here";
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_this_should_fulfill_the_expectation`
warning: denote infinite loops with `loop { ... }`
--> $DIR/force_warn_expected_lints_fulfilled.rs:10:5
--> $DIR/force_warn_expected_lints_fulfilled.rs:8:5
|
LL | while true {
| ^^^^^^^^^^ help: use `loop`

View File

@ -3,8 +3,6 @@
//@ compile-flags: --force-warn unused_mut
//@ check-pass
#![feature(lint_reasons)]
fn expect_early_pass_lint(terminate: bool) {
#[expect(while_true)]
//~^ WARNING this lint expectation is unfulfilled [unfulfilled_lint_expectations]

View File

@ -1,5 +1,5 @@
warning: unused variable: `this_should_not_fulfill_the_expectation`
--> $DIR/force_warn_expected_lints_unfulfilled.rs:40:9
--> $DIR/force_warn_expected_lints_unfulfilled.rs:38:9
|
LL | let this_should_not_fulfill_the_expectation = "maybe";
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_this_should_not_fulfill_the_expectation`
@ -7,7 +7,7 @@ LL | let this_should_not_fulfill_the_expectation = "maybe";
= note: requested on the command line with `--force-warn unused-variables`
warning: this lint expectation is unfulfilled
--> $DIR/force_warn_expected_lints_unfulfilled.rs:9:14
--> $DIR/force_warn_expected_lints_unfulfilled.rs:7:14
|
LL | #[expect(while_true)]
| ^^^^^^^^^^
@ -15,7 +15,7 @@ LL | #[expect(while_true)]
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
warning: this lint expectation is unfulfilled
--> $DIR/force_warn_expected_lints_unfulfilled.rs:17:10
--> $DIR/force_warn_expected_lints_unfulfilled.rs:15:10
|
LL | #[expect(unused_variables, reason="<this should fail and display this reason>")]
| ^^^^^^^^^^^^^^^^
@ -23,13 +23,13 @@ LL | #[expect(unused_variables, reason="<this should fail and display this reaso
= note: <this should fail and display this reason>
warning: this lint expectation is unfulfilled
--> $DIR/force_warn_expected_lints_unfulfilled.rs:24:10
--> $DIR/force_warn_expected_lints_unfulfilled.rs:22:10
|
LL | #[expect(unused)]
| ^^^^^^
warning: this lint expectation is unfulfilled
--> $DIR/force_warn_expected_lints_unfulfilled.rs:36:10
--> $DIR/force_warn_expected_lints_unfulfilled.rs:34:10
|
LL | #[expect(unused)]
| ^^^^^^

View File

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
fn expect_early_pass_lints() {
#[expect(while_true)]
while true {

View File

@ -1,6 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
#[expect(unused_variables)]

View File

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
#![deny(unused_attributes)]
#[allow(reason = "I want to allow something")]//~ ERROR unused attribute

View File

@ -1,18 +1,18 @@
error: unused attribute
--> $DIR/lint-attribute-only-with-reason.rs:5:1
--> $DIR/lint-attribute-only-with-reason.rs:3:1
|
LL | #[allow(reason = "I want to allow something")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove this attribute
|
= note: attribute `allow` without any lints has no effect
note: the lint level is defined here
--> $DIR/lint-attribute-only-with-reason.rs:3:9
--> $DIR/lint-attribute-only-with-reason.rs:1:9
|
LL | #![deny(unused_attributes)]
| ^^^^^^^^^^^^^^^^^
error: unused attribute
--> $DIR/lint-attribute-only-with-reason.rs:6:1
--> $DIR/lint-attribute-only-with-reason.rs:4:1
|
LL | #[expect(reason = "I don't know what I'm waiting for")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove this attribute
@ -20,7 +20,7 @@ LL | #[expect(reason = "I don't know what I'm waiting for")]
= note: attribute `expect` without any lints has no effect
error: unused attribute
--> $DIR/lint-attribute-only-with-reason.rs:7:1
--> $DIR/lint-attribute-only-with-reason.rs:5:1
|
LL | #[warn(reason = "This should be warn by default")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove this attribute
@ -28,7 +28,7 @@ LL | #[warn(reason = "This should be warn by default")]
= note: attribute `warn` without any lints has no effect
error: unused attribute
--> $DIR/lint-attribute-only-with-reason.rs:8:1
--> $DIR/lint-attribute-only-with-reason.rs:6:1
|
LL | #[deny(reason = "All listed lints are denied")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove this attribute
@ -36,7 +36,7 @@ LL | #[deny(reason = "All listed lints are denied")]
= note: attribute `deny` without any lints has no effect
error: unused attribute
--> $DIR/lint-attribute-only-with-reason.rs:9:1
--> $DIR/lint-attribute-only-with-reason.rs:7:1
|
LL | #[forbid(reason = "Just some reason")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove this attribute

View File

@ -1,6 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
#[warn(unused_variables)]

View File

@ -1,5 +1,5 @@
warning: this lint expectation is unfulfilled
--> $DIR/multiple_expect_attrs.rs:7:10
--> $DIR/multiple_expect_attrs.rs:6:10
|
LL | #[expect(unused_variables)]
| ^^^^^^^^^^^^^^^^

View File

@ -2,8 +2,6 @@
//@ check-pass
//@ compile-flags: -Z unpretty=expanded
#![feature(lint_reasons)]
// This `expect` will create an expectation with an unstable expectation id
#[expect(while_true)]
fn create_early_lint_pass_expectation() {

View File

@ -1,14 +1,12 @@
#![feature(prelude_import)]
#![no_std]
// This ensures that ICEs like rust#94953 don't happen
//@ check-pass
//@ compile-flags: -Z unpretty=expanded
#![feature(lint_reasons)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
// This ensures that ICEs like rust#94953 don't happen
//@ check-pass
//@ compile-flags: -Z unpretty=expanded
// This `expect` will create an expectation with an unstable expectation id
#[expect(while_true)]

View File

@ -2,6 +2,5 @@
//@ compile-flags: -Dunused_attributes
#![deny(unused_crate_dependencies)]
#![feature(lint_reasons)]
fn main() {}

View File

@ -6,7 +6,7 @@
//@ build-pass
#![no_core]
#![crate_type = "rlib"]
#![feature(intrinsics, rustc_attrs, no_core, lang_items, staged_api, lint_reasons)]
#![feature(intrinsics, rustc_attrs, no_core, lang_items, staged_api)]
#![stable(feature = "test", since = "1.0.0")]
// Supporting minimal rust core code