diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartLookupHandler.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartLookupHandler.kt index 852eaa8..03aaf26 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartLookupHandler.kt +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartLookupHandler.kt @@ -1,6 +1,7 @@ package com.github.izhangzhihao.rainbow.fart import com.github.izhangzhihao.rainbow.fart.RainbowFartTypedHandler.FartTypedHandler.releaseFart +import com.github.izhangzhihao.rainbow.fart.settings.RainbowFartSettings import com.intellij.codeInsight.lookup.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -10,6 +11,9 @@ import java.beans.PropertyChangeListener class RainbowFartLookupHandler : LookupListener { override fun itemSelected(event: LookupEvent) { try { + if (!RainbowFartSettings.instance.isRainbowFartEnabled) { + return + } val currentItem: LookupElement = event.lookup.currentItem ?: return val lookupString: String = currentItem.lookupString if (BuildInContributes.buildInContributes.containsKey(lookupString)) { diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartTypedHandler.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartTypedHandler.kt index d20866c..aa8e4e5 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartTypedHandler.kt +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/fart/RainbowFartTypedHandler.kt @@ -1,28 +1,47 @@ package com.github.izhangzhihao.rainbow.fart +import com.github.izhangzhihao.rainbow.fart.RainbowFartTypedHandler.FartTypedHandler.isTypingInsideComment import com.github.izhangzhihao.rainbow.fart.RainbowFartTypedHandler.FartTypedHandler.releaseFart import com.github.izhangzhihao.rainbow.fart.settings.RainbowFartSettings import com.intellij.codeInsight.template.impl.editorActions.TypedActionHandlerBase import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.actionSystem.TypedActionHandler +import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import com.intellij.psi.PsiManager +import com.intellij.psi.PsiWhiteSpace +import com.intellij.psi.util.elementType import javazoom.jl.player.Player import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.io.File + class RainbowFartTypedHandler(originalHandler: TypedActionHandler) : TypedActionHandlerBase(originalHandler) { private var candidates: MutableList = mutableListOf() override fun execute(editor: Editor, charTyped: Char, dataContext: DataContext) { - if (!RainbowFartSettings.instance.isRainbowFartEnabled) { - this.myOriginalHandler?.execute(editor, charTyped, dataContext) - return - } - try { + if (!RainbowFartSettings.instance.isRainbowFartEnabled) { + return + } + val project = editor.project + + if (project != null) { + //val language = PsiUtilBase.getLanguageInEditor(editor, project) + val virtualFile = FileDocumentManager.getInstance().getFile(editor.document) + if (virtualFile != null) { + val file = PsiManager.getInstance(project).findFile(virtualFile) + if (file != null && isTypingInsideComment(editor, file)) { + return + } + } + } + candidates.add(charTyped) val str = candidates.joinToString("") BuildInContributes.buildInContributesSeq @@ -66,5 +85,27 @@ class RainbowFartTypedHandler(originalHandler: TypedActionHandler) : TypedAction player.play() player.close() } + + fun isTypingInsideComment(editor: Editor, file: PsiFile): Boolean { + val provider = file.viewProvider + val offset = editor.caretModel.offset + val elementAtCaret: PsiElement? + elementAtCaret = if (offset < editor.document.textLength) { + provider.findElementAt(offset) + } else { + provider.findElementAt(editor.document.textLength - 1) + } + var element = elementAtCaret + while (element is PsiWhiteSpace) { + element = element.getPrevSibling() + } + + return element.elementType.toString().contains("comment", true) +// if (element == null) { +// return false +// } +// val node: ASTNode? = element.node +// return node != null //&& JavaDocTokenType.ALL_JAVADOC_TOKENS.contains(node.getElementType()) + } } } \ No newline at end of file