- Add PySdkTransferredRootsListener that handles root transfer and
virtualenv exclusion reactively on PySdkListener.TOPIC
- Remove switchToSdk function from AddInterpreterActions
- Register listener in intellij.python.community.impl.xml
- Update PySdkPopupFactory, advancedActions, PySdkFromEnvironmentVariable
to set module.pythonSdk directly
(cherry picked from commit 989a0d0d0be5722a92be8709868b97343e4889ae)
GitOrigin-RevId: b5d01f47409b127020a3021b1f3dc7ff8147ce9c
- Convert PyModuleService (abstract class) to Kotlin interface
- Convert PyModuleServiceImpl to Kotlin with project-level scope
- Change from application-level to project-level service
- Add findPythonSdkWaitingForProjectModel suspend method that awaits
JPS project model loading before resolving the SDK
- Mark old findPythonSdk as @ApiStatus.Obsolete
- Update all call sites to use getInstance(project)
(cherry picked from commit 4dc39a57dbc6063d37522fac8befe01329c10cde)
GitOrigin-RevId: 529405c76d8e2fa503ccc40e15dd0834dd59f469
JupyterDebugBackendSwitchHandler — new handler for backend switching: restarts the Jupyter kernel for a clean state.
PyDebuggerBackendSwitcherAction — Beta instead of New for debugpy;
"Report Issue" now pre-fills the description with system information
Merge-request: IJ-MR-195507
Merged-by: Egor Eliseev <Egor.Eliseev@jetbrains.com>
(cherry picked from commit ba620baef07b931fe85f62e582dd075fdc2517c1)
GitOrigin-RevId: 101da0656ca06fcfcfee2c687a7ade4920b92eae
Simply modify the configuration in the background and always restart the session.
If the session has already ended, hide the quick fix.
Merge-request: IJ-MR-194323
Merged-by: Egor Eliseev <Egor.Eliseev@jetbrains.com>
(cherry picked from commit fd6c55fda3950e756d62bf508b4e274f069282c0)
GitOrigin-RevId: a39a345e6ad5ae121186680585c7e22f66877807
Add a segmented button to Settings | Python | Debugger
Add ComboBoxAction in the Debug tool window toolbar (Python.DebuggerBackendSwitcher)
Show a one-time GotIt tooltip on the first debug session
Show a confirmation dialog when switching backend during an active session
Merge-request: IJ-MR-194172
Merged-by: Egor Eliseev <Egor.Eliseev@jetbrains.com>
(cherry picked from commit 965677f0668b3493290f9f3bb59ed6e7da2f2f38)
GitOrigin-RevId: 7f0429d17e817a9e0c043b25a69d244a064320c6
PyDebugProcess implements PyStepIntoSupport (pydevd path unchanged).
PythonDapDebugProcess implements PyStepIntoSupport:
justMyCode=true: "Step Into My Code" enabled, "Step Into" disabled;
justMyCode=false → "Step Into My Code" disabled with a tooltip.
Add PyDapStepIntoAction as a DAP-aware replacement for the platform "Step Into" action in the debug toolbar.
Merge-request: IJ-MR-193319
Merged-by: Egor Eliseev <Egor.Eliseev@jetbrains.com>
(cherry picked from commit 6ee6b7afda307e11e4d477bfa9c05a2f80734b6e)
GitOrigin-RevId: afc464225112e49b7404dc2277f11f78023f9a56
- Add PyPackageName.normalizeProjectName() per PEP 503 name normalization spec
- Normalize project names in uv, poetry, and hatch project generators
- Fix hatch createNewProject to use NioFiles.copyRecursively instead of broken EEL move
- Add background progress indicators for module structure creation and SDK setup
- Refresh VFS with markDirtyAndRefresh after module structure creation
- Add TraceContext to project generation and packaging tool window coroutines
(cherry picked from commit b64dfb4ae541e4a220698d804aec3fe95103bdf2)
IJ-MR-194426
GitOrigin-RevId: 0a1212d70d8136e1ba8821b736d09e00d78f310e
- Add a dropdown menu listing available interpreters (venv, conda, system, etc.)
instead of a single "Configure Python Interpreter" link
- Introduce BusyGuardExecutor interface and InterpreterFixExecutor service
that shares busy state across all notification panels via MutableStateFlow;
while a fix is running, panels show a spinner instead of action links
- Move SDK creation work off EDT through the executor's coroutine scope
- Refresh module content roots after SDK creation instead of full VFS refresh
- Remove redundant SdkConfigurationService and InspectionRunnerService,
consolidating their scopes into InterpreterFixExecutor
(cherry picked from commit 513beeaf0565721540aec4e248ea00ba7948e0cf)
GitOrigin-RevId: b1eed6952e43b229b01363a0ddac9b9269f241f3
- Update notification text to be shorter and more meaningful
- Add [beta] label to notification title and settings checkbox
- Use "workspace structure" wording consistently
(cherry picked from commit 7df0d727e61fa877a0ff9f83aed88c1c9b8cbd84)
IJ-MR-193755
GitOrigin-RevId: 73f4df4dd4f5de92a98d39a7746550d26faa3272
This MR cherry picks changes done for PY-87723 and PY-87578
Merge-request: IJ-MR-193482
Merged-by: David Lysenko <david.lysenko@jetbrains.com>
GitOrigin-RevId: c74229ed48ae8702667dda201613a2d0c3f25369
Add PyProjectModelSettings with persistent state for pyproject.toml
workspace configuration. Show a notification when pyproject.toml is
detected, allowing users to enable the feature or dismiss it.
Convert PythonContentEntriesConfigurable to Kotlin and guard the
checkbox with the registry flag.
# Conflicts:
# community/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/AutoImportstarter.kt
GitOrigin-RevId: 4f07afe0ad1179f99c8a05f596379e83c7b299fc
Replace the LocalInspectionTool-based "no interpreter" warning with an
EditorNotificationProvider banner. This extends coverage to pyproject.toml
and README.md files (in addition to .py files) and simplifies the fix
architecture.
Key changes:
- Delete PyInterpreterInspection, replace with PyInterpreterNotificationProvider
- Add PyInterpreterNotificationFileOpenedListener for split-editor timing
- Replace LocalQuickFix with a simpler InterpreterFix interface (no ProblemDescriptor)
- Simplify PyAsyncFileInspectionRunner: use refreshAfterWrite for flicker-free
cache refresh, use EditorNotifications instead of DaemonCodeAnalyzer
- Remove PyInterpreterInspectionSuppressor (no longer needed without inspection)
- Add isPythonModule check for the module
- Move bundle keys from PyPsiBundle to PyBundle with python.sdk.* prefix
- Extract CONFIGURABLE_ID constant in PyActiveSdkModuleConfigurable
IJ-MR-192977
(cherry picked from commit 6b3584d6c6beac53f4b8f0abb9a34e698b4ad03f)
GitOrigin-RevId: 1df48bbfbade2f7f31ffae7b02a0cab2f1f68389
Support a mechanism for recommending a tool installation if we're
confident it should be used for SDK configuration. For now, it only
supports uv (with uv.lock check).
It also fixes PY-87744, since we dropped all usages of PyDetectedSdk in
our SDK configurators.
GitOrigin-RevId: f99a1089025079313db9aae09e3cfc0205e7e37f
Migrate PyIntegratedToolsConfigurable from deprecated PyPackageManagerUI
to PythonPackageManagerUI with modal progress, since the install is
triggered from a modal settings dialog where background progress is not
visible.
Also:
- surface InvalidPathException as ConfigurationException in
setRequirementsPath instead of silently logging
- detach PythonSdkUpdater.scheduleUpdate into a separate coroutine
to avoid blocking refreshPaths
- increase flaky test timeouts in PythonPackageManagerTest
Merge-request: IJ-MR-191326
Merged-by: Vitaly Legchilkin <Vitaly.Legchilkin@jetbrains.com>
(cherry picked from commit 9fe0b8d94456e73fca90b1b6cac447f20a4cbcd9)
IJ-MR-191326
GitOrigin-RevId: cdf12afe10f63e97872f5b56be2ed983461eec20
Rename bundle keys from tracecontext.* to trace.context.*, consolidate
tool-specific detection contexts into a parameterized key, and add new
trace contexts for ToolDetectionService and PyCondaEnvProvider.
GitOrigin-RevId: 8c3933c324366db13934a818b3463a28f4494ae6
This window only contained pipenv, there was no poetry/uv/hatch/etc.
This field is only used to setup a path to tool, but since we do in the
dialogs during SDK setup, there's no need in this field anymore.
GitOrigin-RevId: 07f9a4e8bccc2b41152dd07bee463037f80400ea
[pycharm] PY-87123 Synchronize build files
[pycharm] PY-87123 Add icons for process weight
[pycharm] PY-87123 Extract Pipenv icons/mapper into a pipenv module
[pycharm] PY-87123 Extract Conda icons/mapper into a separate module
[pycharm] PY-87459 Fix process tree autoscroll
Fixes an issue in which the process tree would not automatically scroll up
after new processes are added.
[pycharm] PY-87112 Change the icon of the tool window to a new one
[pycharm] PY-87123 Rename `Styling` object to `OutputSectionStyling`
This is done to match the naming of `TreeSectionStyling`.
[pycharm] PY-87123 Render spinner instead of an icon for running processes
[pycharm] PY-87123 Refactor TreeSection
* Extract tree content into its own composable
* Extract styling values into a styling object
* Remove redundant icons that can be constructed programmatically
[pycharm] PY-87123 Address feedback
[pycharm] PY-87123 Implement custom styling for critical errors
Critical errors are ones that are displayed to the user via the error sink.
[pycharm] PY-87123 Add tool-dependant icons to POTW process tree
[pycharm] PY-87123 Implement ProcessOutputIconMapping extension point
The extension point provides a way for tooling-related modules to define
custom mapping between file extensions and icons that should be used by
the Process Output Tool Window.
Merge-request: IJ-MR-189367
Merged-by: David Lysenko <david.lysenko@jetbrains.com>
GitOrigin-RevId: 0d728779f04f2066e929954681ec7a23741f5f74
1. Project rebuild process disposes modules and kills `PyV3` project generation (i.e. Django). We now skip autoimport for newly generated projects, and PyV3 calls `startAutoImportIfNeeded` after project generation.
2. EP introduced to update run configurations when module gets renamed.
GitOrigin-RevId: 55183da9c1f9d1e96e837e970254443fbaec6b5e
Non-project files by default are not indexed, do not have a module and do not have an SDK.
`PyExternalFilesIndexService` is resposible for adding a custom entities to the workspace model.
Space-RevId: dd7c50009e56dea0d69914c9f7f1524c7e77fe20
GitOrigin-RevId: cdfa2a578a01431fb9e0a06ce820c1d9b0f3fc0d
This was done for two reasons. To support these configurators in Python
plugin, not only PyCharm. And to make it easier to split tools by plugins.
GitOrigin-RevId: 9954c0c70be4e0d87405e88a0547ba4984db3dc1
This API was introduced for pre-Targets API interpreter introspection.
Now that Targets API is the only implementation and the corresponding
flag was removed in ab0469410b4a699ce516c2054e38b63753c726fb,
all the target-specific skeleton generators are no longer used
(they were created in PySkeletonRefresher#createRemoteSkeletonGenerator).
GitOrigin-RevId: 12d391970e49f3c2f841fb1bc41cd4ef9cc94297
- introduce the language-name order for the options
- provide the id for each CodeFoldingOptionsProvider
GitOrigin-RevId: cad30078fc4ff3be6584c4890a5deccc3136f794
When the user typed in the search field without a configured interpreter:
1. textChanged → handleSearch() → accesses manager property
2. manager getter accesses managerUI.manager
3. managerUI is lateinit var, NOT initialized when sdk == null
4. UninitializedPropertyAccessException thrown during Swing text rendering
5. Exception corrupts Swing component state → text displays reversed
Fix:
- Add early return in handleSearch() when currentSdk is null
GitOrigin-RevId: 01f5607c8150ca73cc96fdd691820b08c4de96fa