(IDEA-327207) Settings Transfer: add an extension point for the third-party plugin import

GitOrigin-RevId: 3ee19367f23cc513c27dc7c80dd75b268855161e
This commit is contained in:
Ivan Migalev
2023-10-26 18:08:08 +02:00
committed by intellij-monorepo-bot
parent 88e848a924
commit f9169b0c66
4 changed files with 102 additions and 77 deletions

View File

@@ -1,86 +1,106 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.customize.transferSettings.providers.vscode.mappings
import com.intellij.ide.customize.transferSettings.TransferableIdeId
import com.intellij.ide.customize.transferSettings.db.KnownPlugins
import com.intellij.ide.customize.transferSettings.models.FeatureInfo
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.extensions.ExtensionPointName
object PluginsMappings {
private val theMap = mapOf(
// Plugins
"emilast.logfilehighlighter" to KnownPlugins.Ideolog,
"xinyayang0506.log-analysis" to KnownPlugins.Ideolog,
"vscodevim.vim" to KnownPlugins.IdeaVim,
"msveden.teamcity-checker" to KnownPlugins.TeamCity,
/**
* Allows to register plugins of third-party products for importing.
*/
interface ThirdPartyPluginMapping {
// Features
"donjayamanne.githistory" to KnownPlugins.Git,
"eamodio.gitlens" to KnownPlugins.Git,
"waderyan.gitblame" to KnownPlugins.Git,
"mhutchie.git-graph" to KnownPlugins.Git,
"ritwickdey.liveserver" to KnownPlugins.WebSupport,
"ms-azuretools.vscode-docker" to KnownPlugins.Docker,
"vscjava.vscode-java-pack" to KnownPlugins.Java,
"redhat.java" to KnownPlugins.Java,
"vscjava.vscode-maven" to KnownPlugins.Maven,
"vscjava.vscode-gradle" to KnownPlugins.Gradle,
"vscjava.vscode-java-debug" to KnownPlugins.Debugger,
"donjayamanne.javadebugger" to KnownPlugins.Debugger,
"mathiasfrohlich.Kotlin" to KnownPlugins.Kotlin,
"fwcd.kotlin" to KnownPlugins.Kotlin,
"ms-vscode-remote.remote-wsl" to KnownPlugins.WindowsSubsystemLinux,
"bungcip.better-toml" to KnownPlugins.Toml,
"Vue.volar" to KnownPlugins.Vue,
//"GitHub.copilot-chat" to KnownPlugins.AiAssistant,
companion object {
val EP_NAME: ExtensionPointName<ThirdPartyPluginMapping> = ExtensionPointName("com.intellij.transferSettings.pluginMapping")
}
// Language packs
"ms-ceintl.vscode-language-pack-zh-hans" to KnownPlugins.ChineseLanguage,
"ms-ceintl.vscode-language-pack-ja" to KnownPlugins.KoreanLanguage,
"ms-ceintl.vscode-language-pack-ko" to KnownPlugins.JapaneseLanguage,
fun mapPlugin(externalProduct: TransferableIdeId, pluginId: String): FeatureInfo?
}
// New mappings
"ms-dotnettools.csharp" to KnownPlugins.CSharp,
"jchannon.csharpextensions" to KnownPlugins.CSharp,
"ms-dotnettools.csdevkit" to KnownPlugins.CSharp,
"kreativ-software.csharpextensions" to KnownPlugins.CSharp,
"jmrog.vscode-nuget-package-manager" to KnownPlugins.NuGet,
"formulahendry.dotnet-test-explorer" to KnownPlugins.TestExplorer,
"formulahendry.dotnet" to KnownPlugins.RunConfigurations,
"unity.unity-debug" to KnownPlugins.Unity,
"tobiah.unity-tools" to KnownPlugins.Unity,
"kleber-swf.unity-code-snippets" to KnownPlugins.Unity,
"jorgeserrano.vscode-csharp-snippets" to KnownPlugins.LiveTemplates,
"fudge.auto-using" to KnownPlugins.CSharp,
"streetsidesoftware.code-spell-checker" to KnownPlugins.SpellChecker,
"k--kato.docomment" to KnownPlugins.CSharp,
"formulahendry.code-runner" to KnownPlugins.RunConfigurations,
"wayou.vscode-todo-highlight" to KnownPlugins.LanguageSupport,
"icsharpcode.ilspy-vscode" to KnownPlugins.DotNetDecompiler,
"editorconfig.editorconfig" to KnownPlugins.editorconfig,
"ms-vscode.vscode-typescript-tslint-plugin" to KnownPlugins.TSLint,
"github.vscode-pull-request-github" to KnownPlugins.Git,
"mtxr.sqltools" to KnownPlugins.DatabaseSupport,
"scala-lang.scala" to KnownPlugins.Scala,
"Dart-Code.dart-code" to KnownPlugins.Dart,
"Dart-Code.flutter" to KnownPlugins.Flutter,
"vscjava.vscode-lombok" to KnownPlugins.Lombok,
"esbenp.prettier-vscode" to KnownPlugins.Prettier,
"ms-kubernetes-tools.vscode-kubernetes-tools" to KnownPlugins.Kubernetes,
)
@Suppress("SpellCheckingInspection")
private val mainPluginMap = mapOf(
// Plugins
"emilast.logfilehighlighter" to KnownPlugins.Ideolog,
"xinyayang0506.log-analysis" to KnownPlugins.Ideolog,
"vscodevim.vim" to KnownPlugins.IdeaVim,
"msveden.teamcity-checker" to KnownPlugins.TeamCity,
fun pluginIdMap(pluginId: String): FeatureInfo? {
if (Registry.`is`("transferSettings.vscode.showRust") && pluginId == "rust-lang.rust-analyzer") {
return KnownPlugins.Rust
// Features
"donjayamanne.githistory" to KnownPlugins.Git,
"eamodio.gitlens" to KnownPlugins.Git,
"waderyan.gitblame" to KnownPlugins.Git,
"mhutchie.git-graph" to KnownPlugins.Git,
"ritwickdey.liveserver" to KnownPlugins.WebSupport,
"ms-azuretools.vscode-docker" to KnownPlugins.Docker,
"vscjava.vscode-java-pack" to KnownPlugins.Java,
"redhat.java" to KnownPlugins.Java,
"vscjava.vscode-maven" to KnownPlugins.Maven,
"vscjava.vscode-gradle" to KnownPlugins.Gradle,
"vscjava.vscode-java-debug" to KnownPlugins.Debugger,
"donjayamanne.javadebugger" to KnownPlugins.Debugger,
"mathiasfrohlich.Kotlin" to KnownPlugins.Kotlin,
"fwcd.kotlin" to KnownPlugins.Kotlin,
"ms-vscode-remote.remote-wsl" to KnownPlugins.WindowsSubsystemLinux,
"bungcip.better-toml" to KnownPlugins.Toml,
"Vue.volar" to KnownPlugins.Vue,
//"GitHub.copilot-chat" to KnownPlugins.AiAssistant,
// Language packs
"ms-ceintl.vscode-language-pack-zh-hans" to KnownPlugins.ChineseLanguage,
"ms-ceintl.vscode-language-pack-ja" to KnownPlugins.KoreanLanguage,
"ms-ceintl.vscode-language-pack-ko" to KnownPlugins.JapaneseLanguage,
// New mappings
"ms-dotnettools.csharp" to KnownPlugins.CSharp,
"jchannon.csharpextensions" to KnownPlugins.CSharp,
"ms-dotnettools.csdevkit" to KnownPlugins.CSharp,
"kreativ-software.csharpextensions" to KnownPlugins.CSharp,
"jmrog.vscode-nuget-package-manager" to KnownPlugins.NuGet,
"formulahendry.dotnet-test-explorer" to KnownPlugins.TestExplorer,
"formulahendry.dotnet" to KnownPlugins.RunConfigurations,
"unity.unity-debug" to KnownPlugins.Unity,
"tobiah.unity-tools" to KnownPlugins.Unity,
"kleber-swf.unity-code-snippets" to KnownPlugins.Unity,
"jorgeserrano.vscode-csharp-snippets" to KnownPlugins.LiveTemplates,
"fudge.auto-using" to KnownPlugins.CSharp,
"streetsidesoftware.code-spell-checker" to KnownPlugins.SpellChecker,
"k--kato.docomment" to KnownPlugins.CSharp,
"formulahendry.code-runner" to KnownPlugins.RunConfigurations,
"wayou.vscode-todo-highlight" to KnownPlugins.LanguageSupport,
"icsharpcode.ilspy-vscode" to KnownPlugins.DotNetDecompiler,
"editorconfig.editorconfig" to KnownPlugins.editorconfig,
"ms-vscode.vscode-typescript-tslint-plugin" to KnownPlugins.TSLint,
"github.vscode-pull-request-github" to KnownPlugins.Git,
"mtxr.sqltools" to KnownPlugins.DatabaseSupport,
"scala-lang.scala" to KnownPlugins.Scala,
"Dart-Code.dart-code" to KnownPlugins.Dart,
"Dart-Code.flutter" to KnownPlugins.Flutter,
"vscjava.vscode-lombok" to KnownPlugins.Lombok,
"esbenp.prettier-vscode" to KnownPlugins.Prettier,
"ms-kubernetes-tools.vscode-kubernetes-tools" to KnownPlugins.Kubernetes,
)
class MainPluginMapping : ThirdPartyPluginMapping {
override fun mapPlugin(externalProduct: TransferableIdeId, pluginId: String): FeatureInfo? {
if (externalProduct != TransferableIdeId.VSCode) {
return null
}
return theMap[pluginId]
}
fun idsList(): Collection<String> {
return theMap.keys
}
fun originalPluginNameOverride(pluginId: String): Nothing? = when (pluginId) {
//"emilast.logfilehighlighter" to "Log File Highlighter"
else -> null
return mainPluginMap[pluginId]
}
}
object PluginsMappings {
fun pluginIdMap(pluginId: String): FeatureInfo? {
for (mapping in ThirdPartyPluginMapping.EP_NAME.extensionList) {
val feature = mapping.mapPlugin(TransferableIdeId.VSCode, pluginId)
if (feature != null) return feature
}
return null
}
}

View File

@@ -76,7 +76,7 @@ class PluginsParser(private val settings: Settings) {
settings.keymap = keymapPluginId
}
val pluginId = PluginsMappings.pluginIdMap(foreignPluginId) ?: return
val originalPluginName = root["displayName"]?.textValue() ?: PluginsMappings.originalPluginNameOverride(foreignPluginId)
val originalPluginName = root["displayName"]?.textValue()
if (originalPluginName == null && (pluginId == KnownPlugins.DummyPlugin || pluginId == KnownPlugins.DummyBuiltInFeature)) {
return

View File

@@ -536,5 +536,10 @@
<extensionPoint name="uiDslRendererProvider" interface="com.intellij.ui.dsl.listCellRenderer.UiDslRendererProvider" dynamic="true"/>
<extensionPoint name="notificationRouter" interface="com.intellij.notification.NotificationRouter" dynamic="true"/>
<!-- Settings Transfer -->
<extensionPoint name="transferSettings.pluginMapping"
interface="com.intellij.ide.customize.transferSettings.providers.vscode.mappings.ThirdPartyPluginMapping"
dynamic="true" />
</extensionPoints>
</idea-plugin>

View File

@@ -1710,10 +1710,6 @@
defaultValue="false"
description="Import only projects that contain cargo.toml file"
/>
<registryKey key="transferSettings.vscode.showRust"
defaultValue="false"
description="Suggest rust"
/>
<toolbarQuickAction implementationClass="com.intellij.openapi.wm.impl.headertoolbar.BuildQuickAction"
listGroupID="MainToolbarQuickActions.Run"/>
@@ -1727,6 +1723,10 @@
<ideEventQueueDispatcher implementation="com.intellij.ide.ui.laf.LaFMnemonicDispatcher"/>
<registryKey key="code.toolbar.debugger.actions" defaultValue="true" description="Add debugger actions into floating toolbar."/>
<!-- Settings Transfer -->
<transferSettings.pluginMapping id="MainPluginMapping"
implementation="com.intellij.ide.customize.transferSettings.providers.vscode.mappings.MainPluginMapping" />
</extensions>
<applicationListeners>