Skip to content

Commit a46ead7

Browse files
authored
refactor: language injector (#9)
2 parents 7e3821d + ea2e9eb commit a46ead7

File tree

1 file changed

+15
-18
lines changed

1 file changed

+15
-18
lines changed

src/main/kotlin/com/github/tempest/framework/views/injection/PHPLanguageInjector.kt

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.github.tempest.framework.views.injection
22

3-
import com.intellij.lang.Language
43
import com.intellij.lang.injection.MultiHostInjector
54
import com.intellij.lang.injection.MultiHostRegistrar
65
import com.intellij.lang.tree.util.children
@@ -13,8 +12,14 @@ import com.intellij.psi.xml.XmlAttribute
1312
import com.intellij.psi.xml.XmlAttributeValue
1413
import com.intellij.psi.xml.XmlText
1514
import com.intellij.psi.xml.XmlToken
15+
import com.jetbrains.php.lang.PhpLanguage
1616

1717
class PHPLanguageInjector : MultiHostInjector {
18+
val tagsMap = mapOf(
19+
"{!!" to "!!}",
20+
"{{" to "}}",
21+
)
22+
1823
override fun getLanguagesToInject(
1924
registrar: MultiHostRegistrar,
2025
element: PsiElement
@@ -23,20 +28,20 @@ class PHPLanguageInjector : MultiHostInjector {
2328
is XmlAttributeValue -> {
2429
val attribute = element.parent as? XmlAttribute ?: return
2530

26-
if (!attribute.name.startsWith(':') || attribute.name.startsWith("::")) return
31+
if (!attribute.name.startsWith(':')) return
2732

2833
val injectableHost = element as? PsiLanguageInjectionHost ?: return
2934

3035
registrar
31-
.startInjecting(Language.findLanguageByID("PHP") ?: return)
36+
.startInjecting(PhpLanguage.INSTANCE ?: return)
3237
.addPlace("<?=", "?>", injectableHost, TextRange(0, injectableHost.textLength))
3338
.doneInjecting()
3439
}
3540

3641
is HtmlTag -> {
3742
element.children
3843
.mapNotNull { it as? HtmlRawTextImpl }
39-
.forEach { child->
44+
.forEach { child ->
4045
injectIntoText(HtmlTextInjectionHostWrapper(child), registrar)
4146
}
4247
}
@@ -49,10 +54,6 @@ class PHPLanguageInjector : MultiHostInjector {
4954
}
5055
}
5156

52-
val tagsMap = mapOf(
53-
"{!!" to "!!}",
54-
"{{" to "}}",
55-
)
5657
private fun injectIntoText(
5758
element: PsiLanguageInjectionHost,
5859
registrar: MultiHostRegistrar
@@ -62,19 +63,15 @@ class PHPLanguageInjector : MultiHostInjector {
6263
.apply { if (size < 2) return }
6364

6465
// println("children: $children")
65-
val openTag = children.find { it.text == "{!!" || it.text == "{{" }?.psi ?: return
66-
val closeTag = children.find { it.text == tagsMap[openTag.text] }?.psi
66+
val openTag = children.find { tagsMap.containsKey(it.text) }?.psi ?: return
67+
val closeTag = children.find { it.text == tagsMap[openTag.text] }?.psi ?: return
6768

6869
// println("openTag: ${openTag.text}, closeTag: ${closeTag?.text}")
69-
if ((openTag.text == "{!!" && closeTag?.text == "!!}") || (openTag.text == "{{" && closeTag?.text == "}}")) {
70-
val language = Language.findLanguageByID("PHP") ?: return
71-
72-
val textRange = TextRange(openTag.textRangeInParent.endOffset, closeTag.startOffsetInParent)
70+
val textRange = TextRange(openTag.textRangeInParent.endOffset, closeTag.startOffsetInParent)
7371
// println("injecting ${language} into $element, $textRange")
74-
registrar.startInjecting(language)
75-
.addPlace("<?=", "?>", element, textRange)
76-
.doneInjecting()
77-
}
72+
registrar.startInjecting(PhpLanguage.INSTANCE)
73+
.addPlace("<?=", "?>", element, textRange)
74+
.doneInjecting()
7875
}
7976

8077
override fun elementsToInjectIn() = listOf(

0 commit comments

Comments
 (0)