diff --git a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmIdeaContextPrompter.kt b/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmIdeaContextPrompter.kt index 1bba898949..5fcb8db03d 100644 --- a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmIdeaContextPrompter.kt +++ b/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmIdeaContextPrompter.kt @@ -22,7 +22,7 @@ import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager import kotlinx.coroutines.runBlocking -class JvmIdeaContextPrompter : ContextPrompter() { +open class JvmIdeaContextPrompter : ContextPrompter() { private var additionContext: String = "" private val autoDevSettingsState = AutoDevSettingsState.getInstance() private var customPromptConfig: CustomPromptConfig? = null @@ -59,24 +59,12 @@ class JvmIdeaContextPrompter : ContextPrompter() { val prompt = createPrompt(selectedText) val finalPrompt = if (additionContext.isNotEmpty()) { - """|``` - |$additionContext - |``` - | - |```$lang - |$selectedText - |``` - |""".trimMargin() + "```\n$additionContext\n```\n\n```$lang\n$selectedText\n```\n" } else { - """|```$lang - |$selectedText - |``` - """.trimMargin() + "```$lang\n$selectedText\n```" } - return@runBlocking """$prompt: - |$finalPrompt - """.trimMargin() + return@runBlocking "$prompt: \n$finalPrompt" } } @@ -85,21 +73,12 @@ class JvmIdeaContextPrompter : ContextPrompter() { val prompt = createPrompt(selectedText) val finalPrompt = if (additionContext.isNotEmpty()) { - """|$additionContext - |```$lang - |$selectedText - |``` - |""".trimMargin() + "$additionContext\n```$lang\n$selectedText\n```\n" } else { - """|```$lang - |$selectedText - |``` - """.trimMargin() + "```$lang\n$selectedText\n```" } - return@runBlocking """$prompt: - |$finalPrompt - """.trimMargin() + return@runBlocking "$prompt:\n$finalPrompt" } } diff --git a/kotlin/src/main/kotlin/cc/unitmesh/kotlin/provider/KotlinContextPrompter.kt b/kotlin/src/main/kotlin/cc/unitmesh/kotlin/provider/KotlinContextPrompter.kt new file mode 100644 index 0000000000..2b6cb1240e --- /dev/null +++ b/kotlin/src/main/kotlin/cc/unitmesh/kotlin/provider/KotlinContextPrompter.kt @@ -0,0 +1,6 @@ +package cc.unitmesh.kotlin.provider + +import cc.unitmesh.idea.flow.provider.JvmIdeaContextPrompter + +class KotlinContextPrompter: JvmIdeaContextPrompter() { +} \ No newline at end of file diff --git a/kotlin/src/main/resources/cc.unitmesh.kotlin.xml b/kotlin/src/main/resources/cc.unitmesh.kotlin.xml index 4d241e936a..c986b8b7df 100644 --- a/kotlin/src/main/resources/cc.unitmesh.kotlin.xml +++ b/kotlin/src/main/resources/cc.unitmesh.kotlin.xml @@ -26,6 +26,9 @@ + diff --git a/pycharm/src/main/kotlin/cc/unitmesh/pycharm/provider/PythonContextPrompter.kt b/pycharm/src/main/kotlin/cc/unitmesh/pycharm/provider/PythonContextPrompter.kt index 10eac32f96..dc4eda8455 100644 --- a/pycharm/src/main/kotlin/cc/unitmesh/pycharm/provider/PythonContextPrompter.kt +++ b/pycharm/src/main/kotlin/cc/unitmesh/pycharm/provider/PythonContextPrompter.kt @@ -6,21 +6,11 @@ import cc.unitmesh.devti.provider.ContextPrompter class PythonContextPrompter : ContextPrompter() { override fun displayPrompt(): String { val chunkContext = SimilarChunksWithPaths().similarChunksWithPaths(file!!).toQuery() - return """$action for the code: - ```${lang} - $chunkContext - $selectedText - ``` - """.trimIndent() + return "$action\n```${lang}\n$chunkContext\n$selectedText\n```" } override fun requestPrompt(): String { val chunkContext = SimilarChunksWithPaths().similarChunksWithPaths(file!!).toQuery() - return """$action for the code: - ```${lang} - $chunkContext - $selectedText - ``` - """.trimIndent() + return "$action\n```${lang}\n$chunkContext\n$selectedText\n```" } } diff --git a/src/main/kotlin/cc/unitmesh/devti/gui/chat/block/CodeBlockView.kt b/src/main/kotlin/cc/unitmesh/devti/gui/chat/block/CodeBlockView.kt index 5b912de1e5..0442c4ade4 100644 --- a/src/main/kotlin/cc/unitmesh/devti/gui/chat/block/CodeBlockView.kt +++ b/src/main/kotlin/cc/unitmesh/devti/gui/chat/block/CodeBlockView.kt @@ -4,7 +4,6 @@ import cc.unitmesh.devti.gui.chat.ChatRole import cc.unitmesh.devti.parser.Code import com.intellij.lang.Language import com.intellij.openapi.Disposable -import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.runReadAction import com.intellij.openapi.editor.Document import com.intellij.openapi.editor.Editor @@ -25,8 +24,8 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.testFramework.LightVirtualFile import com.intellij.util.concurrency.annotations.RequiresReadLock import com.intellij.util.ui.JBUI -import kotlin.jvm.internal.Ref import javax.swing.JComponent +import kotlin.jvm.internal.Ref class CodeBlockView(private val block: CodeBlock, private val project: Project, private val disposable: Disposable) : MessageBlockView { diff --git a/src/main/kotlin/cc/unitmesh/devti/provider/ContextPrompter.kt b/src/main/kotlin/cc/unitmesh/devti/provider/ContextPrompter.kt index e2c6efc66d..c088919758 100644 --- a/src/main/kotlin/cc/unitmesh/devti/provider/ContextPrompter.kt +++ b/src/main/kotlin/cc/unitmesh/devti/provider/ContextPrompter.kt @@ -1,6 +1,7 @@ package cc.unitmesh.devti.provider import cc.unitmesh.devti.gui.chat.ChatActionType +import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile @@ -54,11 +55,14 @@ abstract class ContextPrompter : LazyExtensionInstance() { it.language?.lowercase() == lang.lowercase() } - return if (contextPrompter.isEmpty()) { - extensionList.first() - } else { + val prompter = if (contextPrompter.isNotEmpty()) { contextPrompter.first() + } else { + logger().warn("No context prompter found for language $lang, will use default") + DefaultContextPrompter() } + + return prompter } } } diff --git a/src/main/kotlin/cc/unitmesh/devti/provider/DefaultContextPrompter.kt b/src/main/kotlin/cc/unitmesh/devti/provider/DefaultContextPrompter.kt new file mode 100644 index 0000000000..16a22dc1d2 --- /dev/null +++ b/src/main/kotlin/cc/unitmesh/devti/provider/DefaultContextPrompter.kt @@ -0,0 +1,15 @@ +package cc.unitmesh.devti.provider + +import cc.unitmesh.devti.context.chunks.SimilarChunksWithPaths + +class DefaultContextPrompter : ContextPrompter() { + override fun displayPrompt(): String { + val chunkContext = SimilarChunksWithPaths().similarChunksWithPaths(file!!).toQuery() + return "$action\n```${lang}\n$chunkContext\n$selectedText\n```" + } + + override fun requestPrompt(): String { + val chunkContext = SimilarChunksWithPaths().similarChunksWithPaths(file!!).toQuery() + return "$action\n```${lang}\n$chunkContext\n$selectedText\n```" + } +} \ No newline at end of file diff --git a/webstorm/src/main/kotlin/cc/unitmesh/ide/webstorm/provider/JavaScriptContextPrompter.kt b/webstorm/src/main/kotlin/cc/unitmesh/ide/webstorm/provider/JavaScriptContextPrompter.kt index a6fb2135f0..a2e6e95f70 100644 --- a/webstorm/src/main/kotlin/cc/unitmesh/ide/webstorm/provider/JavaScriptContextPrompter.kt +++ b/webstorm/src/main/kotlin/cc/unitmesh/ide/webstorm/provider/JavaScriptContextPrompter.kt @@ -14,18 +14,10 @@ class JavaScriptContextPrompter : ContextPrompter() { "" } - return """$action for the code: - ```${lang}$frameInfo - $selectedText - ``` - """.trimIndent() + return "$action for the code:\n```${lang}$frameInfo\n$selectedText\n```" } override fun requestPrompt(): String { - return """$action for the code: - ```${lang} - $selectedText - ``` - """.trimIndent() + return "$action for the code:\n```${lang}\n$selectedText\n```" } }