Skip to content

Commit b1a53d3

Browse files
committed
feat(docker): implement DockerContextProvider and RunDockerfileService #306
- Added DockerContextProvider and RunDockerfileService implementations. - Moved extensions to core/src/233/main/resources/META-INF/docker.xml. - Optimized DockerContextProvider to use runReadAction for command extraction.
1 parent c6c3560 commit b1a53d3

File tree

5 files changed

+22
-28
lines changed

5 files changed

+22
-28
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
<!-- Defines IDEA IDE-specific contributions and implementations. -->
22
<idea-plugin>
3+
<extensions defaultExtensionNs="cc.unitmesh">
4+
<runService implementation="cc.unitmesh.container.RunDockerfileService"/>
5+
6+
<chatContextProvider implementation="cc.unitmesh.container.provider.DockerContextProvider"/>
7+
</extensions>
38
</idea-plugin>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
<!-- Defines IDEA IDE-specific contributions and implementations. -->
22
<idea-plugin>
3+
<extensions defaultExtensionNs="cc.unitmesh">
4+
<runService implementation="cc.unitmesh.container.RunDockerfileService"/>
5+
6+
<chatContextProvider implementation="cc.unitmesh.container.provider.DockerContextProvider"/>
7+
</extensions>
38
</idea-plugin>

exts/ext-container/src/233/main/kotlin/cc/unitmesh/container/RunDockerfileService.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ class RunDockerfileService : RunService {
1212

1313
fun isApplicable(element: PsiElement) = element.containingFile?.language == DockerLanguage.INSTANCE
1414

15-
override fun runConfigurationClass(project: Project): Class<out RunProfile>? {
16-
return null
15+
override fun runConfigurationClass(project: Project): Class<out RunProfile>? = null
16+
17+
override fun runFile(project: Project, virtualFile: VirtualFile, psiElement: PsiElement?, isFromToolAction: Boolean)
18+
: String? {
19+
return super.runFile(project, virtualFile, psiElement, isFromToolAction)
1720
}
1821
}

exts/ext-container/src/233/main/kotlin/cc/unitmesh/container/provider/DockerContextProvider.kt

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,14 @@ package cc.unitmesh.container.provider
33
import cc.unitmesh.devti.provider.context.ChatContextItem
44
import cc.unitmesh.devti.provider.context.ChatContextProvider
55
import cc.unitmesh.devti.provider.context.ChatCreationContext
6-
import cc.unitmesh.devti.sketch.ui.patch.readText
76
import com.intellij.docker.DockerFileSearch
87
import com.intellij.docker.dockerFile.parser.psi.DockerFileFromCommand
98
import com.intellij.openapi.application.runReadAction
10-
import com.intellij.openapi.diagnostic.logger
119
import com.intellij.openapi.project.Project
1210
import com.intellij.psi.PsiManager
1311
import com.intellij.psi.impl.source.PsiFileImpl
1412

1513
class DockerContextProvider : ChatContextProvider {
16-
private val fromRegex = Regex("FROM\\s+((?:--platform=[^\\s]+\\s+)?[^\\s]+)(?:\\s+AS\\s+([^\\s]+))?")
17-
1814
override fun isApplicable(project: Project, creationContext: ChatCreationContext): Boolean =
1915
DockerFileSearch.getInstance().getDockerFiles(project).isNotEmpty()
2016

@@ -36,26 +32,15 @@ class DockerContextProvider : ChatContextProvider {
3632
context = "This project use Docker, path: ${virtualFile.path}"
3733

3834
var additionalCtx = ""
39-
try {
40-
val fromCommands = dockerFiles.map {
35+
val fromCommands = runReadAction {
36+
dockerFiles.map {
4137
(it as PsiFileImpl).findChildrenByClass(DockerFileFromCommand::class.java).toList()
4238
}.flatten()
39+
}
4340

44-
if (fromCommands.isEmpty()) return listOf(ChatContextItem(DockerContextProvider::class, context))
45-
additionalCtx = fromCommands.joinToString("\n") {
46-
runReadAction { it.text }
47-
}
48-
} catch (e: Exception) {
49-
logger<DockerContextProvider>().warn("Failed to collect Docker context", e)
50-
val fromMatch = fromRegex.find(virtualFile.readText())
51-
52-
if (fromMatch != null) {
53-
additionalCtx = fromMatch.groupValues[1]
54-
}
55-
56-
if (additionalCtx.isEmpty()) {
57-
return listOf(ChatContextItem(DockerContextProvider::class, context))
58-
}
41+
if (fromCommands.isEmpty()) return listOf(ChatContextItem(DockerContextProvider::class, context))
42+
additionalCtx = fromCommands.joinToString("\n") {
43+
runReadAction { it.text }
5944
}
6045

6146
val text = "This project use Docker to run in server. Here is related info:\n$additionalCtx"

exts/ext-container/src/233/main/resources/cc.unitmesh.container.xml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,5 @@
55
<plugin id="Docker"/>
66
</dependencies>
77

8-
<extensions defaultExtensionNs="cc.unitmesh">
9-
<!-- <runService implementation="cc.unitmesh.container.RunDockerfileService"/>-->
10-
11-
<chatContextProvider implementation="cc.unitmesh.container.provider.DockerContextProvider"/>
12-
</extensions>
8+
<!-- Since limit of Docker, we move implementation to docker-contrib.xml -->
139
</idea-plugin>

0 commit comments

Comments
 (0)