mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[pycharm] PY-90736 Jupyter: add Marimo plugin promotion
(cherry picked from commit 399a22c7931f5983b1a719a7d66524b69e6bbb1b) GitOrigin-RevId: 3760dcfccabb04e576836963561f2dbbbcec05d1
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1e92a93c90
commit
910239dd08
@@ -162,6 +162,7 @@
|
||||
|
||||
<pluginSuggestionProvider order="first" implementation="com.jetbrains.python.suggestions.PycharmProSuggestionProvider"/>
|
||||
<pluginSuggestionProvider implementation="com.jetbrains.python.suggestions.PythonDapPluginSuggestionProvider"/>
|
||||
<pluginSuggestionProvider implementation="com.jetbrains.python.suggestions.MarimoSuggestionProvider"/>
|
||||
<postStartupActivity implementation="com.jetbrains.python.poetry.PoetryPyProjectTomlPostStartupActivity"/>
|
||||
<postStartupActivity implementation="com.jetbrains.python.psi.resolve.PyPartialStubMarkersInvalidatorActivity"/>
|
||||
<postStartupActivity implementation="com.jetbrains.python.debugger.PyDebuggerBackendToolWindowSetup"/>
|
||||
|
||||
@@ -1627,6 +1627,7 @@ advertiser.python.dap.plugin.enable.text=Enable Plugin
|
||||
debugger.dap.plugin.install.got.it.header=Try the Python DAP Debugger plugin
|
||||
debugger.dap.plugin.install.got.it.text=Install the Python DAP Debugger plugin for faster and more reliable Python debugging with debugpy
|
||||
debugger.dap.plugin.enable.got.it.text=Enable the Python DAP Debugger plugin for faster and more reliable Python debugging with debugpy
|
||||
advertiser.marimo.plugin.suggestion.text=Open and run marimo reactive notebooks by installing the marimo plugin.
|
||||
|
||||
action.PyInstallPackage.text=Install
|
||||
action.PyInstallPackageAction.text=Advanced Package Install\u2026
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.jetbrains.python.suggestions
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.FileIndexFacade
|
||||
import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PluginSuggestion
|
||||
import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PluginSuggestionProvider
|
||||
import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.buildSuggestionIfNeeded
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.jetbrains.python.PyBundle
|
||||
import com.jetbrains.python.PythonFileType
|
||||
import com.jetbrains.python.psi.PyFile
|
||||
import com.jetbrains.python.pyi.PyiFile
|
||||
|
||||
private const val MARIMO_PLUGIN_ID: String = "io.marimo.notebook"
|
||||
private const val MARIMO_PLUGIN_NAME: String = "marimo"
|
||||
private const val MARIMO_PLUGIN_SUGGESTION_DISMISSED_KEY: String = "marimo.plugin.suggestion.dismissed"
|
||||
|
||||
internal class MarimoSuggestionProvider : PluginSuggestionProvider {
|
||||
override fun getSuggestion(project: Project, file: VirtualFile): PluginSuggestion? {
|
||||
if (file.fileType != PythonFileType.INSTANCE || FileIndexFacade.getInstance(project).isInLibraryClasses(file)) {
|
||||
return null
|
||||
}
|
||||
|
||||
val psiFile = PsiManager.getInstance(project).findFile(file)
|
||||
if (psiFile == null || psiFile is PyiFile || psiFile !is PyFile || !psiFile.importsMarimo()) return null
|
||||
|
||||
return buildSuggestionIfNeeded(
|
||||
project,
|
||||
pluginIds = listOf(MARIMO_PLUGIN_ID),
|
||||
pluginName = MARIMO_PLUGIN_NAME,
|
||||
suggestionText = PyBundle.message("advertiser.marimo.plugin.suggestion.text"),
|
||||
suggestionDismissKey = MARIMO_PLUGIN_SUGGESTION_DISMISSED_KEY,
|
||||
)
|
||||
}
|
||||
|
||||
private fun PyFile.importsMarimo(): Boolean {
|
||||
val imports = fromImports.mapNotNull { it.importSourceQName?.firstComponent } +
|
||||
importTargets.mapNotNull { it.importedQName?.firstComponent }
|
||||
return imports.contains("marimo")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user