Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.github.tempest.framework.views.completion

import com.github.tempest.framework.TempestFrameworkUtil
import com.intellij.codeInsight.AutoPopupController
import com.intellij.codeInsight.editorActions.TypedHandlerDelegate
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile

class ViewVariableTypedHandler : TypedHandlerDelegate() {
override fun checkAutoPopup(charTyped: Char, project: Project, editor: Editor, file: PsiFile): Result {
if (charTyped != '$') return Result.CONTINUE
if (!file.name.endsWith(TempestFrameworkUtil.TEMPLATE_SUFFIX)) return Result.CONTINUE

val offset = editor.caretModel.offset
val text = editor.document.charsSequence

if (isInsideTemplateTag(text, offset)) {
AutoPopupController.getInstance(project).scheduleAutoPopup(editor)
return Result.STOP
}

return Result.CONTINUE
}

private fun isInsideTemplateTag(text: CharSequence, offset: Int): Boolean {
val textBefore = text.subSequence(0, offset).toString()

val lastRawOpen = textBefore.lastIndexOf("{!!")
val lastRawClose = textBefore.lastIndexOf("!!}")
val lastEscapedOpen = textBefore.lastIndexOf("{{")
val lastEscapedClose = textBefore.lastIndexOf("}}")

val inRawTag = lastRawOpen > lastRawClose && lastRawOpen >= 0
val inEscapedTag = lastEscapedOpen > lastEscapedClose && lastEscapedOpen >= 0

if (!inRawTag && !inEscapedTag) return false

val textAfter = text.subSequence(offset, text.length).toString()
val expectedCloseTag = if (inRawTag && lastRawOpen > lastEscapedOpen) "!!}" else "}}"

return textAfter.contains(expectedCloseTag)
}
}
2 changes: 2 additions & 0 deletions src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@
<psi.referenceContributor
language="PHP"
implementation="com.github.tempest.framework.db.references.QueryBuilderReferenceContributor"/>
<typedHandler
implementation="com.github.tempest.framework.views.completion.ViewVariableTypedHandler"/>
</extensions>
<extensions defaultExtensionNs="com.jetbrains.php">
<libraryRoot id="tempest.meta-storm" path="meta-storm" runtime="false" />
Expand Down
Loading