11package com.github.tempest.framework.views.injection
22
3- import com.intellij.lang.Language
43import com.intellij.lang.injection.MultiHostInjector
54import com.intellij.lang.injection.MultiHostRegistrar
65import com.intellij.lang.tree.util.children
@@ -13,8 +12,14 @@ import com.intellij.psi.xml.XmlAttribute
1312import com.intellij.psi.xml.XmlAttributeValue
1413import com.intellij.psi.xml.XmlText
1514import com.intellij.psi.xml.XmlToken
15+ import com.jetbrains.php.lang.PhpLanguage
1616
1717class 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