PY-14234 Fix false positive when underscored module imported inside the package

This commit is contained in:
Valentina Kiryushkina
2016-01-16 15:45:51 +03:00
parent 08988f79d9
commit f71abda0e2
5 changed files with 26 additions and 1 deletions
@@ -21,6 +21,7 @@ import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiReference;
@@ -85,8 +86,18 @@ public class PyProtectedMemberInspection extends PyInspection {
if (!(statement instanceof PyFromImportStatement)) return;
final PyReferenceExpression importReferenceExpression = node.getImportReferenceExpression();
final PyReferenceExpression importSource = ((PyFromImportStatement)statement).getImportSource();
if (importReferenceExpression != null && importSource != null)
if (importReferenceExpression != null && importSource != null && !isImportFromTheSamePackage(importSource)) {
checkReference(importReferenceExpression, importSource);
}
}
private boolean isImportFromTheSamePackage(PyReferenceExpression importSource) {
PsiDirectory directory = importSource.getContainingFile().getContainingDirectory();
if (PyUtil.isPackage(directory, true, importSource.getContainingFile()) &&
directory.getName().equals(importSource.getName())) {
return true;
}
return false;
}
@Override
@@ -0,0 +1,2 @@
def very_smart_func(param):
return None
@@ -0,0 +1,3 @@
from my_package import _package_internal_module # False positive here
_package_internal_module.very_smart_func("spam")
@@ -69,6 +69,15 @@ public class PyProtectedMemberInspectionTest extends PyTestCase {
myFixture.checkHighlighting(false, false, true);
}
//PY-14234
public void testImportFromTheSamePackage() {
String path = getTestName(true);
myFixture.copyDirectoryToProject(path + "/my_package", "./my_package");
myFixture.configureByFile("/my_package/my_public_module.py");
myFixture.enableInspections(PyProtectedMemberInspection.class);
myFixture.checkHighlighting(false, false, true);
}
public void testModule() {
myFixture.configureByFiles(getTestName(true) + ".py", "tmp.py");
myFixture.enableInspections(PyProtectedMemberInspection.class);