Skip to content

[Experimental] <T as Into<T>>::into lint#129249

Open
estebank wants to merge 31 commits into
rust-lang:mainfrom
estebank:useless-into
Open

[Experimental] <T as Into<T>>::into lint#129249
estebank wants to merge 31 commits into
rust-lang:mainfrom
estebank:useless-into

Conversation

@estebank
Copy link
Copy Markdown
Contributor

@estebank estebank commented Aug 18, 2024

View all comments

Running crater to see how common that pattern is. The Lint would have to be at most warn-by-default because there are a handful of cases detected that are actually perfectly reasonable (type aliases with per-platform cfg, or macros) which are now at best half-heartedly handled.

I've detected a handful of cases where we're calling .into() unnecessarily in the rustc codebase as well, and changed those.

CC #127343.

@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented Aug 18, 2024

r? @chenyukang

rustbot has assigned @chenyukang.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added O-unix Operating system: Unix-like S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels Aug 18, 2024
@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented Aug 18, 2024

Some changes occurred to the CTFE / Miri engine

cc @rust-lang/miri

Some changes occurred in src/tools/clippy

cc @rust-lang/clippy

@estebank
Copy link
Copy Markdown
Contributor Author

@bors try @craterbot check

@estebank
Copy link
Copy Markdown
Contributor Author

@bors try

@bors

This comment was marked as outdated.

Comment thread compiler/rustc_lint/src/builtin.rs
@estebank
Copy link
Copy Markdown
Contributor Author

@bors try

@bors
Copy link
Copy Markdown
Collaborator

bors commented Aug 18, 2024

⌛ Trying commit 2aaca93 with merge 622c05b...

bors added a commit to rust-lang-ci/rust that referenced this pull request Aug 18, 2024
[Experimental] `<T as Into<T>>::into` lint

Running crater to see how common that pattern is. The Lint would have to be at most warn-by-default because there are a handful of cases detected that are actually perfectly reasonable (`type` aliases with per-platform `cfg`, or macros) which are now at best half-heartedly handled.

I've detected a handful of cases where we're calling `.into()` unnecessarily in the `rustc` codebase as well, and changed those.
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Copy Markdown
Collaborator

bors commented Aug 18, 2024

💔 Test failed - checks-actions

@bors bors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2024
@matthiaskrgr
Copy link
Copy Markdown
Member

matthiaskrgr commented Aug 18, 2024

🤔 looks like you are reimplementing a subset of https://rust-lang.github.io/rust-clippy/master/index.html#/useless_conversion ?

edit: spoiler
at 21:37:58 ❯ ./x.py clippy -Aclippy::all -Wclippy::useless_conversion
Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.04s
Linting stage0 library {alloc, core, panic_abort, panic_unwind, proc_macro, std, sysroot, test, unwind} (x86_64-unknown-linux-gnu)
   Compiling compiler_builtins v0.1.118
    Checking core v0.0.0 (/home/matthias/vcs/github/rust/library/core)
   Compiling libc v0.2.155
   Compiling memchr v2.5.0
   Compiling std v0.0.0 (/home/matthias/vcs/github/rust/library/std)
    Checking rustc-std-workspace-core v1.99.0 (/home/matthias/vcs/github/rust/library/rustc-std-workspace-core)
    Checking alloc v0.0.0 (/home/matthias/vcs/github/rust/library/alloc)
    Checking cfg-if v1.0.0
    Checking adler v1.0.2
    Checking rustc-demangle v0.1.24
    Checking unwind v0.0.0 (/home/matthias/vcs/github/rust/library/unwind)
    Checking rustc-std-workspace-alloc v1.99.0 (/home/matthias/vcs/github/rust/library/rustc-std-workspace-alloc)
    Checking panic_abort v0.0.0 (/home/matthias/vcs/github/rust/library/panic_abort)
    Checking panic_unwind v0.0.0 (/home/matthias/vcs/github/rust/library/panic_unwind)
    Checking gimli v0.29.0
    Checking hashbrown v0.14.5
    Checking object v0.36.2
    Checking miniz_oxide v0.7.4
    Checking std_detect v0.1.5 (/home/matthias/vcs/github/rust/library/stdarch/crates/std_detect)
    Checking addr2line v0.22.0
warning: useless conversion to the same type: `i32`
   --> std/src/os/unix/process.rs:333:9
    |
333 |         self.as_inner().into_raw().into()
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `self.as_inner().into_raw()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
    = note: `-D clippy::useless-conversion` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: useless conversion to the same type: `os::fd::owned::OwnedFd`
   --> std/src/os/fd/owned.rs:331:9
    |
331 |         tcp_stream.into_inner().into_socket().into_inner().into_inner().into()
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `tcp_stream.into_inner().into_socket().into_inner().into_inner()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `os::fd::owned::OwnedFd`
   --> std/src/os/fd/owned.rs:358:9
    |
358 |         tcp_listener.into_inner().into_socket().into_inner().into_inner().into()
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `tcp_listener.into_inner().into_socket().into_inner().into_inner()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `os::fd::owned::OwnedFd`
   --> std/src/os/fd/owned.rs:385:9
    |
385 |         udp_socket.into_inner().into_socket().into_inner().into_inner().into()
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `udp_socket.into_inner().into_socket().into_inner().into_inner()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `usize`
   --> std/src/sys/pal/unix/process/process_unix.rs:307:37
    |
307 |                 cvt(libc::setgroups(_g.len().try_into().unwrap(), _g.as_ptr()))?;
    |                                     ^^^^^^^^^^^^^^^^^^^
    |
    = help: consider removing `.try_into()`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `io::error::Error`
   --> std/src/sys/pal/unix/process/process_unix.rs:328:40
    |
328 | ...                   return Err(e.into());
    |                                  ^^^^^^^^ help: consider removing `.into()`: `e`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `i64`
   --> std/src/sys/pal/unix/time.rs:196:21
    |
196 |             tv_sec: self.tv_sec.try_into().ok()?,
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: consider removing `.try_into()`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `ffi::os_str::OsString`
  --> std/src/sys_common/process.rs:38:31
   |
38 |                 result.insert(k.into(), v);
   |                               ^^^^^^^^ help: consider removing `.into()`: `k`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: `std` (lib) generated 8 warnings (run `cargo clippy --fix --lib -p std` to apply 6 suggestions)
    Checking rustc-std-workspace-std v1.99.0 (/home/matthias/vcs/github/rust/library/rustc-std-workspace-std)
    Checking proc_macro v0.0.0 (/home/matthias/vcs/github/rust/library/proc_macro)
    Checking unicode-width v0.1.13
    Checking getopts v0.2.21
    Checking test v0.0.0 (/home/matthias/vcs/github/rust/library/test)
    Checking sysroot v0.0.0 (/home/matthias/vcs/github/rust/library/sysroot)
    Finished `release` profile [optimized + debuginfo] target(s) in 35.62s
Checking stage0 library artifacts (x86_64-unknown-linux-gnu)
   Compiling compiler_builtins v0.1.118
   Compiling libc v0.2.155
   Compiling memchr v2.5.0
   Compiling std v0.0.0 (/home/matthias/vcs/github/rust/library/std)
    Checking alloc v0.0.0 (/home/matthias/vcs/github/rust/library/alloc)
    Checking cfg-if v1.0.0
    Checking adler v1.0.2
    Checking rustc-demangle v0.1.24
    Checking unwind v0.0.0 (/home/matthias/vcs/github/rust/library/unwind)
    Checking rustc-std-workspace-alloc v1.99.0 (/home/matthias/vcs/github/rust/library/rustc-std-workspace-alloc)
    Checking panic_unwind v0.0.0 (/home/matthias/vcs/github/rust/library/panic_unwind)
    Checking panic_abort v0.0.0 (/home/matthias/vcs/github/rust/library/panic_abort)
    Checking gimli v0.29.0
    Checking std_detect v0.1.5 (/home/matthias/vcs/github/rust/library/stdarch/crates/std_detect)
    Checking object v0.36.2
    Checking miniz_oxide v0.7.4
    Checking hashbrown v0.14.5
    Checking addr2line v0.22.0
    Checking rustc-std-workspace-std v1.99.0 (/home/matthias/vcs/github/rust/library/rustc-std-workspace-std)
    Checking proc_macro v0.0.0 (/home/matthias/vcs/github/rust/library/proc_macro)
    Checking unicode-width v0.1.13
    Checking getopts v0.2.21
    Checking test v0.0.0 (/home/matthias/vcs/github/rust/library/test)
    Checking sysroot v0.0.0 (/home/matthias/vcs/github/rust/library/sysroot)
    Finished `release` profile [optimized + debuginfo] target(s) in 7.67s
Linting stage0 compiler {rustc-main, rustc_abi, rustc_arena, rustc_ast, rustc_ast_ir, rustc_ast_lowering, rustc_ast_passes, rustc_ast_pretty, rustc_attr, rustc_baked_icu_data, rustc_borrowck, rustc_builtin_macros, rustc_codegen_llvm, rustc_codegen_ssa, rustc_const_eval, rustc_data_structures, rustc_driver, rustc_driver_impl, rustc_error_codes, rustc_error_messages, rustc_errors, rustc_expand, rustc_feature, rustc_fluent_macro, rustc_fs_util, rustc_graphviz, rustc_hir, rustc_hir_analysis, rustc_hir_pretty, rustc_hir_typeck, rustc_incremental, rustc_index, rustc_index_macros, rustc_infer, rustc_interface, rustc_lexer, rustc_lint, rustc_lint_defs, rustc_llvm, rustc_log, rustc_macros, rustc_metadata, rustc_middle, rustc_mir_build, rustc_mir_dataflow, rustc_mir_transform, rustc_monomorphize, rustc_next_trait_solver, rustc_parse, rustc_parse_format, rustc_passes, rustc_pattern_analysis, rustc_privacy, rustc_query_impl, rustc_query_system, rustc_resolve, rustc_sanitizers, rustc_serialize, rustc_session, rustc_smir, rustc_span, rustc_symbol_mangling, rustc_target, rustc_trait_selection, rustc_traits, rustc_transmute, rustc_ty_utils, rustc_type_ir, rustc_type_ir_macros, stable_mir} (x86_64-unknown-linux-gnu)
    Checking cfg-if v1.0.0
    Checking once_cell v1.19.0
    Checking stable_deref_trait v1.2.0
    Checking smallvec v1.13.2
    Checking either v1.12.0
    Checking zerocopy v0.7.34
    Checking allocator-api2 v0.2.18
    Checking equivalent v1.0.1
    Checking bitflags v2.5.0
    Checking libc v0.2.155
    Checking crossbeam-utils v0.8.20
    Checking memchr v2.5.0
    Checking log v0.4.21
    Checking scopeguard v1.2.0
    Checking typenum v1.17.0
    Checking pin-project-lite v0.2.14
    Checking rustc-hash v1.1.0
    Checking zerofrom v0.1.4
    Checking thin-vec v0.2.13
    Checking lock_api v0.4.12
    Checking linux-raw-sys v0.4.14
    Checking arrayvec v0.7.4
    Checking tracing-core v0.1.30
    Checking psm v0.1.21
    Checking fastrand v2.1.0
    Checking yoke v0.7.4
    Checking ena v0.14.3
    Checking rustc_arena v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_arena)
    Checking elsa v1.7.1
    Checking cpufeatures v0.2.12
    Checking unicode-width v0.1.13
    Checking ahash v0.8.11
    Checking rustc_graphviz v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_graphviz)
    Checking itoa v1.0.11
    Checking rustc-stable-hash v0.1.0
    Checking scoped-tls v1.0.1
    Checking ppv-lite86 v0.2.17
    Checking crc32fast v1.4.2
    Checking zerovec v0.10.2
    Checking writeable v0.5.5
    Checking crossbeam-epoch v0.9.18
    Checking crossbeam-channel v0.5.13
    Checking litemap v0.7.3
    Checking serde v1.0.203
    Checking unicode-xid v0.2.4
    Checking unicode-properties v0.1.1
    Checking tracing v0.1.37
    Checking rustix v0.38.34
    Checking wasmparser v0.214.0
    Checking hashbrown v0.14.5
    Checking icu_locid_transform_data v1.5.0
    Checking ryu v1.0.18
    Checking thiserror v1.0.61
    Checking rustc_lexer v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_lexer)
    Checking regex-automata v0.2.0
    Checking generic-array v0.14.7
    Checking type-map v0.5.0
    Checking rustc_fs_util v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_fs_util)
    Checking self_cell v1.0.4
    Checking crossbeam-deque v0.8.5
    Checking icu_list_data v1.5.0
    Checking fluent-syntax v0.11.1
    Checking odht v0.3.1
    Checking self_cell v0.10.3
    Checking itertools v0.12.1
    Checking anstyle v1.0.7
    Checking rustc_error_codes v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_error_codes)
    Checking termcolor v1.4.1
    Checking getopts v0.2.21
    Checking memoffset v0.9.1
    Checking bitflags v1.3.2
    Checking datafrog v2.0.1
    Checking rustc_apfloat v0.2.0+llvm-462a31f5a5ab
    Checking field-offset v0.3.6
    Checking annotate-snippets v0.10.2
    Checking tinyvec_macros v0.1.1
    Checking aho-corasick v1.1.3
    Checking regex-syntax v0.7.5
    Checking static_assertions v1.1.0
    Checking tinyvec v1.6.0
    Checking adler v1.0.2
    Checking byteorder v1.5.0
    Checking block-buffer v0.10.4
    Checking crypto-common v0.1.6
    Checking polonius-engine v0.13.0
    Checking miniz_oxide v0.7.4
    Checking unicode-script v0.5.6
    Checking num_cpus v1.16.0
    Checking parking_lot_core v0.9.10
    Checking tinystr v0.7.6
    Checking digest v0.10.7
    Checking perf-event-open-sys v3.0.0
    Checking memmap2 v0.2.3
    Checking rustc-rayon-core v0.5.0
    Checking parking_lot v0.12.3
    Checking jobserver v0.1.31
    Checking stacker v0.1.15
    Checking getrandom v0.2.15
    Checking sha2 v0.10.8
    Checking md-5 v0.10.6
    Checking sha1 v0.10.6
    Checking unic-langid-impl v0.9.5
    Checking measureme v11.0.1
    Checking icu_locid v1.5.0
    Checking rand_core v0.6.4
    Checking termize v0.1.1
    Checking snap v1.1.1
    Checking flate2 v1.0.30
    Checking libloading v0.8.3
    Checking unic-langid-macros v0.9.5
    Checking rand_chacha v0.3.1
    Checking rand_xoshiro v0.6.0
    Checking unic-langid v0.9.5
    Checking regex-syntax v0.6.29
    Checking unicode-normalization v0.1.23
    Checking rustc-rayon v0.5.0
    Checking fluent-langneg v0.13.0
    Checking intl_pluralrules v7.0.2
    Checking intl-memoizer v0.5.2
    Checking rustc-demangle v0.1.24
    Checking rand v0.8.5
    Checking lazy_static v1.5.0
    Checking punycode v0.4.1
    Checking tempfile v3.10.1
    Checking leb128 v0.2.5
    Checking overload v0.1.1
    Checking sharded-slab v0.1.7
    Checking unicase v2.7.0
    Checking wasm-encoder v0.210.0
    Checking thread_local v1.1.8
    Checking nu-ansi-term v0.46.0
    Checking icu_provider v1.5.0
    Checking fluent-bundle v0.15.3
    Checking pathdiff v0.2.1
    Checking cc v1.0.99
    Checking pulldown-cmark-escape v0.11.0
    Checking rustc_llvm v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_llvm)
    Checking tracing-log v0.2.0
    Checking unicode-security v0.1.1
    Checking powerfmt v0.2.0
    Checking pulldown-cmark v0.11.0
    Checking nu-ansi-term v0.50.0
    Checking nix v0.28.0
    Checking deranged v0.3.11
    Checking icu_locid_transform v1.5.0
    Checking time-core v0.1.2
    Checking num-conv v0.1.0
    Checking twox-hash v1.6.3
    Checking shlex v1.3.0
    Checking regex-automata v0.3.7
    Checking ruzstd v0.5.0
    Checking serde_json v1.0.117
    Checking gsgdt v0.1.2
    Checking stable_mir v0.1.0-preview (/home/matthias/vcs/github/rust/compiler/stable_mir)
    Checking icu_list v1.5.0
    Checking icu_provider_adapters v1.5.0
    Checking time v0.3.36
    Checking ctrlc v3.4.4
    Checking regex-automata v0.1.10
    Checking indexmap v2.4.0
    Checking rustc_baked_icu_data v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_baked_icu_data)
    Checking matchers v0.1.0
    Checking rustc_serialize v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_serialize)
    Checking object v0.36.2
    Checking object v0.32.2
    Checking gimli v0.28.1
    Checking regex v1.9.4
    Checking rustc_index v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_index)
    Checking tracing-subscriber v0.3.18
    Checking rustc_data_structures v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_data_structures)
    Checking rustc_parse_format v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_parse_format)
    Checking tracing-tree v0.3.1
    Checking rustc_log v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_log)
    Checking rustc_span v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_span)
    Checking rustc_abi v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_abi)
    Checking thorin-dwp v0.7.0
    Checking ar_archive_writer v0.4.0
    Checking rustc_ast_ir v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_ast_ir)
    Checking rustc_feature v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_feature)
    Checking rustc_error_messages v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_error_messages)
    Checking rustc_ast v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_ast)
    Checking rustc_type_ir v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_type_ir)
    Checking rustc_target v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_target)
warning: useless conversion to the same type: `ast::StaticItem`
    --> compiler/rustc_ast/src/ast.rs:3467:43
     |
3467 |                 ItemKind::Static(Box::new(static_foreign_item.into()))
     |                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `static_foreign_item`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
     = note: `-D clippy::useless-conversion` implied by `-D warnings`
     = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: useless conversion to the same type: `ast::StaticItem`
    --> compiler/rustc_ast/src/ast.rs:3482:50
     |
3482 |                 ForeignItemKind::Static(Box::new(static_item.into()))
     |                                                  ^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `static_item`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: `rustc_ast` (lib) generated 2 warnings (run `cargo clippy --fix --lib -p rustc_ast` to apply 2 suggestions)
    Checking rustc_ast_pretty v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_ast_pretty)
    Checking rustc_next_trait_solver v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_next_trait_solver)
warning: useless conversion to the same type: `impl std::iter::Iterator<Item = <I as rustc_type_ir::Interner>::DefId>`
   --> compiler/rustc_next_trait_solver/src/solve/trait_goals.rs:878:17
    |
878 | /                 elaborate::supertrait_def_ids(self.cx(), principal_def_id)
879 | |                     .into_iter()
    | |________________________________^ help: consider removing `.into_iter()`: `elaborate::supertrait_def_ids(self.cx(), principal_def_id)`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
    = note: `-D clippy::useless-conversion` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: `rustc_next_trait_solver` (lib) generated 1 warning (run `cargo clippy --fix --lib -p rustc_next_trait_solver` to apply 1 suggestion)
    Checking rustc_hir v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_hir)
    Checking rustc_lint_defs v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_lint_defs)
    Checking rustc_hir_pretty v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_hir_pretty)
    Checking rustc_errors v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_errors)
warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
   --> compiler/rustc_errors/src/diagnostic.rs:709:20
    |
709 |         msg.extend(expected.0.into_iter());
    |                    ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `expected.0`
    |
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
   --> /home/matthias/vcs/github/rust/library/core/src/iter/traits/collect.rs:450:18
    |
450 |     fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T);
    |                  ^^^^^^^^^^^^^^^^^^^^^^
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
    = note: `-D clippy::useless-conversion` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
   --> compiler/rustc_errors/src/diagnostic.rs:712:20
    |
712 |         msg.extend(found.0.into_iter());
    |                    ^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `found.0`
    |
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
   --> /home/matthias/vcs/github/rust/library/core/src/iter/traits/collect.rs:450:18
    |
450 |     fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T);
    |                  ^^^^^^^^^^^^^^^^^^^^^^
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: `rustc_errors` (lib) generated 2 warnings (run `cargo clippy --fix --lib -p rustc_errors` to apply 2 suggestions)
    Checking rustc_session v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_session)
    Checking rustc_attr v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_attr)
    Checking rustc_query_system v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_query_system)
    Checking rustc_parse v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_parse)
    Checking rustc_middle v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_middle)
warning: useless conversion to the same type: `rustc_ast::Recovered`
    --> compiler/rustc_parse/src/parser/item.rs:1589:58
     |
1589 |                 VariantData::Struct { fields, recovered: recovered.into() }
     |                                                          ^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `recovered`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
     = note: `-D clippy::useless-conversion` implied by `-D warnings`
     = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: useless conversion to the same type: `rustc_ast::Recovered`
    --> compiler/rustc_parse/src/parser/item.rs:1673:58
     |
1673 |                 VariantData::Struct { fields, recovered: recovered.into() }
     |                                                          ^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `recovered`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `rustc_ast::Recovered`
    --> compiler/rustc_parse/src/parser/item.rs:1685:54
     |
1685 |             VariantData::Struct { fields, recovered: recovered.into() }
     |                                                      ^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `recovered`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `rustc_ast::Recovered`
    --> compiler/rustc_parse/src/parser/item.rs:1714:54
     |
1714 |             VariantData::Struct { fields, recovered: recovered.into() }
     |                                                      ^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `recovered`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: useless conversion to the same type: `rustc_ast::Recovered`
    --> compiler/rustc_parse/src/parser/item.rs:1721:54
     |
1721 |             VariantData::Struct { fields, recovered: recovered.into() }
     |                                                      ^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `recovered`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: `rustc_parse` (lib) generated 5 warnings (run `cargo clippy --fix --lib -p rustc_parse` to apply 5 suggestions)
    Checking rustc_ast_passes v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_ast_passes)
    Checking rustc_expand v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_expand)
    Checking rustc_builtin_macros v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_builtin_macros)
warning: useless conversion to the same type: `rustc_ast::BinOpKind`
    --> compiler/rustc_middle/src/ty/print/pretty.rs:1529:45
     |
1529 |                     AssocOp::from_ast_binop(binop.to_hir_binop().into()).precedence()
     |                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `binop.to_hir_binop()`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
     = note: `-D clippy::useless-conversion` implied by `-D warnings`
     = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: useless conversion to the same type: `mir::interpret::error::ErrorHandled`
   --> compiler/rustc_middle/src/ty/consts.rs:387:51
    |
387 |                     Err(err) => Err(Either::Right(err.into())),
    |                                                   ^^^^^^^^^^ help: consider removing `.into()`: `err`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: `rustc_middle` (lib) generated 2 warnings (run `cargo clippy --fix --lib -p rustc_middle` to apply 2 suggestions)
    Checking rustc_infer v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_infer)
    Checking rustc_mir_dataflow v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_mir_dataflow)
    Checking rustc_metadata v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_metadata)
    Checking rustc_pattern_analysis v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_pattern_analysis)
    Checking rustc_symbol_mangling v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_symbol_mangling)
    Checking rustc_incremental v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_incremental)
    Checking rustc_monomorphize v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_monomorphize)
    Checking rustc_ast_lowering v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_ast_lowering)
    Checking rustc_query_impl v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_query_impl)
    Checking rustc_smir v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_smir)
warning: useless conversion to the same type: `rustc_middle::ty::Const<'_>`
   --> compiler/rustc_symbol_mangling/src/v0.rs:385:25
    |
385 |                         ty::Const::from_bool(self.tcx, include_end).into(),
    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ty::Const::from_bool(self.tcx, include_end)`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
    = note: `-D clippy::useless-conversion` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: `rustc_symbol_mangling` (lib) generated 1 warning (run `cargo clippy --fix --lib -p rustc_symbol_mangling` to apply 1 suggestion)
    Checking rustc_codegen_ssa v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_codegen_ssa)
    Checking rustc_resolve v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_resolve)
    Checking rustc_transmute v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_transmute)
    Checking rustc_trait_selection v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_trait_selection)
warning: useless conversion to the same type: `rustc_middle::ty::Term<'_>`
   --> compiler/rustc_trait_selection/src/traits/project.rs:409:28
    |
409 |             return Ok(Some(result.value.into()));
    |                            ^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `result.value`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
    = note: `-D clippy::useless-conversion` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: useless conversion to the same type: `rustc_middle::ty::Term<'_>`
   --> compiler/rustc_trait_selection/src/traits/project.rs:479:21
    |
479 |             Ok(Some(result.value.into()))
    |                     ^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `result.value`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: `rustc_trait_selection` (lib) generated 2 warnings (run `cargo clippy --fix --lib -p rustc_trait_selection` to apply 2 suggestions)
    Checking rustc_lint v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_lint)
    Checking rustc_ty_utils v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_ty_utils)
    Checking rustc_const_eval v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_const_eval)
    Checking rustc_sanitizers v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_sanitizers)
    Checking rustc_hir_analysis v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_hir_analysis)
    Checking rustc_traits v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_traits)
    Checking rustc_borrowck v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_borrowck)
    Checking rustc_codegen_llvm v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_codegen_llvm)
    Checking rustc_privacy v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_privacy)
    Checking rustc_passes v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_passes)
warning: useless conversion to the same type: `interpret::place::MPlaceTy<'_>`
  --> compiler/rustc_const_eval/src/const_eval/eval_queries.rs:81:10
   |
81 |         &ret.clone().into(),
   |          ^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ret.clone()`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
   = note: `-D clippy::useless-conversion` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: useless conversion to the same type: `interpret::place::MPlaceTy<'_, <M as interpret::machine::Machine<'_>>::Provenance>`
   --> compiler/rustc_const_eval/src/interpret/call.rs:857:14
    |
857 |             &ret.into(),
    |              ^^^^^^^^^^ help: consider removing `.into()`: `ret`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

    Checking rustc_mir_build v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_mir_build)
warning: `rustc_const_eval` (lib) generated 2 warnings (run `cargo clippy --fix --lib -p rustc_const_eval` to apply 2 suggestions)
warning: useless conversion to the same type: `usize`
    --> compiler/rustc_hir_analysis/src/check/wfcheck.rs:1604:32
     |
1604 |                     param_idx: idx.try_into().unwrap(),
     |                                ^^^^^^^^^^^^^^
     |
     = help: consider removing `.try_into()`
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
     = note: `-D clippy::useless-conversion` implied by `-D warnings`
     = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: useless conversion to the same type: `usize`
    --> compiler/rustc_hir_analysis/src/check/wfcheck.rs:1613:70
     |
1613 |             Some(WellFormedLoc::Param { function: def_id, param_idx: idx.try_into().unwrap() }),
     |                                                                      ^^^^^^^^^^^^^^
     |
     = help: consider removing `.try_into()`
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion

warning: `rustc_hir_analysis` (lib) generated 2 warnings
    Checking rustc_hir_typeck v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_hir_typeck)
    Checking rustc_mir_transform v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_mir_transform)
warning: useless conversion to the same type: `usize`
    --> compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs:2536:35
     |
2536 |                 idxs_matched.push(other_idx.into());
     |                                   ^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `other_idx`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
     = note: `-D clippy::useless-conversion` implied by `-D warnings`
     = help: to override `-D warnings` add `#[allow(clippy::useless_conversion)]`

warning: `rustc_hir_typeck` (lib) generated 1 warning (run `cargo clippy --fix --lib -p rustc_hir_typeck` to apply 1 suggestion)
    Checking rustc_interface v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_interface)
    Checking rustc_driver_impl v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_driver_impl)
    Checking rustc_driver v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc_driver)
    Checking rustc-main v0.0.0 (/home/matthias/vcs/github/rust/compiler/rustc)
    Finished `release` profile [optimized + debuginfo] target(s) in 1m 22s
Build completed successfully in 0:02:07

@matthiaskrgr
Copy link
Copy Markdown
Member

looks a bit like a mix of
clippy::useless_converison let x: A = A.into()
clippy::unneccessary_cast 1_u32 as u32
clippy::redundant_clone / unnecessary_to_owned let x: String= format!("a").to_string()

@rust-log-analyzer

This comment has been minimized.

@traviscross traviscross added the S-experimental Status: Ongoing experiment that does not require reviewing and won't be merged in its current state. label Aug 18, 2024
@estebank
Copy link
Copy Markdown
Contributor Author

@matthiaskrgr I'm trying to gauge how common the root cause of the recent time breakage (a stray identity .into()) is in the ecosystem. clippy::useless_conversion is the right analogue, but that one has the same issue that I partly side-stepped in this PR of being too eager and ignoring cfgs.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented May 31, 2026

Some changes occurred in compiler/rustc_builtin_macros/src/autodiff.rs

cc @ZuseZ4

@rust-log-analyzer

This comment has been minimized.

@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented Jun 1, 2026

The Cranelift subtree was changed

cc @bjorn3

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@estebank
Copy link
Copy Markdown
Contributor Author

estebank commented Jun 1, 2026

This is a pattern that I am currently not addressing and am tempted in not addressing in the logic:

cfg_select! {
target_family = "unix" => {
mod unix;
use unix as imp;
}
target_os = "windows" => {
mod windows;
use windows as imp;
}
target_os = "uefi" => {
mod uefi;
use uefi as imp;
}
target_os = "motor" => {
mod motor;
use motor as imp;
}
_ => {
mod unsupported;
use unsupported as imp;
}
}

The modules for different platforms are behind cfg_select/cfg, re-exported with the same name, and they define different types (not just aliases). I'll need to figure out how to detect this without severely increasing the number of false-negatives. Hopefully crater will let us know how prevalent these are, but suspect there won't be that many. If I can come up with reasonable logic that would not trigger with this case, we could have a second more lenient lint that is error by default.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

estebank added a commit to estebank/rust that referenced this pull request Jun 1, 2026
While working on rust-lang#129249, encountered these cases in the codebase of calling `.into()` unecessarily. Splitting them out so that they can land independently of the lint.
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer
Copy link
Copy Markdown
Collaborator

The job aarch64-gnu-llvm-21-1 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)

8 
9 Lint checks provided by rustc:
10 
+     $NAMES  $LEVELS  $MEANINGS                                       self-type-conversion  deny     
11     $NAMES  $LEVELS  $MEANINGS
12 
13 Lint groups provided by rustc:

Note: some mismatched output was normalized before being compared
-                                                        name  default  meaning
-                                                        ----  -------  -------
-                      absolute-paths-not-starting-with-crate  allow    fully qualified paths that start with a module name instead of `crate`, `self`, or an extern crate name
-                                 ambiguous-negative-literals  allow    ambiguous negative literals operations
-                               closure-returning-async-block  allow    closure that returns `async {}` could be rewritten as an async closure
-                                     dead-code-pub-in-binary  allow    detect public items in executable crates that are never used
-                                        deprecated-in-future  allow    detects use of items that will be deprecated in a future version
-                                   deprecated-llvm-intrinsic  allow    detects uses of deprecated LLVM intrinsics
-                                        deprecated-safe-2024  allow    detects unsafe functions being used as safe functions
-                                   deref-into-dyn-supertrait  allow    `Deref` implementation with a supertrait trait object for output is shadowed by trait upcasting
-                        edition-2024-expr-fragment-specifier  allow    The `expr` fragment specifier will accept more expressions in the 2024 edition. To keep the existing behavior, use the `expr_2021` fragment specifier.
-                                   elided-lifetimes-in-paths  allow    hidden lifetime parameters in types are deprecated
-                              explicit-outlives-requirements  allow    outlives requirements can be inferred
-                                            ffi-unwind-calls  allow    call to foreign functions or function pointers with FFI-unwind ABI
-                                      fuzzy-provenance-casts  allow    a fuzzy integer to pointer cast is used
-                                              if-let-rescope  allow    `if let` assigns a shorter lifetime to temporary values being pattern-matched against in Edition 2024 and rewriting in `match` is an option to preserve the semantics up to Edition 2021
-                                     impl-trait-overcaptures  allow    `impl Trait` will capture more lifetimes than possibly intended in edition 2024
-                               impl-trait-redundant-captures  allow    redundant precise-capturing `use<...>` syntax on an `impl Trait`
-                                         keyword-idents-2018  allow    detects edition keywords being used as an identifier
-                                         keyword-idents-2024  allow    detects edition keywords being used as an identifier
-                                         let-underscore-drop  allow    non-binding let on a type that has a destructor
-                                                 linker-info  allow    linker warnings known to be informational-only and not indicative of a problem
-                                      lossy-provenance-casts  allow    a lossy pointer to integer cast is used
-                                      macro-use-extern-crate  allow    the `#[macro_use]` attribute is now deprecated in favor of using macros via the module system
-                                        meta-variable-misuse  allow    possible meta-variable misuse at macro definition
-                                missing-copy-implementations  allow    detects potentially-forgotten implementations of `Copy`
-                               missing-debug-implementations  allow    detects missing implementations of Debug
-                                                missing-docs  allow    detects missing documentation for public members
-                                    missing-unsafe-on-extern  allow    detects missing unsafe keyword on extern declarations
-                              multiple-supertrait-upcastable  allow    detect when a dyn-compatible trait has multiple supertraits
-                                            must-not-suspend  allow    use of a `#[must_not_suspend]` value across a yield point
-                                            non-ascii-idents  allow    detects non-ASCII identifiers
-                             non-exhaustive-omitted-patterns  allow    detect when patterns of types marked `non_exhaustive` are missed
-                                           redundant-imports  allow    imports that are redundant due to being imported already
-                                         redundant-lifetimes  allow    detects lifetime parameters that are redundant because they are equal to some other named lifetime
-               resolving-to-items-shadowing-supertrait-items  allow    detects when a supertrait item is shadowed by a subtrait item
-                     rust-2021-incompatible-closure-captures  allow    detects closures affected by Rust 2021 changes
-                          rust-2021-incompatible-or-patterns  allow    detects usage of old versions of or-patterns
-                      rust-2021-prefixes-incompatible-syntax  allow    identifiers that will be parsed as a prefix in Rust 2021
-                                rust-2021-prelude-collisions  allow    detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions
-                rust-2024-guarded-string-incompatible-syntax  allow    will be parsed as a guarded string in Rust 2024
-                                  rust-2024-incompatible-pat  allow    detects patterns whose meaning will change in Rust 2024
-                                rust-2024-prelude-collisions  allow    detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions
-                                  shadowing-supertrait-items  allow    detects when a supertrait item is shadowed by a subtrait item
-                                        single-use-lifetimes  allow    detects lifetime parameters that are only used once
-                                        tail-expr-drop-order  allow    Detect and warn on significant change in drop order in tail expression location
-                                               trivial-casts  allow    detects trivial casts which could be removed
-                                       trivial-numeric-casts  allow    detects trivial casts of numeric types which could be removed
-                                               unit-bindings  allow    binding is useless because it has the unit `()` type
-                                            unnameable-types  allow    effective visibility of a type is larger than the area in which it can be named
-                                   unqualified-local-imports  allow    `use` of a local item without leading `self::`, `super::`, or `crate::`
-                                             unreachable-pub  allow    `pub` items not reachable from crate root
-                                  unsafe-attr-outside-unsafe  allow    detects unsafe attributes outside of unsafe
-                                                 unsafe-code  allow    usage of `unsafe` code and other potentially unsound constructs
-                                      unsafe-op-in-unsafe-fn  allow    unsafe operations in unsafe functions without an explicit unsafe block are deprecated
-                                           unstable-features  allow    enabling unstable features
-                                   unused-crate-dependencies  allow    crate dependencies that are never used
-                                        unused-extern-crates  allow    extern crates that are never used
-                                        unused-import-braces  allow    unnecessary braces around an imported item
-                                            unused-lifetimes  allow    detects lifetime parameters that are never used
-                                          unused-macro-rules  allow    detects macro rules that were not used
-                                       unused-qualifications  allow    detects unnecessarily qualified names
-                                              unused-results  allow    unused result of an expression in a statement
-                                    variant-size-differences  allow    detects enums with widely varying variant sizes
-                                      aarch64-softfloat-neon  warn     detects code that could be affected by ABI issues on aarch64 softfloat targets
-                                    ambiguous-derive-helpers  warn     detects derive helper attributes that are ambiguous with built-in attributes
-                              ambiguous-glob-imported-traits  warn     detects uses of ambiguously glob imported traits
-                                    ambiguous-glob-reexports  warn     ambiguous glob re-exports
-                               ambiguous-import-visibilities  warn     detects certain glob imports that require reporting an ambiguity error
-                                     ambiguous-panic-imports  warn     detects ambiguous core and std panic imports
-                          ambiguous-wide-pointer-comparisons  warn     detects ambiguous wide pointer comparisons
-                                        anonymous-parameters  warn     detects anonymous parameters
-                                             array-into-iter  warn     detects calling `into_iter` on arrays in Rust 2015 and 2018
-                                            asm-sub-register  warn     using only a subset of a register for inline asm inputs
-                                           async-fn-in-trait  warn     use of `async fn` in definition of a publicly-reachable trait
-                                               bad-asm-style  warn     incorrect use of inline assembly
-                                          bare-trait-objects  warn     suggest using `dyn Trait` for trait objects
-                                       boxed-slice-into-iter  warn     detects calling `into_iter` on boxed slices in Rust 2015, 2018, and 2021
-                                   break-with-label-and-loop  warn     `break` expression with label and unlabeled loop as value expression
-                                clashing-extern-declarations  warn     detects when an extern fn has been declared with the same name but different types
-                                        coherence-leak-check  warn     distinct impls distinguished only by the leak-check code
-                                           confusable-idents  warn     detects visually confusable pairs between identifiers
-                                 const-evaluatable-unchecked  warn     detects a generic constant is used in a type without a emitting a warning
-                               const-item-interior-mutations  warn     checks for calls which mutates a interior mutable const-item
-                                         const-item-mutation  warn     detects attempts to mutate a `const` item
-                               dangling-pointers-from-locals  warn     detects returning a pointer from a local variable
-                          dangling-pointers-from-temporaries  warn     detects getting a pointer from a temporary
-                                                   dead-code  warn     detect unused, unexported items
-                                                  deprecated  warn     detects use of deprecated items
-                            deprecated-where-clause-location  warn     deprecated where clause location
-                                            double-negations  warn     detects expressions of the form `--x`
-                                         dropping-copy-types  warn     calls to `std::mem::drop` with a value that implements Copy
-                                         dropping-references  warn     calls to `std::mem::drop` with a reference instead of an owned value
-                                                 drop-bounds  warn     bounds of the form `T: Drop` are most likely incorrect
-                                  duplicate-macro-attributes  warn     duplicated attribute
-                                                    dyn-drop  warn     trait objects of the form `dyn Drop` are useless
-                           ellipsis-inclusive-range-patterns  warn     `...` range patterns are deprecated
-                               exported-private-dependencies  warn     public interface leaks type from a private dependency
-                                  float-literal-f32-fallback  warn     detects unsuffixed floating point literals whose type fallback to `f32`
-                                       forbidden-lint-groups  warn     applying forbid to lint-groups
-                                       forgetting-copy-types  warn     calls to `std::mem::forget` with a value that implements Copy
-                                       forgetting-references  warn     calls to `std::mem::forget` with a reference instead of an owned value
-                                    for-loops-over-fallibles  warn     for-looping over an `Option` or a `Result`, which is more clearly expressed as an `if let`
-                                   function-casts-as-integer  warn     casting a function into an integer
-                                    function-item-references  warn     suggest casting to a function pointer when attempting to take references to function items
-                                       hidden-glob-reexports  warn     name introduced by a private item shadows a name introduced by a public glob re-export
-                                             improper-ctypes  warn     proper use of libc types in foreign modules
-                                 improper-ctypes-definitions  warn     proper use of libc types in foreign item definitions
-                                     improper-gpu-kernel-arg  warn     GPU kernel entry points have a limited ABI
-                                         incomplete-features  warn     incomplete features that may function improperly in some or all cases
-                                          inline-no-sanitize  warn     detects incompatible use of `#[inline(always)]` and `#[sanitize(... = "off")]`
-                                   integer-to-ptr-transmutes  warn     detects integer to pointer transmutes
-                              internal-eq-trait-method-impls  warn     manual implementation of the internal `Eq::assert_receiver_is_total_eq` method
-                                           internal-features  warn     internal features are not supposed to be used
-                                      invalid-doc-attributes  warn     detects invalid `#[doc(...)]` attributes
-                                           invalid-from-utf8  warn     using a non UTF-8 literal in `std::str::from_utf8`
-                                     invalid-nan-comparisons  warn     detects invalid floating point NaN comparisons
-                                               invalid-value  warn     an invalid value is being created (such as a null reference)
-                                    irrefutable-let-patterns  warn     detects irrefutable patterns in `if let` and `while let` statements
-                                           large-assignments  warn     detects large moves or copies
-                               late-bound-lifetime-arguments  warn     detects generic lifetime arguments in path segments with late bound lifetime parameters
-                                             linker-messages  warn     warnings emitted at runtime by the target-specific linker program
-                             malformed-diagnostic-attributes  warn     detects malformed diagnostic attributes
-                        malformed-diagnostic-format-literals  warn     detects diagnostic attribute with malformed diagnostic format literals
-                                                 map-unit-fn  warn     `Iterator::map` call that discard the iterator's values
-                                mismatched-lifetime-syntaxes  warn     detects when a lifetime uses different syntax between arguments and return values
-                             misplaced-diagnostic-attributes  warn     detects diagnostic attributes that are placed on the wrong item
-                                                 missing-abi  warn     No declared ABI for extern declaration
-                              missing-gpu-kernel-export-name  warn     mangled gpu-kernel function
-                                    mixed-script-confusables  warn     detects Unicode scripts whose mixed script confusables codepoints are solely used
-                           named-arguments-used-positionally  warn     named arguments in format used positionally
-                                        non-camel-case-types  warn     types, variants, traits and type parameters should have camel case names
-                              non-contiguous-range-endpoints  warn     detects off-by-one errors with exclusive range patterns
-                                              non-fmt-panics  warn     detect single-argument panic!() invocations in which the argument is not a format string
-                                       non-local-definitions  warn     checks for non-local definitions
-                                non-shorthand-field-patterns  warn     using `Struct { x: x }` instead of `Struct { x }` in a pattern
-                                              non-snake-case  warn     variables, methods, functions, lifetime parameters and modules should have snake case names
-                                      non-upper-case-globals  warn     static constants should have uppercase identifiers
-                                            noop-method-call  warn     detects the use of well-known noop methods
-                                     no-mangle-generic-items  warn     generic items must be mangled
-                                opaque-hidden-inferred-bound  warn     detects the use of nested `impl Trait` types in associated type bounds that are not general enough
-                                 overlapping-range-endpoints  warn     detects range patterns with overlapping endpoints
-                                             path-statements  warn     path statements with no effect
-                                              private-bounds  warn     private type in secondary interface of an item
-                                          private-interfaces  warn     private type in primary interface of an item
-                          ptr-to-integer-transmute-in-consts  warn     detects pointer to integer transmutes in const functions and associated constants
-                                        redundant-semicolons  warn     detects unnecessary trailing semicolons
-                                refining-impl-trait-internal  warn     impl trait in impl method signature does not match trait method signature
-                               refining-impl-trait-reachable  warn     impl trait in impl method signature does not match trait method signature
-                                   renamed-and-removed-lints  warn     lints that have been renamed or removed
-                                repr-c-enums-larger-than-int  warn     repr(C) enums with discriminant values that do not fit into a C int
-                                     rtsan-nonblocking-async  warn     detects incompatible uses of `#[sanitize(realtime = "nonblocking")]` on async functions
-                            self-constructor-from-outer-item  warn     detect unsupported use of `Self` from outer item
-                                         special-module-name  warn     module declarations for files with a special meaning
-                                             stable-features  warn     stable features found in `#[feature]` directive
-                                             static-mut-refs  warn     creating a shared reference to mutable static
-                                    suspicious-double-ref-op  warn     suspicious call of trait method on `&&T`
-                                      tail-call-track-caller  warn     detects tail calls of functions marked with `#[track_caller]`
-                                              trivial-bounds  warn     these bounds don't depend on an type parameters
-                                           type-alias-bounds  warn     bounds in type aliases are not enforced
-                                    tyvar-behind-raw-pointer  warn     raw pointer to an inference variable
-                                         uncommon-codepoints  warn     detects uncommon Unicode codepoints in identifiers
-                                     unconditional-recursion  warn     functions that cannot return without calling themselves
-                               uncovered-param-in-projection  warn     impl contains type parameters that are not covered
-                                             unexpected-cfgs  warn     detects unexpected names and values in `#[cfg]` conditions
-                               unfulfilled-lint-expectations  warn     unfulfilled lint expectation
-                               ungated-async-fn-track-caller  warn     enabling track_caller on an async fn is a no-op unless the async_fn_track_caller feature is enabled
-                               unknown-diagnostic-attributes  warn     detects unknown diagnostic attributes
-                                               unknown-lints  warn     unrecognized lint attribute
-                                       unnameable-test-items  warn     detects an item that cannot be named being marked as `#[test_case]`
-                                      unnecessary-transmutes  warn     detects transmutes that can also be achieved by other operations
-                  unpredictable-function-pointer-comparisons  warn     detects unpredictable function pointer comparisons
-                           unreachable-cfg-select-predicates  warn     detects unreachable configuration predicates in the cfg_select macro
-                                            unreachable-code  warn     detects unreachable code paths
-                                        unreachable-patterns  warn     detects unreachable patterns
-                                    unstable-name-collisions  warn     detects name collision with an existing but unstable method
-                               unstable-syntax-pre-expansion  warn     unstable syntax can change at any point in the future, causing a hard error!
-                             unsupported-calling-conventions  warn     use of unsupported calling convention
-                                           unused-allocation  warn     detects unnecessary allocations that can be eliminated
-                                          unused-assignments  warn     detect assignments that will never be read
-                               unused-associated-type-bounds  warn     detects unused `Foo = Bar` bounds in `dyn Trait<Foo = Bar>`
-                                           unused-attributes  warn     detects attributes that were not used by the compiler
-                                               unused-braces  warn     unnecessary braces around an expression
-                                          unused-comparisons  warn     comparisons made useless by limits of the types involved
-                                         unused-doc-comments  warn     detects doc comments that aren't used by rustdoc
-                                             unused-features  warn     unused features found in crate-level `#[feature]` directives
-                                              unused-imports  warn     imports that are never used
-                                               unused-labels  warn     detects labels that are never used
-                                               unused-macros  warn     detects macros that were not used
-                                             unused-must-use  warn     unused result of a type flagged as `#[must_use]`
-                                                  unused-mut  warn     detect mut variables which don't need to be mutable
-                                               unused-parens  warn     `if`, `match`, `while` and `return` do not need parentheses
-                                               unused-unsafe  warn     unnecessary use of an `unsafe` block
-                                            unused-variables  warn     detect variables which are not used in any way
-                                         unused-visibilities  warn     detect visibility qualifiers on `const _` items
-                                     useless-ptr-null-checks  warn     useless checking of non-null-typed pointer
-                                        uses-power-alignment  warn     Structs do not follow the power alignment rule under repr(C)
-                                                    warnings  warn     mass-change the level for lints which produce warnings
-                                                  while-true  warn     suggest using `loop { }` instead of `while true { }`
-                                  ambiguous-associated-items  deny     ambiguous associated items
-                                      ambiguous-glob-imports  deny     detects certain glob imports that require reporting an ambiguity error
-                                         arithmetic-overflow  deny     arithmetic operation overflows
-                                           binary-asm-labels  deny     labels in inline assembly containing only 0 or 1 digits
-                                  bindings-with-variant-name  deny     detects pattern bindings with the same name as one of the matched variants
-                                      conflicting-repr-hints  deny     conflicts between `#[repr(..)]` hints that were previously accepted and used in practice
-                                 dangerous-implicit-autorefs  deny     implicit reference to a dereference of a raw pointer
-                            default-overrides-default-fields  deny     detect `Default` impl that should use the type's default field values
-                      dependency-on-unit-never-type-fallback  deny     never type fallback affecting unsafe function calls
-                                               deref-nullptr  deny     detects when an null pointer is dereferenced
-                                          duplicate-features  deny     duplicate features found in crate-level `#[feature]` directives
-                     elided-lifetimes-in-associated-constant  deny     elided lifetimes cannot be used in associated constants in impls
-                                   enum-intrinsics-non-enums  deny     detects calls to `core::mem::discriminant` and `core::mem::variant_count` with non-enum types
-                              explicit-builtin-cfgs-in-flags  deny     detects builtin cfgs set via the `--cfg`
-                                  ill-formed-attribute-input  deny     ill-formed attribute inputs that were previously accepted and used in practice
-                                          incomplete-include  deny     trailing content in included file
-                             ineffective-unstable-trait-impl  deny     detects `#[unstable]` on stable trait implementations for stable types
-                                     invalid-atomic-ordering  deny     usage of invalid atomic ordering in atomic operations and memory fences
-                                 invalid-from-utf8-unchecked  deny     using a non UTF-8 literal in `std::str::from_utf8_unchecked`
-                              invalid-macro-export-arguments  deny     "invalid_parameter" isn't a valid argument for `#[macro_export]`
-                                      invalid-null-arguments  deny     invalid null pointer in arguments
-                                   invalid-reference-casting  deny     casts of `&T` to `&mut T` without interior mutability
-                                  invalid-type-param-default  deny     type parameter default erroneously allowed in invalid location
-                                       legacy-derive-helpers  deny     detects derive helper attributes that are used before they are introduced
-                                         let-underscore-lock  deny     non-binding let on a synchronization lock
-                                     long-running-const-eval  deny     detects long const eval operations
-     macro-expanded-macro-exports-accessed-by-absolute-paths  deny     macro-expanded `macro_export` macros from the current crate cannot be referred to by absolute paths
-                                          mutable-transmutes  deny     transmuting &T to &mut T is undefined behavior, even if the reference is unused
-                                            named-asm-labels  deny     named labels in inline assembly
-                     never-type-fallback-flowing-into-unsafe  deny     never type fallback affecting unsafe function calls
-                                       no-mangle-const-items  deny     const items will not have their symbols exported
-                                    out-of-scope-macro-calls  deny     detects out of scope calls to `macro_rules` in key-value attributes
-                                        overflowing-literals  deny     literal out of range for its type
-                                patterns-in-fns-without-body  deny     patterns in functions without body were erroneously allowed
-                       proc-macro-derive-resolution-fallback  deny     detects proc macro derives using inaccessible names from parent modules
-                             pub-use-of-private-extern-crate  deny     detect public re-exports of private extern crates
-                             repr-transparent-non-zst-fields  deny     transparent type contains an external ZST that is marked #[non_exhaustive] or contains private fields
-                                        self-type-conversion  deny     
-                        semicolon-in-expressions-from-macros  deny     trailing semicolon in macro body used as expression
-                                          test-unstable-lint  deny     this unstable lint is only for testing
-                         text-direction-codepoint-in-comment  deny     invisible directionality-changing codepoints in comment
-                         text-direction-codepoint-in-literal  deny     detect special Unicode codepoints that affect the visual representation of text on screen, changing the direction in which text flows
-                                         unconditional-panic  deny     operation will cause a panic at runtime
-                                    undropped-manually-drops  deny     calls to `std::mem::drop` with `std::mem::ManuallyDrop` instead of it's inner value
-                                          uninhabited-static  deny     uninhabited static
-                                         unknown-crate-types  deny     unknown crate type found in `#[crate_type]` directive
-                                          useless-deprecated  deny     detects deprecation attributes with no effect
-                                     varargs-without-pattern  deny     detects usage of `...` arguments without a pattern in non-foreign items
+     $NAMES  $LEVELS  $MEANINGS                                       self-type-conversion  deny     


The actual stdout differed from the expected stdout
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args issues/issue-83883-describe-lints.rs`

error: 1 errors occurred comparing output.
status: exit status: 0
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustdoc" "/checkout/tests/rustdoc-ui/issues/issue-83883-describe-lints.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "-o" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/rustdoc-ui/issues/issue-83883-describe-lints" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Cdebuginfo=0" "-W" "help"
--- stdout -------------------------------

Available lint options:
    -W <foo>           Warn about <foo>
    -A <foo>           Allow <foo>
    -D <foo>           Deny <foo>
    -F <foo>           Forbid <foo> (deny <foo> and all attempts to override)


Lint checks provided by rustc:

                                                       name  default  meaning
                                                       ----  -------  -------
                     absolute-paths-not-starting-with-crate  allow    fully qualified paths that start with a module name instead of `crate`, `self`, or an extern crate name
                                ambiguous-negative-literals  allow    ambiguous negative literals operations
                              closure-returning-async-block  allow    closure that returns `async {}` could be rewritten as an async closure
                                    dead-code-pub-in-binary  allow    detect public items in executable crates that are never used
                                       deprecated-in-future  allow    detects use of items that will be deprecated in a future version
                                  deprecated-llvm-intrinsic  allow    detects uses of deprecated LLVM intrinsics
                                       deprecated-safe-2024  allow    detects unsafe functions being used as safe functions
                                  deref-into-dyn-supertrait  allow    `Deref` implementation with a supertrait trait object for output is shadowed by trait upcasting
                       edition-2024-expr-fragment-specifier  allow    The `expr` fragment specifier will accept more expressions in the 2024 edition. To keep the existing behavior, use the `expr_2021` fragment specifier.
                                  elided-lifetimes-in-paths  allow    hidden lifetime parameters in types are deprecated
                             explicit-outlives-requirements  allow    outlives requirements can be inferred
                                           ffi-unwind-calls  allow    call to foreign functions or function pointers with FFI-unwind ABI
                                     fuzzy-provenance-casts  allow    a fuzzy integer to pointer cast is used
                                             if-let-rescope  allow    `if let` assigns a shorter lifetime to temporary values being pattern-matched against in Edition 2024 and rewriting in `match` is an option to preserve the semantics up to Edition 2021
                                    impl-trait-overcaptures  allow    `impl Trait` will capture more lifetimes than possibly intended in edition 2024
                              impl-trait-redundant-captures  allow    redundant precise-capturing `use<...>` syntax on an `impl Trait`
                                        keyword-idents-2018  allow    detects edition keywords being used as an identifier
                                        keyword-idents-2024  allow    detects edition keywords being used as an identifier
                                        let-underscore-drop  allow    non-binding let on a type that has a destructor
                                                linker-info  allow    linker warnings known to be informational-only and not indicative of a problem
                                     lossy-provenance-casts  allow    a lossy pointer to integer cast is used
                                     macro-use-extern-crate  allow    the `#[macro_use]` attribute is now deprecated in favor of using macros via the module system
                                       meta-variable-misuse  allow    possible meta-variable misuse at macro definition
                               missing-copy-implementations  allow    detects potentially-forgotten implementations of `Copy`
                              missing-debug-implementations  allow    detects missing implementations of Debug
                                               missing-docs  allow    detects missing documentation for public members
                                   missing-unsafe-on-extern  allow    detects missing unsafe keyword on extern declarations
                             multiple-supertrait-upcastable  allow    detect when a dyn-compatible trait has multiple supertraits
                                           must-not-suspend  allow    use of a `#[must_not_suspend]` value across a yield point
                                           non-ascii-idents  allow    detects non-ASCII identifiers
                            non-exhaustive-omitted-patterns  allow    detect when patterns of types marked `non_exhaustive` are missed
                                          redundant-imports  allow    imports that are redundant due to being imported already
                                        redundant-lifetimes  allow    detects lifetime parameters that are redundant because they are equal to some other named lifetime
              resolving-to-items-shadowing-supertrait-items  allow    detects when a supertrait item is shadowed by a subtrait item
                    rust-2021-incompatible-closure-captures  allow    detects closures affected by Rust 2021 changes
                         rust-2021-incompatible-or-patterns  allow    detects usage of old versions of or-patterns
                     rust-2021-prefixes-incompatible-syntax  allow    identifiers that will be parsed as a prefix in Rust 2021
                               rust-2021-prelude-collisions  allow    detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions
               rust-2024-guarded-string-incompatible-syntax  allow    will be parsed as a guarded string in Rust 2024
                                 rust-2024-incompatible-pat  allow    detects patterns whose meaning will change in Rust 2024
                               rust-2024-prelude-collisions  allow    detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions
                                 shadowing-supertrait-items  allow    detects when a supertrait item is shadowed by a subtrait item
                                       single-use-lifetimes  allow    detects lifetime parameters that are only used once
                                       tail-expr-drop-order  allow    Detect and warn on significant change in drop order in tail expression location
                                              trivial-casts  allow    detects trivial casts which could be removed
                                      trivial-numeric-casts  allow    detects trivial casts of numeric types which could be removed
                                              unit-bindings  allow    binding is useless because it has the unit `()` type
                                           unnameable-types  allow    effective visibility of a type is larger than the area in which it can be named
                                  unqualified-local-imports  allow    `use` of a local item without leading `self::`, `super::`, or `crate::`
                                            unreachable-pub  allow    `pub` items not reachable from crate root
                                 unsafe-attr-outside-unsafe  allow    detects unsafe attributes outside of unsafe
                                                unsafe-code  allow    usage of `unsafe` code and other potentially unsound constructs
                                     unsafe-op-in-unsafe-fn  allow    unsafe operations in unsafe functions without an explicit unsafe block are deprecated
                                          unstable-features  allow    enabling unstable features
                                  unused-crate-dependencies  allow    crate dependencies that are never used
                                       unused-extern-crates  allow    extern crates that are never used
                                       unused-import-braces  allow    unnecessary braces around an imported item
                                           unused-lifetimes  allow    detects lifetime parameters that are never used
                                         unused-macro-rules  allow    detects macro rules that were not used
                                      unused-qualifications  allow    detects unnecessarily qualified names
                                             unused-results  allow    unused result of an expression in a statement
                                   variant-size-differences  allow    detects enums with widely varying variant sizes
                                     aarch64-softfloat-neon  warn     detects code that could be affected by ABI issues on aarch64 softfloat targets
                                   ambiguous-derive-helpers  warn     detects derive helper attributes that are ambiguous with built-in attributes
                             ambiguous-glob-imported-traits  warn     detects uses of ambiguously glob imported traits
                                   ambiguous-glob-reexports  warn     ambiguous glob re-exports
                              ambiguous-import-visibilities  warn     detects certain glob imports that require reporting an ambiguity error
                                    ambiguous-panic-imports  warn     detects ambiguous core and std panic imports
                         ambiguous-wide-pointer-comparisons  warn     detects ambiguous wide pointer comparisons
                                       anonymous-parameters  warn     detects anonymous parameters
                                            array-into-iter  warn     detects calling `into_iter` on arrays in Rust 2015 and 2018
                                           asm-sub-register  warn     using only a subset of a register for inline asm inputs
                                          async-fn-in-trait  warn     use of `async fn` in definition of a publicly-reachable trait
                                              bad-asm-style  warn     incorrect use of inline assembly
                                         bare-trait-objects  warn     suggest using `dyn Trait` for trait objects
                                      boxed-slice-into-iter  warn     detects calling `into_iter` on boxed slices in Rust 2015, 2018, and 2021
                                  break-with-label-and-loop  warn     `break` expression with label and unlabeled loop as value expression
                               clashing-extern-declarations  warn     detects when an extern fn has been declared with the same name but different types
                                       coherence-leak-check  warn     distinct impls distinguished only by the leak-check code
                                          confusable-idents  warn     detects visually confusable pairs between identifiers
                                const-evaluatable-unchecked  warn     detects a generic constant is used in a type without a emitting a warning
                              const-item-interior-mutations  warn     checks for calls which mutates a interior mutable const-item
                                        const-item-mutation  warn     detects attempts to mutate a `const` item
                              dangling-pointers-from-locals  warn     detects returning a pointer from a local variable
                         dangling-pointers-from-temporaries  warn     detects getting a pointer from a temporary
                                                  dead-code  warn     detect unused, unexported items
                                                 deprecated  warn     detects use of deprecated items
                           deprecated-where-clause-location  warn     deprecated where clause location
                                           double-negations  warn     detects expressions of the form `--x`
                                        dropping-copy-types  warn     calls to `std::mem::drop` with a value that implements Copy
                                        dropping-references  warn     calls to `std::mem::drop` with a reference instead of an owned value
                                                drop-bounds  warn     bounds of the form `T: Drop` are most likely incorrect
                                 duplicate-macro-attributes  warn     duplicated attribute
                                                   dyn-drop  warn     trait objects of the form `dyn Drop` are useless
                          ellipsis-inclusive-range-patterns  warn     `...` range patterns are deprecated
                              exported-private-dependencies  warn     public interface leaks type from a private dependency
                                 float-literal-f32-fallback  warn     detects unsuffixed floating point literals whose type fallback to `f32`
                                      forbidden-lint-groups  warn     applying forbid to lint-groups
                                      forgetting-copy-types  warn     calls to `std::mem::forget` with a value that implements Copy
                                      forgetting-references  warn     calls to `std::mem::forget` with a reference instead of an owned value
                                   for-loops-over-fallibles  warn     for-looping over an `Option` or a `Result`, which is more clearly expressed as an `if let`
                                  function-casts-as-integer  warn     casting a function into an integer
                                   function-item-references  warn     suggest casting to a function pointer when attempting to take references to function items
                                      hidden-glob-reexports  warn     name introduced by a private item shadows a name introduced by a public glob re-export
                                            improper-ctypes  warn     proper use of libc types in foreign modules
                                improper-ctypes-definitions  warn     proper use of libc types in foreign item definitions
                                    improper-gpu-kernel-arg  warn     GPU kernel entry points have a limited ABI
                                        incomplete-features  warn     incomplete features that may function improperly in some or all cases
                                         inline-no-sanitize  warn     detects incompatible use of `#[inline(always)]` and `#[sanitize(... = "off")]`
                                  integer-to-ptr-transmutes  warn     detects integer to pointer transmutes
                             internal-eq-trait-method-impls  warn     manual implementation of the internal `Eq::assert_receiver_is_total_eq` method
                                          internal-features  warn     internal features are not supposed to be used
                                     invalid-doc-attributes  warn     detects invalid `#[doc(...)]` attributes
                                          invalid-from-utf8  warn     using a non UTF-8 literal in `std::str::from_utf8`
                                    invalid-nan-comparisons  warn     detects invalid floating point NaN comparisons
                                              invalid-value  warn     an invalid value is being created (such as a null reference)
                                   irrefutable-let-patterns  warn     detects irrefutable patterns in `if let` and `while let` statements
                                          large-assignments  warn     detects large moves or copies
                              late-bound-lifetime-arguments  warn     detects generic lifetime arguments in path segments with late bound lifetime parameters
                                            linker-messages  warn     warnings emitted at runtime by the target-specific linker program
                            malformed-diagnostic-attributes  warn     detects malformed diagnostic attributes
                       malformed-diagnostic-format-literals  warn     detects diagnostic attribute with malformed diagnostic format literals
                                                map-unit-fn  warn     `Iterator::map` call that discard the iterator's values
                               mismatched-lifetime-syntaxes  warn     detects when a lifetime uses different syntax between arguments and return values
                            misplaced-diagnostic-attributes  warn     detects diagnostic attributes that are placed on the wrong item
                                                missing-abi  warn     No declared ABI for extern declaration
                             missing-gpu-kernel-export-name  warn     mangled gpu-kernel function
                                   mixed-script-confusables  warn     detects Unicode scripts whose mixed script confusables codepoints are solely used
                          named-arguments-used-positionally  warn     named arguments in format used positionally
                                       non-camel-case-types  warn     types, variants, traits and type parameters should have camel case names
                             non-contiguous-range-endpoints  warn     detects off-by-one errors with exclusive range patterns
                                             non-fmt-panics  warn     detect single-argument panic!() invocations in which the argument is not a format string
                                      non-local-definitions  warn     checks for non-local definitions
                               non-shorthand-field-patterns  warn     using `Struct { x: x }` instead of `Struct { x }` in a pattern
                                             non-snake-case  warn     variables, methods, functions, lifetime parameters and modules should have snake case names
                                     non-upper-case-globals  warn     static constants should have uppercase identifiers
                                           noop-method-call  warn     detects the use of well-known noop methods
                                    no-mangle-generic-items  warn     generic items must be mangled
                               opaque-hidden-inferred-bound  warn     detects the use of nested `impl Trait` types in associated type bounds that are not general enough
                                overlapping-range-endpoints  warn     detects range patterns with overlapping endpoints
                                            path-statements  warn     path statements with no effect
                                             private-bounds  warn     private type in secondary interface of an item
                                         private-interfaces  warn     private type in primary interface of an item
                         ptr-to-integer-transmute-in-consts  warn     detects pointer to integer transmutes in const functions and associated constants
                                       redundant-semicolons  warn     detects unnecessary trailing semicolons
                               refining-impl-trait-internal  warn     impl trait in impl method signature does not match trait method signature
                              refining-impl-trait-reachable  warn     impl trait in impl method signature does not match trait method signature
                                  renamed-and-removed-lints  warn     lints that have been renamed or removed
                               repr-c-enums-larger-than-int  warn     repr(C) enums with discriminant values that do not fit into a C int
                                    rtsan-nonblocking-async  warn     detects incompatible uses of `#[sanitize(realtime = "nonblocking")]` on async functions
                           self-constructor-from-outer-item  warn     detect unsupported use of `Self` from outer item
                                        special-module-name  warn     module declarations for files with a special meaning
                                            stable-features  warn     stable features found in `#[feature]` directive
                                            static-mut-refs  warn     creating a shared reference to mutable static
                                   suspicious-double-ref-op  warn     suspicious call of trait method on `&&T`
                                     tail-call-track-caller  warn     detects tail calls of functions marked with `#[track_caller]`
                                             trivial-bounds  warn     these bounds don't depend on an type parameters
                                          type-alias-bounds  warn     bounds in type aliases are not enforced
                                   tyvar-behind-raw-pointer  warn     raw pointer to an inference variable
                                        uncommon-codepoints  warn     detects uncommon Unicode codepoints in identifiers
                                    unconditional-recursion  warn     functions that cannot return without calling themselves
                              uncovered-param-in-projection  warn     impl contains type parameters that are not covered
                                            unexpected-cfgs  warn     detects unexpected names and values in `#[cfg]` conditions
                              unfulfilled-lint-expectations  warn     unfulfilled lint expectation
                              ungated-async-fn-track-caller  warn     enabling track_caller on an async fn is a no-op unless the async_fn_track_caller feature is enabled
                              unknown-diagnostic-attributes  warn     detects unknown diagnostic attributes
                                              unknown-lints  warn     unrecognized lint attribute
                                      unnameable-test-items  warn     detects an item that cannot be named being marked as `#[test_case]`
                                     unnecessary-transmutes  warn     detects transmutes that can also be achieved by other operations
                 unpredictable-function-pointer-comparisons  warn     detects unpredictable function pointer comparisons
                          unreachable-cfg-select-predicates  warn     detects unreachable configuration predicates in the cfg_select macro
                                           unreachable-code  warn     detects unreachable code paths
                                       unreachable-patterns  warn     detects unreachable patterns
                                   unstable-name-collisions  warn     detects name collision with an existing but unstable method
                              unstable-syntax-pre-expansion  warn     unstable syntax can change at any point in the future, causing a hard error!
                            unsupported-calling-conventions  warn     use of unsupported calling convention
                                          unused-allocation  warn     detects unnecessary allocations that can be eliminated
                                         unused-assignments  warn     detect assignments that will never be read
                              unused-associated-type-bounds  warn     detects unused `Foo = Bar` bounds in `dyn Trait<Foo = Bar>`
                                          unused-attributes  warn     detects attributes that were not used by the compiler
                                              unused-braces  warn     unnecessary braces around an expression
                                         unused-comparisons  warn     comparisons made useless by limits of the types involved
                                        unused-doc-comments  warn     detects doc comments that aren't used by rustdoc
                                            unused-features  warn     unused features found in crate-level `#[feature]` directives
                                             unused-imports  warn     imports that are never used
                                              unused-labels  warn     detects labels that are never used
                                              unused-macros  warn     detects macros that were not used
                                            unused-must-use  warn     unused result of a type flagged as `#[must_use]`
                                                 unused-mut  warn     detect mut variables which don't need to be mutable
                                              unused-parens  warn     `if`, `match`, `while` and `return` do not need parentheses
                                              unused-unsafe  warn     unnecessary use of an `unsafe` block
                                           unused-variables  warn     detect variables which are not used in any way
                                        unused-visibilities  warn     detect visibility qualifiers on `const _` items
                                    useless-ptr-null-checks  warn     useless checking of non-null-typed pointer
                                       uses-power-alignment  warn     Structs do not follow the power alignment rule under repr(C)
                                                   warnings  warn     mass-change the level for lints which produce warnings
                                                 while-true  warn     suggest using `loop { }` instead of `while true { }`
                                 ambiguous-associated-items  deny     ambiguous associated items
                                     ambiguous-glob-imports  deny     detects certain glob imports that require reporting an ambiguity error
                                        arithmetic-overflow  deny     arithmetic operation overflows
                                          binary-asm-labels  deny     labels in inline assembly containing only 0 or 1 digits
                                 bindings-with-variant-name  deny     detects pattern bindings with the same name as one of the matched variants
                                     conflicting-repr-hints  deny     conflicts between `#[repr(..)]` hints that were previously accepted and used in practice
                                dangerous-implicit-autorefs  deny     implicit reference to a dereference of a raw pointer
                           default-overrides-default-fields  deny     detect `Default` impl that should use the type's default field values
                     dependency-on-unit-never-type-fallback  deny     never type fallback affecting unsafe function calls
                                              deref-nullptr  deny     detects when an null pointer is dereferenced
                                         duplicate-features  deny     duplicate features found in crate-level `#[feature]` directives
                    elided-lifetimes-in-associated-constant  deny     elided lifetimes cannot be used in associated constants in impls
                                  enum-intrinsics-non-enums  deny     detects calls to `core::mem::discriminant` and `core::mem::variant_count` with non-enum types
                             explicit-builtin-cfgs-in-flags  deny     detects builtin cfgs set via the `--cfg`
                                 ill-formed-attribute-input  deny     ill-formed attribute inputs that were previously accepted and used in practice
                                         incomplete-include  deny     trailing content in included file
                            ineffective-unstable-trait-impl  deny     detects `#[unstable]` on stable trait implementations for stable types
                                    invalid-atomic-ordering  deny     usage of invalid atomic ordering in atomic operations and memory fences
                                invalid-from-utf8-unchecked  deny     using a non UTF-8 literal in `std::str::from_utf8_unchecked`
                             invalid-macro-export-arguments  deny     "invalid_parameter" isn't a valid argument for `#[macro_export]`
                                     invalid-null-arguments  deny     invalid null pointer in arguments
                                  invalid-reference-casting  deny     casts of `&T` to `&mut T` without interior mutability
                                 invalid-type-param-default  deny     type parameter default erroneously allowed in invalid location

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributes Area: Attributes (`#[…]`, `#![…]`) A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-lang Relevant to the language team WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver)

Projects

None yet

Development

Successfully merging this pull request may close these issues.