diff --git a/src/main/kotlin/com/github/biomejs/intellijbiome/BiomeIcons.kt b/src/main/kotlin/com/github/biomejs/intellijbiome/BiomeIcons.kt new file mode 100644 index 0000000..8368a85 --- /dev/null +++ b/src/main/kotlin/com/github/biomejs/intellijbiome/BiomeIcons.kt @@ -0,0 +1,8 @@ +package com.github.biomejs.intellijbiome + +import com.intellij.openapi.util.IconLoader + +object BiomeIcons { + @JvmField + val BiomeIcon = IconLoader.getIcon("/icons/pluginIcon.svg", javaClass) +} diff --git a/src/main/kotlin/com/github/biomejs/intellijbiome/lsp/BiomeLspServerSupportProvider.kt b/src/main/kotlin/com/github/biomejs/intellijbiome/lsp/BiomeLspServerSupportProvider.kt index 9c3fe2b..e716e40 100644 --- a/src/main/kotlin/com/github/biomejs/intellijbiome/lsp/BiomeLspServerSupportProvider.kt +++ b/src/main/kotlin/com/github/biomejs/intellijbiome/lsp/BiomeLspServerSupportProvider.kt @@ -1,10 +1,12 @@ package com.github.biomejs.intellijbiome.lsp import com.github.biomejs.intellijbiome.BiomeBundle +import com.github.biomejs.intellijbiome.BiomeIcons import com.github.biomejs.intellijbiome.BiomePackage import com.github.biomejs.intellijbiome.extensions.runBiomeCLI import com.github.biomejs.intellijbiome.listeners.BIOME_CONFIG_RESOLVED_TOPIC import com.github.biomejs.intellijbiome.services.BiomeServerService +import com.github.biomejs.intellijbiome.settings.BiomeConfigurable import com.github.biomejs.intellijbiome.settings.BiomeSettings import com.intellij.execution.ExecutionException import com.intellij.execution.configurations.GeneralCommandLine @@ -13,6 +15,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import com.intellij.platform.lsp.api.* import com.intellij.platform.lsp.api.customization.LspFormattingSupport +import com.intellij.platform.lsp.api.lsWidget.LspServerWidgetItem import com.intellij.util.SmartList @@ -34,6 +37,11 @@ class BiomeLspServerSupportProvider : LspServerSupportProvider { val executable = BiomePackage(project).binaryPath(configPath, false) ?: return serverStarter.ensureServerStarted(BiomeLspServerDescriptor(project, executable, configPath)) } + + override fun createLspServerWidgetItem(lspServer: LspServer, currentFile: VirtualFile?) = LspServerWidgetItem( + lspServer, currentFile, + BiomeIcons.BiomeIcon, BiomeConfigurable::class.java + ) } @Suppress("UnstableApiUsage") diff --git a/src/main/kotlin/com/github/biomejs/intellijbiome/widgets/BiomeStatusBarWidgetFactory.kt b/src/main/kotlin/com/github/biomejs/intellijbiome/widgets/BiomeStatusBarWidgetFactory.kt deleted file mode 100644 index 85b8200..0000000 --- a/src/main/kotlin/com/github/biomejs/intellijbiome/widgets/BiomeStatusBarWidgetFactory.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.github.biomejs.intellijbiome.widgets - -import com.intellij.openapi.project.Project -import com.intellij.openapi.wm.StatusBarWidget -import com.intellij.openapi.wm.StatusBarWidgetFactory - -class BiomeStatusBarWidgetFactory : StatusBarWidgetFactory { - override fun getId(): String { - return "BiomeWidget" - } - - override fun getDisplayName(): String { - return "Biome" - } - - override fun createWidget(project: Project): StatusBarWidget { - return BiomeWidget(project) - } -} diff --git a/src/main/kotlin/com/github/biomejs/intellijbiome/widgets/BiomeWidget.kt b/src/main/kotlin/com/github/biomejs/intellijbiome/widgets/BiomeWidget.kt deleted file mode 100644 index be1908e..0000000 --- a/src/main/kotlin/com/github/biomejs/intellijbiome/widgets/BiomeWidget.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.github.biomejs.intellijbiome.widgets - -import com.github.biomejs.intellijbiome.BiomeBundle -import com.github.biomejs.intellijbiome.BiomePackage -import com.github.biomejs.intellijbiome.listeners.BIOME_CONFIG_RESOLVED_TOPIC -import com.github.biomejs.intellijbiome.listeners.BiomeConfigResolvedListener -import com.github.biomejs.intellijbiome.lsp.BiomeLspServerSupportProvider -import com.github.biomejs.intellijbiome.settings.BiomeSettings -import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.progress.ProgressManager -import com.intellij.openapi.project.Project -import com.intellij.openapi.wm.StatusBarWidget -import com.intellij.openapi.wm.StatusBarWidget.WidgetPresentation -import com.intellij.openapi.wm.impl.status.EditorBasedWidget -import com.intellij.platform.lsp.api.LspServerManager -import com.intellij.platform.lsp.impl.LspServerImpl - -class BiomeWidget(project: Project) : EditorBasedWidget(project), StatusBarWidget, - StatusBarWidget.MultipleTextValuesPresentation { - private val logger: Logger = Logger.getInstance(javaClass) - private val biomePackage = BiomePackage(project) - - init { - project - .messageBus - .connect(this) - .subscribe(BIOME_CONFIG_RESOLVED_TOPIC, object : BiomeConfigResolvedListener { - override fun resolved(version: String) { - update() - } - }) - } - - override fun ID(): String { - return javaClass.name - } - - override fun getPresentation(): WidgetPresentation { - return this - } - - override fun getSelectedValue(): String? { - val settings = BiomeSettings.getInstance(project) - if (!settings.isEnabled()) { - return null - } - - val progressManager = ProgressManager.getInstance() - val version = progressManager.runProcessWithProgressSynchronously({ - biomePackage.versionNumber() - }, BiomeBundle.message("biome.loading"), true, project) - - if (version.isNullOrEmpty()) { - return null - } - - return BiomeBundle.message("biome.widget.version", version) - } - - override fun getTooltipText(): String { - val lspServerManager = LspServerManager.getInstance(project) - val lspServer = lspServerManager.getServersForProvider(BiomeLspServerSupportProvider::class.java).firstOrNull() - - return when (lspServer) { - is LspServerImpl -> { - if (lspServer.isRunning) { - BiomeBundle.message("biome.language.server.is.running") - } else { - BiomeBundle.message("biome.language.server.is.stopped") - } - } - - else -> { - BiomeBundle.message("biome.language.server.is.stopped") - } - } - } - - private fun update() { - if (myStatusBar == null) { - logger.warn("Failed to update biome statusbar") - return - } - - myStatusBar!!.updateWidget(ID()) - } - -} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 961974d..d179bfd 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -24,8 +24,6 @@ -