private_interfaces not linting RPITIT (original) (raw)
Code
trait Bar {}
pub trait Foo { fn foo() -> impl Bar; }
fn main() {}
Current output
Empty output with no warnings.
Desired output
warning: trait Bar is more private than the item Foo::foo
--> foo.rs:4:1
|
4 | fn foo() -> impl Bar;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ associated function Foo::foo is reachable at visibility pub
|
note: but trait Bar is only usable at visibility pub(crate)
--> foo.rs:1:1
|
1 | trait Bar {}
| ^^^^^^^^^
= note: #[warn(private_interfaces)] on by default
warning: 1 warning emitted
Rationale and extra context
No response
Other cases
Both using a concrete type or using RPIT in a method outside traits produce correct lints:
struct X;
pub trait Foo { fn foo() -> X; }
produces
warning: type X is more private than the item Foo::foo
trait Bar {} impl Bar for () {}
fn foo() -> impl Bar {}
Produces
warning: trait Bar is more private than the item foo
Rust Version
rustc 1.90.0-nightly (5adb489a8 2025-07-05) binary: rustc commit-hash: 5adb489a8034f7b56b29f3b28af0813c866f679c commit-date: 2025-07-05 host: x86_64-unknown-linux-gnu release: 1.90.0-nightly LLVM version: 20.1.7
Anything else?
No response