diff --git a/src/main/kotlin/org/rust/ide/annotator/RsErrorAnnotator.kt b/src/main/kotlin/org/rust/ide/annotator/RsErrorAnnotator.kt index 5e74a0ee5df..1e716437aae 100644 --- a/src/main/kotlin/org/rust/ide/annotator/RsErrorAnnotator.kt +++ b/src/main/kotlin/org/rust/ide/annotator/RsErrorAnnotator.kt @@ -27,12 +27,8 @@ import org.rust.lang.core.resolve.Namespace import org.rust.lang.core.resolve.knownItems import org.rust.lang.core.resolve.namespaces import org.rust.lang.core.resolve.ref.deepResolve -import org.rust.lang.core.types.TraitRef -import org.rust.lang.core.types.implLookup -import org.rust.lang.core.types.asTy -import org.rust.lang.core.types.inference +import org.rust.lang.core.types.* import org.rust.lang.core.types.ty.* -import org.rust.lang.core.types.type import org.rust.lang.utils.RsDiagnostic import org.rust.lang.utils.RsErrorCode import org.rust.lang.utils.addToHolder @@ -104,7 +100,7 @@ class RsErrorAnnotator : RsAnnotatorBase(), HighlightRangeExtension { it is RsTypeParameterList || it is RsFieldsOwner || it is RsForeignModItem || - it is RsRetType && it.ancestorStrict()?.implementedTrait != null + it is RsRetType && it.parent.ancestorStrict(RsAbstractable::class.java)?.implementedTrait != null // type alias and let expr are not included because // they are planned to be allowed soon } diff --git a/src/main/kotlin/org/rust/lang/core/psi/ext/PsiElement.kt b/src/main/kotlin/org/rust/lang/core/psi/ext/PsiElement.kt index 153516cdafa..858820d3964 100644 --- a/src/main/kotlin/org/rust/lang/core/psi/ext/PsiElement.kt +++ b/src/main/kotlin/org/rust/lang/core/psi/ext/PsiElement.kt @@ -70,6 +70,9 @@ val PsiElement.elementType: IElementType inline fun PsiElement.ancestorStrict(): T? = PsiTreeUtil.getParentOfType(this, T::class.java, /* strict */ true) +inline fun PsiElement.ancestorStrict(stopAt: Class): T? = + PsiTreeUtil.getParentOfType(this, T::class.java, /* strict */ true, stopAt) + inline fun PsiElement.ancestorOrSelf(): T? = PsiTreeUtil.getParentOfType(this, T::class.java, /* strict */ false) diff --git a/src/test/kotlin/org/rust/ide/annotator/RsErrorAnnotatorTest.kt b/src/test/kotlin/org/rust/ide/annotator/RsErrorAnnotatorTest.kt index edfa25883dc..592da51ed28 100644 --- a/src/test/kotlin/org/rust/ide/annotator/RsErrorAnnotatorTest.kt +++ b/src/test/kotlin/org/rust/ide/annotator/RsErrorAnnotatorTest.kt @@ -2342,6 +2342,11 @@ class RsErrorAnnotatorTest : RsAnnotatorTestBase(RsErrorAnnotator::class.java) { fn in_trait_impl_return() -> impl Debug { () } //~^ ERROR `impl Trait` not allowed outside of function and inherent method return types + + fn wrapper() { + fn in_nested_impl_return() -> impl Debug { () } + // Allowed + } } // Allowed