Skip to content

Commit a5a7a30

Browse files
committed
feat: introduce routes indexer
1 parent 7e3821d commit a5a7a30

File tree

5 files changed

+79
-1
lines changed

5 files changed

+79
-1
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ platformVersion = 2025.1.1
1616
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
1717
# Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP
1818
#platformPlugins=com.jetbrains.php:243.25659.59,com.jetbrains.hackathon.indices.viewer:1.28
19-
platformPlugins=com.jetbrains.php:251.25410.129,com.jetbrains.hackathon.indices.viewer:1.28
19+
platformPlugins=com.jetbrains.php:251.25410.129,com.jetbrains.hackathon.indices.viewer:1.30
2020
# Example: platformBundledPlugins = com.intellij.java
2121
platformBundledPlugins =
2222
# Example: platformBundledModules = intellij.spellchecker
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.github.tempest.framework
2+
3+
object TempestFrameworkClasses {
4+
const val ConsoleCommand = "\\Tempest\\Console\\ConsoleCommand"
5+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.github.tempest.framework.router
2+
3+
import com.intellij.util.indexing.DataIndexer
4+
import com.intellij.util.indexing.FileBasedIndex
5+
import com.intellij.util.indexing.FileBasedIndexExtension
6+
import com.intellij.util.indexing.FileContent
7+
import com.intellij.util.indexing.ID
8+
import com.intellij.util.io.EnumeratorStringDescriptor
9+
10+
abstract class AbstractIndex<T : Any> : FileBasedIndexExtension<String, T>() {
11+
abstract override fun getName(): ID<String, T>
12+
13+
abstract override fun getInputFilter(): FileBasedIndex.InputFilter
14+
15+
override fun dependsOnFileContent() = true
16+
17+
abstract override fun getIndexer(): DataIndexer<String, T, FileContent>
18+
19+
override fun getKeyDescriptor() = EnumeratorStringDescriptor.INSTANCE
20+
21+
override fun getVersion() = 1
22+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.github.tempest.framework.router
2+
3+
import com.github.tempest.framework.TempestFrameworkClasses
4+
import com.github.tempest.framework.TempestFrameworkUtil
5+
import com.intellij.openapi.util.text.StringUtil
6+
import com.intellij.psi.util.PsiTreeUtil
7+
import com.intellij.util.indexing.DataIndexer
8+
import com.intellij.util.indexing.FileBasedIndex
9+
import com.intellij.util.indexing.FileContent
10+
import com.intellij.util.indexing.ID
11+
import com.intellij.util.io.EnumeratorStringDescriptor
12+
import com.jetbrains.php.lang.PhpFileType
13+
import com.jetbrains.php.lang.psi.elements.PhpAttribute
14+
15+
private typealias RouteType = String
16+
17+
class RoutesIndex : AbstractIndex<RouteType>() {
18+
companion object {
19+
val key = ID.create<String, RouteType>("Tempest.Routes")
20+
}
21+
22+
override fun getVersion() = 1
23+
24+
override fun getName() = key
25+
26+
override fun getValueExternalizer() = EnumeratorStringDescriptor.INSTANCE
27+
28+
override fun getInputFilter() = FileBasedIndex.InputFilter {
29+
it.fileType == PhpFileType.INSTANCE &&
30+
!it.name.endsWith(TempestFrameworkUtil.TEMPLATE_SUFFIX)
31+
}
32+
33+
override fun getIndexer() = DataIndexer<String, RouteType, FileContent> { inputData ->
34+
inputData
35+
.psiFile
36+
.let { PsiTreeUtil.findChildrenOfType(it, PhpAttribute::class.java) }
37+
.filter { it.fqn == TempestFrameworkClasses.ConsoleCommand }
38+
.mapNotNull { attribute ->
39+
attribute.arguments
40+
.firstOrNull { it.name == "name" || it.name.isEmpty() }
41+
?.argument
42+
?.value
43+
}
44+
.map { StringUtil.unquoteString(it) }
45+
.associateBy { it }
46+
// .apply { println("file: ${inputData.file}, result: $this") }
47+
}
48+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
<lang.inspectionSuppressor
2727
language="HTML"
2828
implementationClass="com.github.tempest.framework.views.TempestComponentsInspectionSuppressor"/>
29+
30+
<fileBasedIndex
31+
implementation="com.github.tempest.framework.router.RoutesIndex" />
2932
</extensions>
3033
<extensions defaultExtensionNs="com.jetbrains.php">
3134

0 commit comments

Comments
 (0)