Skip to content

Commit 93c23d9

Browse files
committed
feat(core): implement domain dictionary generation feature #358
- Add LangDictProvider interface and implementation for Java language - Create DomainDictGenerateAction to generate domain dictionary- Update autodev-core.xml to include new extension points and observers - Rename indexer template file from .devin to .vm
1 parent fcc5dc6 commit 93c23d9

File tree

9 files changed

+139
-21
lines changed

9 files changed

+139
-21
lines changed

core/src/223/main/resources/META-INF/autodev-core.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,12 @@
224224
<extensionPoint qualifiedName="cc.unitmesh.agentObserver"
225225
interface="cc.unitmesh.devti.provider.observer.AgentObserver"
226226
dynamic="true"/>
227+
228+
<!-- Indexer -->
229+
<extensionPoint qualifiedName="cc.unitmesh.langDictProvider"
230+
beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
231+
<with attribute="implementationClass" implements="cc.unitmesh.devti.indexer.provider.LangDictProvider"/>
232+
</extensionPoint>
227233
</extensionPoints>
228234

229235
<projectListeners>

core/src/233/main/resources/META-INF/autodev-core.xml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,12 @@
226226
<extensionPoint qualifiedName="cc.unitmesh.agentObserver"
227227
interface="cc.unitmesh.devti.provider.observer.AgentObserver"
228228
dynamic="true"/>
229+
230+
<!-- Indexer -->
231+
<extensionPoint qualifiedName="cc.unitmesh.langDictProvider"
232+
interface="cc.unitmesh.devti.indexer.provider.LangDictProvider"
233+
dynamic="true"
234+
/>
229235
</extensionPoints>
230236

231237
<projectListeners>
@@ -249,7 +255,7 @@
249255
<bundleName>messages.AutoDevBundle</bundleName>
250256
<categoryKey>intention.category.llm</categoryKey>
251257
</autoDevIntention>
252-
258+
253259
<chatContextProvider implementation="cc.unitmesh.devti.provider.context.IdeVersionChatContextProvider"/>
254260

255261
<langSketchProvider implementation="cc.unitmesh.devti.sketch.ui.patch.DiffLangSketchProvider"/>
@@ -265,9 +271,9 @@
265271
<toolchainFunctionProvider implementation="cc.unitmesh.devti.bridge.knowledge.KnowledgeFunctionProvider"/>
266272
<toolchainFunctionProvider implementation="cc.unitmesh.devti.mcp.client.McpFunctionProvider"/>
267273

268-
<agentObserver implementation="cc.unitmesh.devti.observer.TestAgentObserver" />
269-
<agentObserver implementation="cc.unitmesh.devti.observer.BuiltTaskAgentObserver" />
270-
<agentObserver implementation="cc.unitmesh.devti.observer.AddDependencyAgentObserver" />
274+
<agentObserver implementation="cc.unitmesh.devti.observer.TestAgentObserver"/>
275+
<agentObserver implementation="cc.unitmesh.devti.observer.BuiltTaskAgentObserver"/>
276+
<agentObserver implementation="cc.unitmesh.devti.observer.AddDependencyAgentObserver"/>
271277
</extensions>
272278

273279
<actions>
Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,65 @@
11
package cc.unitmesh.devti.indexer
22

3+
import cc.unitmesh.devti.AutoDevIcons
4+
import cc.unitmesh.devti.indexer.provider.LangDictProvider
5+
import cc.unitmesh.devti.llms.LlmFactory
6+
import cc.unitmesh.devti.settings.coder.coderSetting
37
import cc.unitmesh.devti.settings.locale.LanguageChangedCallback.presentationText
8+
import cc.unitmesh.devti.statusbar.AutoDevStatus
9+
import cc.unitmesh.devti.statusbar.AutoDevStatusService
10+
import cc.unitmesh.devti.template.GENIUS_CODE
11+
import cc.unitmesh.devti.template.TemplateRender
12+
import cc.unitmesh.devti.template.context.TemplateContext
13+
import cc.unitmesh.devti.util.AutoDevCoroutineScope
414
import com.intellij.openapi.actionSystem.AnAction
515
import com.intellij.openapi.actionSystem.AnActionEvent
16+
import com.intellij.openapi.project.guessProjectDir
17+
import kotlinx.coroutines.launch
618

7-
class DomainDictGenerateAction: AnAction() {
8-
init{
19+
class DomainDictGenerateAction : AnAction() {
20+
init {
921
presentationText("indexer.generate.domain", templatePresentation)
1022
}
1123

1224
override fun actionPerformed(event: AnActionEvent) {
13-
/// todo: add load source content file and call llm to gerneate to csv
14-
TODO("Not yet implemented")
25+
val project = event.project ?: return
26+
AutoDevCoroutineScope.scope(project).launch {
27+
val names = LangDictProvider.all(project)
28+
29+
val baseDir = project.coderSetting.state.teamPromptsDir
30+
val templateRender = TemplateRender(GENIUS_CODE)
31+
val template = templateRender.getTemplate("indexer.vm")
32+
val context = DomainDictGenerateContext(names.joinToString(", "))
33+
val prompt = templateRender.renderTemplate(template, context)
34+
35+
try {
36+
this@DomainDictGenerateAction.templatePresentation.icon = AutoDevIcons.InProgress
37+
this@DomainDictGenerateAction.templatePresentation.isEnabled = false
38+
val result = StringBuilder()
39+
AutoDevStatusService.notifyApplication(AutoDevStatus.InProgress)
40+
LlmFactory.create(project).stream(prompt, "").collect {
41+
result.append(it)
42+
}
43+
44+
val dict = result.toString()
45+
val file = project.guessProjectDir()!!.toNioPath().resolve(baseDir).resolve("domain.csv").toFile()
46+
if (!file.exists()) {
47+
file.createNewFile()
48+
}
49+
50+
AutoDevStatusService.notifyApplication(AutoDevStatus.Done)
51+
file.writeText(dict)
52+
} catch (e: Exception) {
53+
AutoDevStatusService.notifyApplication(AutoDevStatus.Error)
54+
e.printStackTrace()
55+
} finally {
56+
this@DomainDictGenerateAction.templatePresentation.icon = AutoDevIcons.AI_COPILOT
57+
this@DomainDictGenerateAction.templatePresentation.isEnabled = true
58+
}
59+
}
1560
}
16-
}
61+
}
62+
63+
data class DomainDictGenerateContext(
64+
val code: String
65+
) : TemplateContext
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package cc.unitmesh.devti.indexer.provider
2+
3+
import com.intellij.openapi.extensions.ExtensionPointName
4+
import com.intellij.openapi.project.Project
5+
6+
interface LangDictProvider {
7+
suspend fun collectFileNames(project: Project): List<String>
8+
9+
companion object {
10+
private val EP_NAME: ExtensionPointName<LangDictProvider> =
11+
ExtensionPointName("cc.unitmesh.langDictProvider")
12+
13+
14+
suspend fun all(project: Project): List<String> {
15+
return EP_NAME.extensions.flatMap { provider ->
16+
provider.collectFileNames(project)
17+
}
18+
}
19+
}
20+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
你是一个 DDD(领域驱动设计)专家,正在从代码库中构建一个业务上的中英字典作为索引。你需要从给定的代码片段中提取出重要的概念,以便于其它人理解和使用。
2+
3+
- 它不是公共的库 API(如 Spring 等标准库或者平台的 API)、三方库 API(如 OkHttp、Retrofit 等),也不是常用的类名(如 List、Map 等)
4+
- 它是关键业务概念、无法理解的单词或者拼音缩写
5+
- 代码翻译中,不包含任何技术词汇,比如:Controller、Exception、Request、Response、Code、Service、Repository、Mapper、DTO、VO、PO 等
6+
7+
你的返回格式:
8+
9+
| 中文 | 代码翻译 | 描述 |
10+
11+
请根据以下文件名片段,提取出重要的概念:
12+
13+
$context.code

core/src/main/resources/genius/zh/code/indexer.devin

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
你是一个 DDD(领域驱动设计)专家,正在从代码库中构建一个业务上的中英字典作为索引。你需要从给定的代码片段中提取出重要的概念,以便于其它人理解和使用。
2+
3+
- 它不是公共的库 API(如 Spring 等标准库或者平台的 API)、三方库 API(如 OkHttp、Retrofit 等),也不是常用的类名(如 List、Map 等)
4+
- 它是关键业务概念、无法理解的单词或者拼音缩写
5+
- 代码翻译中,不包含任何技术词汇,比如:Controller、Exception、Set、Code、Service、Repository、Mapper、DTO、VO、PO 等
6+
7+
你的返回格式:
8+
9+
| 中文 | 代码翻译 | 描述 |
10+
11+
请根据以下文件名片段,提取出重要的概念:
12+
13+
$context.code
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package cc.unitmesh.idea.indexer.provider
2+
3+
import cc.unitmesh.devti.indexer.provider.LangDictProvider
4+
import com.intellij.ide.highlighter.JavaFileType
5+
import com.intellij.openapi.application.runReadAction
6+
import com.intellij.openapi.project.Project
7+
import com.intellij.psi.search.FileTypeIndex
8+
import com.intellij.psi.search.ProjectScope
9+
10+
class JavaLangDictProvider : LangDictProvider {
11+
override suspend fun collectFileNames(project: Project): List<String> {
12+
val searchScope = ProjectScope.getProjectScope(project)
13+
val javaFiles = runReadAction {
14+
FileTypeIndex.getFiles(JavaFileType.INSTANCE, searchScope)
15+
}
16+
17+
return javaFiles.mapNotNull {
18+
it.nameWithoutExtension
19+
}
20+
}
21+
}

java/src/main/resources/cc.unitmesh.idea.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,7 @@
6161
<!-- <agentObserver implementation="cc.unitmesh.idea.observer.GradleTaskAgentObserver" />-->
6262

6363
<frameworkConfigProvider implementation="cc.unitmesh.idea.provider.SpringFrameworkConfigProvider"/>
64+
65+
<langDictProvider implementation="cc.unitmesh.idea.indexer.provider.JavaLangDictProvider"/>
6466
</extensions>
6567
</idea-plugin>

0 commit comments

Comments
 (0)