跳到主要内容

自定义语言

增强语言支持

我们参考了JetBrains AI Assistant的多语言支持实现,并结合AutoDev的设计原则设计了一系列扩展点。

我们参考了IntelliJ Rust插件的多目标支持实现,并结合设计进行了整合。

要为新语言添加支持,您需要:

  1. settings.gradle.kts中创建新模块,例如:webstormpycharm
  2. 在新模块的build.gradle.kts中进行配置
  3. 在IntelliJ IDEA中同步Gradle
  4. resources/META-INF目录下创建XML文件(如cc.unitmesh.pycharm.xml),并将其导入到plugin/src/main/resources/META-INF/plugin.xml
  5. 创建扩展点

Gradle配置示例:

project(":pycharm") {
intellij {
version.set(pycharmVersion)
plugins.set(pycharmPlugins)
}
dependencies {
implementation(project(":"))
}
}

扩展点

JetBrains AI Assistant扩展点:

<extensionPoints>
<extensionPoint qualifiedName="cc.unitmesh.fileContextBuilder"
beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass"
implements="cc.unitmesh.devti.context.builder.FileContextBuilder"/>
</extensionPoint>

<extensionPoint qualifiedName="cc.unitmesh.classContextBuilder"
beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass"
implements="cc.unitmesh.devti.context.builder.ClassContextBuilder"/>
</extensionPoint>

<extensionPoint qualifiedName="cc.unitmesh.methodContextBuilder"
beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass"
implements="cc.unitmesh.devti.context.builder.MethodContextBuilder"/>
</extensionPoint>

<extensionPoint qualifiedName="cc.unitmesh.variableContextBuilder"
beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass"
implements="cc.unitmesh.devti.context.builder.VariableContextBuilder"/>
</extensionPoint>
</extensionPoints>

AutoDev扩展点:

<extensionPoints>
<extensionPoint qualifiedName="cc.unitmesh.contextPrompter"
interface="cc.unitmesh.devti.provider.ContextPrompter"
dynamic="true"/>
</extensionPoints>

Java/IDEA 示例

<extensions defaultExtensionNs="cc.unitmesh">
<!-- 语言支持 -->
<classContextBuilder language="JAVA"
implementationClass="cc.unitmesh.ide.idea.context.JavaClassContextBuilder"/>

<methodContextBuilder language="JAVA"
implementationClass="cc.unitmesh.ide.idea.context.JavaMethodContextBuilder"/>

<fileContextBuilder language="JAVA"
implementationClass="cc.unitmesh.ide.idea.context.JavaFileContextBuilder"/>

<variableContextBuilder language="JAVA"
implementationClass="cc.unitmesh.ide.idea.context.JavaVariableContextBuilder"/>

<!-- 技术栈绑定 -->
<extensionPoint qualifiedName="cc.unitmesh.contextPrompter"
interface="cc.unitmesh.devti.provider.ContextPrompter"
dynamic="true"/>

<extensionPoint qualifiedName="cc.unitmesh.testContextProvider"
interface="cc.unitmesh.devti.provider.WriteTestService"
dynamic="true"/>

<extensionPoint qualifiedName="cc.unitmesh.chatContextProvider"
interface="cc.unitmesh.devti.provider.context.ChatContextProvider"
dynamic="true"/>
</extensions>