[markdown] IJPL-251919 Do not resolve short / non-class-like looking symbols

Merge-request: IJ-MR-216750
Merged-by: Ilia Permiashkin <ilia.permiashkin@jetbrains.com>
(cherry picked from commit c00ae44ee37ecb44b2d1e3edd96566310bde45f1)

[markdown] IJPL-243447 Disallow any short symbols

Merge-request: IJ-MR-211255
Merged-by: Ilia Permiashkin <ilia.permiashkin@jetbrains.com>
(cherry picked from commit 4172552a0f575b010e63711d40c0888927d60405)


Merge-request: IJ-MR-218602
Merged-by: Ilia Permiashkin <ilia.permiashkin@jetbrains.com>

GitOrigin-RevId: 7fa28263e162adb07752f89bd51d897ff2a6ab6b
This commit is contained in:
Ilia Permiashkin
2026-08-17 18:27:29 +00:00
committed by intellij-monorepo-bot
parent 9ba946fc16
commit b7ba59b912
2 changed files with 22 additions and 12 deletions
@@ -33,7 +33,7 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) :
override fun isReferenceTo(element: PsiElement): Boolean {
val name = canonicalText
if (!shouldSearchInSymbols(name)) {
if (!shouldSearchInSymbols(name) || !shouldSearchInClasses(name)) {
return super.isReferenceTo(element)
}
@@ -60,7 +60,9 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) :
if (isFile()) {
resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.FILE_EP_NAME, navigationItems)
} else {
resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.CLASS_EP_NAME, navigationItems)
if (shouldSearchInClasses(name)) {
resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.CLASS_EP_NAME, navigationItems)
}
if (shouldSearchInSymbols(name)) {
resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.SYMBOL_EP_NAME, navigationItems)
}
@@ -81,7 +83,7 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) :
pattern: String,
project: Project,
contributors: ExtensionPointName<ChooseByNameContributor>,
items: MutableList<NavigationItem>,
items: MutableList<NavigationItem>
) {
if (items.size > MAX_RESOLVED_ITEMS) return
for (contributor in DumbService.getInstance(project).filterByDumbAwareness(contributors.extensionList)) {
@@ -103,7 +105,9 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) :
}
private fun shouldSearchInSymbols(elementName: String): Boolean =
elementName.length >= Registry.intValue("markdown.backtick.reference.symbol.length") || NameUtil.nameToWordList(elementName).size > 1
elementName.length >= Registry.intValue("markdown.backtick.reference.symbol.length") && NameUtil.nameToWordList(elementName).size > 1
private fun shouldSearchInClasses(elementName: String): Boolean = elementName.length > 2
private fun isFile(): Boolean {
val filetype = FileTypeRegistry.getInstance().getFileTypeByFileName(canonicalText)
@@ -42,6 +42,12 @@ class BacktickReferenceTest : BasePlatformTestCase() {
assertTrue(myFixture.psiManager.areElementsEquivalent(javaClass, reference!!.resolve()))
}
@Test
fun `test short class reference is not resolved`() {
createJavaClass("SS")
assertNull(configureAndGetReferenceAtCaret("There is an `S<caret>S` backtick")?.resolve())
}
@Test
fun `test reference with extension resolves to original element`() {
val file = createFile("JavaClass.java", "class JavaClass {}")
@@ -87,11 +93,11 @@ class BacktickReferenceTest : BasePlatformTestCase() {
"JavaClass1.java",
"""
class JavaClass1 {
public void longlonglong() {}
public void longLongLong() {}
}
""".trimIndent()
)
assertResolvesToPsiMethod("some1.md", "There is an `longlo<caret>nglong` backtick")
assertResolvesToPsiMethod("some1.md", "There is an `longLong<caret>Long` backtick")
}
@Test
@@ -100,21 +106,21 @@ class BacktickReferenceTest : BasePlatformTestCase() {
"JavaClass.java",
"""
class JavaClass {
public void sho_test() {}
public void boundary_test() {}
}
""".trimIndent()
)
assertResolvesToPsiMethod("some.md", "There is an `sho<caret>_test` backtick")
assertResolvesToPsiMethod("some.md", "There is an `boundary<caret>_test` backtick")
createFile(
"JavaClass1.java",
"""
class JavaClass1 {
public void shoTest() {}
public void boundaryTest() {}
}
""".trimIndent()
)
assertResolvesToPsiMethod("some1.md", "There is an `sho<caret>Test` backtick")
assertResolvesToPsiMethod("some1.md", "There is an `boundary<caret>Test` backtick")
}
@Test
@@ -371,8 +377,8 @@ class BacktickReferenceTest : BasePlatformTestCase() {
assertNull(reference?.resolve())
}
private fun createJavaClass(): PsiClass {
val file = createFile("JavaClass.java", "class JavaClass {}")
private fun createJavaClass(name: String = "JavaClass"): PsiClass {
val file = createFile("$name.java", "class $name {}")
return file.children.single { it is PsiClass } as PsiClass
}