diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java index c0db5ac02250..6a5f7a6d1189 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java @@ -414,7 +414,7 @@ public class PyUnresolvedReferencesInspection extends PyInspection { Set unusedStatements = new HashSet(); for (NameDefiner unusedImport : unusedImports) { PyImportStatementBase importStatement = PsiTreeUtil.getParentOfType(unusedImport, PyImportStatementBase.class); - if (importStatement != null && !unusedStatements.contains(importStatement)) { + if (importStatement != null && !unusedStatements.contains(importStatement) && !myUsedImports.contains(importStatement)) { // don't remove as unused imports in try/except statements if (PsiTreeUtil.getParentOfType(importStatement, PyTryExceptStatement.class) != null) { continue; diff --git a/python/testData/inspections/unusedImport/moduleAndSubmodule/py3626.py b/python/testData/inspections/unusedImport/moduleAndSubmodule/py3626.py new file mode 100644 index 000000000000..d0a4e81b4bfd --- /dev/null +++ b/python/testData/inspections/unusedImport/moduleAndSubmodule/py3626.py @@ -0,0 +1,9 @@ +import xlogging.handlers +import xlogging + +class MultiProcessingLog(xlogging.Handler): + def __init__(self, *args): + xlogging.Handler.__init__(self) + self._handler = xlogging.handlers.RotatingFileHandler(*args) + +MultiProcessingLog('a','a',1000,3,'utf8') diff --git a/python/testData/inspections/unusedImport/moduleAndSubmodule/xlogging/__init__.py b/python/testData/inspections/unusedImport/moduleAndSubmodule/xlogging/__init__.py new file mode 100644 index 000000000000..fd247ce2c1c6 --- /dev/null +++ b/python/testData/inspections/unusedImport/moduleAndSubmodule/xlogging/__init__.py @@ -0,0 +1,2 @@ +class Handler: + pass diff --git a/python/testData/inspections/unusedImport/moduleAndSubmodule/xlogging/handlers.py b/python/testData/inspections/unusedImport/moduleAndSubmodule/xlogging/handlers.py new file mode 100644 index 000000000000..6d965c056647 --- /dev/null +++ b/python/testData/inspections/unusedImport/moduleAndSubmodule/xlogging/handlers.py @@ -0,0 +1,3 @@ +class RotatingFileHandler: + def __init__(self, *args): + pass diff --git a/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java b/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java index f917bfc9347a..d0367779a2fa 100644 --- a/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java +++ b/python/testSrc/com/jetbrains/python/PythonAllTestsSuite.java @@ -2,6 +2,8 @@ package com.jetbrains.python; import com.jetbrains.python.codeInsight.PyCompletionPatternsTest; import com.jetbrains.python.inspections.PyArgumentListInspectionTest; +import com.jetbrains.python.inspections.PyCompatibilityInspectionTest; +import com.jetbrains.python.inspections.PyUnusedImportTest; import com.jetbrains.python.refactoring.*; import com.jetbrains.python.refactoring.classes.PyExtractSuperclassTest; import com.jetbrains.python.refactoring.classes.PyPullUpTest; @@ -74,7 +76,9 @@ public class PythonAllTestsSuite { PyTypeParserTest.class, PyOverrideTest.class, PyBinaryModuleCompletionTest.class, - PyCompletionPatternsTest.class + PyCompletionPatternsTest.class, + PyCompatibilityInspectionTest.class, + PyUnusedImportTest.class }; public static TestSuite suite() { diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnusedImportTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnusedImportTest.java new file mode 100644 index 000000000000..09381d3b3ba3 --- /dev/null +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnusedImportTest.java @@ -0,0 +1,20 @@ +package com.jetbrains.python.inspections; + +import com.jetbrains.python.fixtures.PyLightFixtureTestCase; + +/** + * @author yole + */ +public class PyUnusedImportTest extends PyLightFixtureTestCase { + public void _testModuleAndSubmodule() { // PY-3626 + myFixture.copyDirectoryToProject("inspections/unusedImport/moduleAndSubmodule", ""); + myFixture.enableInspections(PyUnresolvedReferencesInspection.class); + myFixture.testHighlighting(true, false, false, "py3626.py"); + } + + public void testSubpackageInInitPy() { // PY-3201 + myFixture.copyDirectoryToProject("inspections/unusedImport/subpackageInInitPy", ""); + myFixture.enableInspections(PyUnresolvedReferencesInspection.class); + myFixture.testHighlighting(true, false, false, "package1/__init__.py"); + } +}