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```"
}
}