Skip to content

Commit 87cfeae

Browse files
committed
feat: add components references
1 parent 65eeab6 commit 87cfeae

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.github.tempest.framework
2+
3+
import com.intellij.openapi.vfs.findPsiFile
4+
import com.intellij.patterns.PlatformPatterns
5+
import com.intellij.psi.PsiElement
6+
import com.intellij.psi.PsiReference
7+
import com.intellij.psi.PsiReferenceBase
8+
import com.intellij.psi.PsiReferenceContributor
9+
import com.intellij.psi.PsiReferenceProvider
10+
import com.intellij.psi.PsiReferenceRegistrar
11+
import com.intellij.psi.html.HtmlTag
12+
import com.intellij.psi.search.FilenameIndex
13+
import com.intellij.psi.search.GlobalSearchScope
14+
import com.intellij.psi.xml.XmlChildRole
15+
import com.intellij.util.ProcessingContext
16+
17+
private const val TEMPLATE_PREFIX = ".view.php"
18+
19+
class ComponentReferenceContributor : PsiReferenceContributor() {
20+
override fun registerReferenceProviders(registrar: PsiReferenceRegistrar) {
21+
registrar.registerReferenceProvider(
22+
PlatformPatterns.psiElement(HtmlTag::class.java),
23+
object : PsiReferenceProvider() {
24+
override fun getReferencesByElement(
25+
element: PsiElement,
26+
context: ProcessingContext
27+
): Array<out PsiReference> {
28+
if (element !is HtmlTag) return emptyArray()
29+
if (!element.name.startsWith("x-")) return emptyArray()
30+
31+
val nameElement = XmlChildRole.START_TAG_NAME_FINDER.findChild(element.node) ?: return emptyArray()
32+
33+
val project = element.project
34+
35+
val result = mutableListOf<PsiReference>()
36+
37+
FilenameIndex.processFilesByName(
38+
element.name + TEMPLATE_PREFIX,
39+
true,
40+
GlobalSearchScope.projectScope(project),
41+
{
42+
val psiFile = it.findPsiFile(project) ?: return@processFilesByName true
43+
result.add(
44+
object : PsiReferenceBase<PsiElement>(element, nameElement.textRange, false) {
45+
override fun resolve() = psiFile
46+
}
47+
)
48+
49+
true
50+
})
51+
52+
return result.toTypedArray()
53+
}
54+
}
55+
)
56+
}
57+
}

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<webSymbols.webTypes
1616
source="META-INF/webTypes.json"
1717
enableByDefault="true"/>
18+
<psi.referenceContributor language="HTML" implementation="com.github.tempest.framework.ComponentReferenceContributor" />
1819
<spellchecker.bundledDictionaryProvider
1920
implementation="com.github.tempest.framework.SpellcheckingDictionaryProvider"/>
2021
</extensions>

0 commit comments

Comments
 (0)