From cea580bb2f0eff373ab830654e02525d0ea8bc4f Mon Sep 17 00:00:00 2001 From: Predrag Gruevski <2348618+obi1kenobi@users.noreply.github.com> Date: Mon, 19 Aug 2024 00:13:57 -0400 Subject: [PATCH] Correctly analyze sealed status of traits with multiple supertraits. (#374) (#376) --- src/adapter/tests.rs | 4 ++++ src/sealed_trait.rs | 2 +- test_crates/sealed_traits/src/lib.rs | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/adapter/tests.rs b/src/adapter/tests.rs index 72283d2b..0633cb3c 100644 --- a/src/adapter/tests.rs +++ b/src/adapter/tests.rs @@ -233,6 +233,10 @@ fn rustdoc_sealed_traits() { name: "TransitivelyTraitSealed".into(), sealed: true, }, + Output { + name: "SealedTraitWithStdSupertrait".into(), + sealed: true, + }, Output { name: "Unsealed".into(), sealed: false, diff --git a/src/sealed_trait.rs b/src/sealed_trait.rs index 47d23d95..0241293e 100644 --- a/src/sealed_trait.rs +++ b/src/sealed_trait.rs @@ -56,7 +56,7 @@ fn has_sealed_supertrait<'a>(indexed_crate: &IndexedCrate<'a>, inner: &'a Trait) // TODO: Once we have the ability to do cross-crate analysis, consider // whether this external trait is sealed. That can have // some interesting SemVer implications as well. - return false; + continue; } } } diff --git a/test_crates/sealed_traits/src/lib.rs b/test_crates/sealed_traits/src/lib.rs index 6844f610..8c1c26a4 100644 --- a/test_crates/sealed_traits/src/lib.rs +++ b/test_crates/sealed_traits/src/lib.rs @@ -12,6 +12,9 @@ pub trait DirectlyTraitSealed: private::Sealed {} /// This trait is sealed since nobody can implement its supertrait. pub trait TransitivelyTraitSealed: DirectlyTraitSealed {} +/// This trait is sealed, and happens to have more than one supertrait. +pub trait SealedTraitWithStdSupertrait: AsRef<()> + private::Sealed {} + pub trait Unsealed {} /// This trait is sealed because its argument type is pub-in-priv,