跳到主要内容

调试新语言支持

在JetBrains的IDE中,某些语言的支持不够完善,有些语言甚至完全没有官方支持。

  • 支持完善的语言会有专属IDE,例如Go语言有GoLand
  • 支持不足的语言缺乏IDE支持,例如CLion中的Rust支持(RustRover出现之前)

因此我们需要为这些语言配置插件支持

调试配置

调试时,我们直接使用.idea/runConfigurations目录下的运行配置,可以通过复制现有配置进行修改。

这是一个[RustRust.xml]的配置示例:

<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Run Rust" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="-PbaseIDE=idea -Plang=rust" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value=":plugin:runIde" />
</list>
</option>
<option name="vmOptions" value="" />
</ExternalSystemSettings>
<GradleScriptDebugEnabled>false</GradleScriptDebugEnabled>
<method v="2" />
</configuration>
</component>

我们通过scriptParameters参数向gradle脚本传递baseIDElang参数:

./gradlew :plugin:runIde -PbaseIDE=idea -Plang=rust

Gradle配置

在Gradle脚本(build.gradle.kts)中可以进行插件配置:

project(":plugin") {
apply {
plugin("org.jetbrains.changelog")
}

version = prop("pluginVersion") + "-$platformVersion"

intellij {
pluginName.set(basePluginArchiveName)
val pluginList: MutableList<String> = mutableListOf("Git4Idea")
when (lang) {
"idea" -> {
pluginList += javaPlugins
}
"python" -> {
pluginList += pycharmPlugins
}
"go" -> {
pluginList += listOf("org.jetbrains.plugins.go")
}
"rust" -> {
pluginList += rustPlugins
}
}

plugins.set(pluginList)
}

// ...
}

rustPlugins中可以看到Rust语言所需的插件列表:

val rustPlugins = listOf(
prop("rustPlugin"),
"org.toml.lang"
)

prop("rustPlugin")定义在gradle.properties文件中,该配置会根据不同IDE版本加载对应插件版本:

  • gradle-222.properties
  • gradle-233.properties

gradle-222.properties中定义Rust插件版本:

rustPlugin=org.rust.lang:0.4.185.5086-222

gradle-233.properties中定义Rust插件版本:

rustPlugin=com.jetbrains.rust:233.21799.284

Rust调试配置

Rust开发的注意事项:

由于JetBrains的策略调整,Rust IDE插件有两个不同版本: