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 84a24e725c6..a0d7e8f7a35 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 @@ -77,6 +77,9 @@ val PsiElement.childrenWithLeaves: Sequence * Extracts node's element type */ val PsiElement.elementType: IElementType + get() = elementTypeOrNull!! + +val PsiElement.elementTypeOrNull: IElementType? // XXX: be careful not to switch to AST get() = if (this is RsFile) RsFileStub.Type else PsiUtilCore.getElementType(this) @@ -304,7 +307,7 @@ inline val > StubBasedPsiElement.greenStub: T? get() = (this as? StubBasedPsiElementBase)?.greenStub fun PsiElement.isKeywordLike(): Boolean { - return when (elementType) { + return when (elementTypeOrNull) { in RS_KEYWORDS, RsElementTypes.BOOL_LITERAL -> true RsElementTypes.IDENTIFIER -> { diff --git a/src/test/kotlin/org/rust/ide/docs/RsQuickDocumentationTest.kt b/src/test/kotlin/org/rust/ide/docs/RsQuickDocumentationTest.kt index 41bba8058e2..4bbe09e9f96 100644 --- a/src/test/kotlin/org/rust/ide/docs/RsQuickDocumentationTest.kt +++ b/src/test/kotlin/org/rust/ide/docs/RsQuickDocumentationTest.kt @@ -1336,6 +1336,14 @@ class RsQuickDocumentationTest : RsDocumentationProviderTest() {

Some docs

""") + // https://github.com/intellij-rust/intellij-rust/issues/8732 + fun `test do not throw exceptions on fake psi elements`() = doTest(""" + fn main() { + let s = "http://localhost:8080"; + //^ + } + """, null) + private fun doTest(@Language("Rust") code: String, @Language("Html") expected: String?) = doTest(code, expected, block = RsDocumentationProvider::generateDoc)