diff --git a/python/src/com/jetbrains/python/inspections/quickfix/UnresolvedReferenceAddParameterQuickFix.java b/python/src/com/jetbrains/python/inspections/quickfix/UnresolvedReferenceAddParameterQuickFix.java index 875130675884..807ee7aae35d 100644 --- a/python/src/com/jetbrains/python/inspections/quickfix/UnresolvedReferenceAddParameterQuickFix.java +++ b/python/src/com/jetbrains/python/inspections/quickfix/UnresolvedReferenceAddParameterQuickFix.java @@ -1,7 +1,6 @@ package com.jetbrains.python.inspections.quickfix; import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.intention.HighPriorityAction; import com.intellij.codeInsight.template.TemplateBuilder; import com.intellij.codeInsight.template.TemplateBuilderFactory; import com.intellij.codeInspection.LocalQuickFix; @@ -22,7 +21,7 @@ import org.jetbrains.annotations.NotNull; * * QuickFix to add parameter to unresolved reference */ -public class UnresolvedReferenceAddParameterQuickFix implements LocalQuickFix, HighPriorityAction { +public class UnresolvedReferenceAddParameterQuickFix implements LocalQuickFix { private String myName; public UnresolvedReferenceAddParameterQuickFix(String name) { myName = name; diff --git a/python/src/com/jetbrains/python/psi/search/PyProjectScopeBuilder.java b/python/src/com/jetbrains/python/psi/search/PyProjectScopeBuilder.java index 87c048064306..201b383a206b 100644 --- a/python/src/com/jetbrains/python/psi/search/PyProjectScopeBuilder.java +++ b/python/src/com/jetbrains/python/psi/search/PyProjectScopeBuilder.java @@ -8,12 +8,14 @@ import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.search.*; import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -135,6 +137,27 @@ public class PyProjectScopeBuilder extends ProjectScopeBuilderImpl { return findLibDir(sdk.getRootProvider().getFiles(OrderRootType.CLASSES)); } + public static VirtualFile findVirtualEnvLibDir(Sdk sdk) { + VirtualFile[] classVFiles = sdk.getRootProvider().getFiles(OrderRootType.CLASSES); + String homePath = sdk.getHomePath(); + if (homePath != null) { + File root = PythonSdkType.getVirtualEnvRoot(homePath); + if (root != null) { + File libRoot = new File(root, "lib"); + File[] versionRoots = libRoot.listFiles(); + if (versionRoots != null && versionRoots.length == 1) { + libRoot = versionRoots[0]; + } + for (VirtualFile file : classVFiles) { + if (FileUtil.pathsEqual(file.getPath(), libRoot.getPath())) { + return file; + } + } + } + } + return null; + } + @Nullable private static VirtualFile findLibDir(VirtualFile[] files) { for (VirtualFile file : files) { diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkType.java b/python/src/com/jetbrains/python/sdk/PythonSdkType.java index a7979c8352d8..e30b3cae9ff1 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkType.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkType.java @@ -771,11 +771,11 @@ public class PythonSdkType extends SdkType { if (pythonSdk != null) { final VirtualFile libDir = PyProjectScopeBuilder.findLibDir(pythonSdk); if (libDir != null && VfsUtilCore.isAncestor(libDir, vFile, false)) { - final VirtualFile sitePackages = libDir.findChild(PyNames.SITE_PACKAGES); - if (sitePackages != null && VfsUtilCore.isAncestor(sitePackages, vFile, false)) { - return false; - } - return true; + return isNotSitePackages(vFile, libDir); + } + final VirtualFile venvLibDir = PyProjectScopeBuilder.findVirtualEnvLibDir(pythonSdk); + if (venvLibDir != null && VfsUtilCore.isAncestor(venvLibDir, vFile, false)) { + return isNotSitePackages(vFile, venvLibDir); } final VirtualFile skeletonsDir = findSkeletonsDir(pythonSdk); if (skeletonsDir != null && @@ -786,6 +786,14 @@ public class PythonSdkType extends SdkType { return false; } + private static boolean isNotSitePackages(VirtualFile vFile, VirtualFile libDir) { + final VirtualFile sitePackages = libDir.findChild(PyNames.SITE_PACKAGES); + if (sitePackages != null && VfsUtilCore.isAncestor(sitePackages, vFile, false)) { + return false; + } + return true; + } + @Nullable public static Sdk findPython2Sdk(@Nullable Module module) { Sdk moduleSDK = findPythonSdk(module); diff --git a/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java b/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java index 4fed279eb99f..43525e5c0185 100644 --- a/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java +++ b/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java @@ -17,6 +17,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -24,6 +25,7 @@ import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.jetbrains.python.PythonFileType; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.inspections.PyPep8Inspection; import com.jetbrains.python.inspections.quickfix.ReformatFix; @@ -79,6 +81,10 @@ public class Pep8ExternalAnnotator extends ExternalAnnotator