From 6061cfc7d68cccf4d8056dca78e6e3db778f9d71 Mon Sep 17 00:00:00 2001 From: Ilia Zakoulov Date: Thu, 21 Aug 2025 19:03:58 +0200 Subject: [PATCH] PY-83395: Add registry keys to tweak python root detection GitOrigin-RevId: 9615ca048c30da26d0bed1a4c26ac7e7ea4e2b70 --- .../intellij.python.community.impl.xml | 4 ++++ .../PyUnresolvedReferencesInspection.kt | 7 +++++++ .../module/PySourceRootDetectedNotificationPanel.kt | 11 +++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/python/pluginResources/intellij.python.community.impl.xml b/python/pluginResources/intellij.python.community.impl.xml index fcd71f3a22bb..e6b597eb88ff 100644 --- a/python/pluginResources/intellij.python.community.impl.xml +++ b/python/pluginResources/intellij.python.community.impl.xml @@ -620,6 +620,10 @@ key="python.sdk.installation.notification.group"/> + + + + diff --git a/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt b/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt index fe25700bf931..19aa3e47ee4f 100644 --- a/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt +++ b/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt @@ -16,6 +16,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.util.Key +import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.vfs.VirtualFile import com.intellij.profile.codeInspection.InspectionProjectProfileManager import com.intellij.psi.PsiElement @@ -118,6 +119,9 @@ class PyUnresolvedReferencesInspection : PyUnresolvedReferencesInspectionBase() } override fun getAddSourceRootQuickFix(node: PyElement): LocalQuickFix? { + if (!Registry.`is`("python.source.root.detection.enabled")) { + return null + } val importStatementBase = PsiTreeUtil.getParentOfType(node, PyAstImportStatementBase::class.java, true) ?: return null @@ -159,6 +163,9 @@ class PyUnresolvedReferencesInspection : PyUnresolvedReferencesInspectionBase() val resolveResult: List = resolveInRoot(qname, containingDirectory, context) if (!resolveResult.isEmpty()) { project.getService(PySourceRootDetectionService::class.java).onSourceRootDetected(containingDirectory) + if (!Registry.`is`("python.source.root.suggest.quickfix") || !Registry.`is`("python.source.root.detection.enabled")) { + return null + } return PyMarkDirectoryAsSourceRootQuickFix(project, containingDirectory) } } diff --git a/python/src/com/jetbrains/python/module/PySourceRootDetectedNotificationPanel.kt b/python/src/com/jetbrains/python/module/PySourceRootDetectedNotificationPanel.kt index b02802a25d3e..d9e925549f71 100644 --- a/python/src/com/jetbrains/python/module/PySourceRootDetectedNotificationPanel.kt +++ b/python/src/com/jetbrains/python/module/PySourceRootDetectedNotificationPanel.kt @@ -4,6 +4,7 @@ package com.jetbrains.python.module import com.intellij.openapi.fileEditor.FileEditor import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl import com.intellij.openapi.project.Project +import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.vfs.VirtualFile import com.intellij.ui.EditorNotificationPanel import com.intellij.ui.EditorNotificationProvider @@ -14,10 +15,16 @@ import java.util.function.Function import javax.swing.JComponent internal class PySourceRootDetectedNotificationPanel : EditorNotificationProvider { - override fun collectNotificationData(project: Project, file: VirtualFile): Function { + override fun collectNotificationData(project: Project, file: VirtualFile): Function? { + val isEnabled = Registry.`is`("python.source.root.suggest.notification") && Registry.`is`("python.source.root.detection.enabled") + if (!isEnabled) { + return null + } + if (file.fileType != PythonFileType.INSTANCE) { + return null + } return Function { editor -> when { - file.fileType != PythonFileType.INSTANCE -> return@Function null editor !is TextEditorImpl -> return@Function null } val pySourceRootDetectionService = project.getService(PySourceRootDetectionService::class.java)