Skip to content

Commit d382e71

Browse files
committed
feat(ext-container): enhance Docker context provider with error handling #306
- Add try-catch block to handle exceptions during Docker context collection - Include
1 parent d57bccb commit d382e71

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

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

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ 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 com.github.dockerjava.core.dockerfile.Dockerfile
76
import com.intellij.docker.DockerFileSearch
87
import com.intellij.docker.dockerFile.DockerPsiFile
98
import com.intellij.docker.dockerFile.parser.psi.DockerFileFromCommand
9+
import com.intellij.openapi.diagnostic.logger
1010
import com.intellij.openapi.project.Project
1111
import com.intellij.psi.PsiManager
1212
import com.intellij.psi.util.PsiTreeUtil
@@ -19,23 +19,32 @@ class DockerContextProvider : ChatContextProvider {
1919
project: Project,
2020
creationContext: ChatCreationContext
2121
): List<ChatContextItem> {
22-
val dockerFiles = DockerFileSearch.getInstance().getDockerFiles(project).mapNotNull {
23-
PsiManager.getInstance(project).findFile(it) as? DockerPsiFile
24-
}
22+
try {
23+
val dockerFiles = DockerFileSearch.getInstance().getDockerFiles(project).mapNotNull {
24+
PsiManager.getInstance(project).findFile(it) as? DockerPsiFile
25+
}
26+
27+
if (dockerFiles.isEmpty()) return emptyList()
2528

26-
if (dockerFiles.isEmpty()) return emptyList()
29+
val virtualFile = dockerFiles.firstOrNull()?.virtualFile
30+
val defaultContent = "This project use Docker to run in server, path: ${virtualFile?.path}"
31+
val defaultContext = listOf(ChatContextItem(DockerContextProvider::class, defaultContent))
2732

28-
val fromCommands = dockerFiles.mapNotNull {
29-
PsiTreeUtil.getChildrenOfType(it, DockerFileFromCommand::class.java)?.toList()
30-
}.flatten()
33+
val fromCommands = dockerFiles.mapNotNull {
34+
PsiTreeUtil.getChildrenOfType(it, DockerFileFromCommand::class.java)?.toList()
35+
}.flatten()
3136

32-
if (fromCommands.isEmpty()) return listOf(
33-
ChatContextItem(DockerContextProvider::class, "This project use Docker to run in server")
34-
)
37+
if (fromCommands.isEmpty()) {
38+
return defaultContext
39+
}
3540

36-
val text = "This project use Docker to run in server. Here is related info:\n" +
37-
fromCommands.joinToString("\n") { it.text }
41+
val text = "This project use Docker to run in server. Here is related info:\n" +
42+
fromCommands.joinToString("\n") { it.text }
3843

39-
return listOf(ChatContextItem(DockerContextProvider::class, text))
44+
return listOf(ChatContextItem(DockerContextProvider::class, text))
45+
} catch (e: Exception) {
46+
logger<DockerContextProvider>().warn("Failed to collect Docker context", e)
47+
return listOf(ChatContextItem(DockerContextProvider::class, "This project use Docker."))
48+
}
4049
}
4150
}

0 commit comments

Comments
 (0)