Skip to content

Commit 8fb8f05

Browse files
authored
feat: introduce console commands indexer (#10)
2 parents a46ead7 + 7262819 commit 8fb8f05

File tree

5 files changed

+80
-1
lines changed

5 files changed

+80
-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.common.index
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: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.github.tempest.framework.console.index
2+
3+
import com.github.tempest.framework.TempestFrameworkClasses
4+
import com.github.tempest.framework.TempestFrameworkUtil
5+
import com.github.tempest.framework.common.index.AbstractIndex
6+
import com.intellij.openapi.util.text.StringUtil
7+
import com.intellij.psi.util.PsiTreeUtil
8+
import com.intellij.util.indexing.DataIndexer
9+
import com.intellij.util.indexing.FileBasedIndex
10+
import com.intellij.util.indexing.FileContent
11+
import com.intellij.util.indexing.ID
12+
import com.intellij.util.io.EnumeratorStringDescriptor
13+
import com.jetbrains.php.lang.PhpFileType
14+
import com.jetbrains.php.lang.psi.elements.PhpAttribute
15+
16+
private typealias ConsoleCommandsIndexType = String
17+
18+
class ConsoleCommandsIndex : AbstractIndex<ConsoleCommandsIndexType>() {
19+
companion object {
20+
val key = ID.create<String, ConsoleCommandsIndexType>("Tempest.ConsoleCommands")
21+
}
22+
23+
override fun getVersion() = 1
24+
25+
override fun getName() = key
26+
27+
override fun getValueExternalizer() = EnumeratorStringDescriptor.INSTANCE
28+
29+
override fun getInputFilter() = FileBasedIndex.InputFilter {
30+
it.fileType == PhpFileType.INSTANCE &&
31+
!it.name.endsWith(TempestFrameworkUtil.TEMPLATE_SUFFIX)
32+
}
33+
34+
override fun getIndexer() = DataIndexer<String, ConsoleCommandsIndexType, FileContent> { inputData ->
35+
inputData
36+
.psiFile
37+
.let { PsiTreeUtil.findChildrenOfType(it, PhpAttribute::class.java) }
38+
.filter { it.fqn == TempestFrameworkClasses.ConsoleCommand }
39+
.mapNotNull { attribute ->
40+
attribute.arguments
41+
.firstOrNull { it.name == "name" || it.name.isEmpty() }
42+
?.argument
43+
?.value
44+
}
45+
.map { StringUtil.unquoteString(it) }
46+
.associateBy { it }
47+
// .apply { println("file: ${inputData.file}, result: $this") }
48+
}
49+
}

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.console.index.ConsoleCommandsIndex" />
2932
</extensions>
3033
<extensions defaultExtensionNs="com.jetbrains.php">
3134

0 commit comments

Comments
 (0)