diff --git a/python/helpers/tools/stdlib_packages.txt b/python/helpers/tools/stdlib_packages.txt
index 2ee4b5d22705..257fc28b9f62 100644
--- a/python/helpers/tools/stdlib_packages.txt
+++ b/python/helpers/tools/stdlib_packages.txt
@@ -73,6 +73,7 @@ ensurepip
enum
errno
exceptions
+faulthandler
fcntl
filecmp
fileinput
@@ -113,6 +114,7 @@ importlib
imputil
inspect
io
+ipaddress
itertools
json
keyword
@@ -136,6 +138,8 @@ MimeWriter
mimify
mmap
modulefinder
+msilib
+msvcrt
multifile
multiprocessing
mutex
@@ -265,6 +269,7 @@ tty
turtle
turtledemo
types
+typing
tzparse
unicodedata
unittest
@@ -281,6 +286,8 @@ warnings
wave
weakref
webbrowser
+winreg
+winsound
whichdb
whrandom
wsgiref
@@ -290,6 +297,7 @@ xmllib
xmlrpc
xmlrpclib
xxsubtype
+zipapp
zipfile
zipimport
zlib
diff --git a/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java b/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java
index a92537dc50b3..9ae8717746dc 100644
--- a/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java
+++ b/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java
@@ -177,15 +177,17 @@ public class PyPackageRequirementsInspection extends PyInspection {
return;
}
}
- final PsiReference reference = packageReferenceExpression.getReference();
- if (reference != null) {
- final PsiElement element = reference.resolve();
- if (element != null) {
- final PsiFile file = element.getContainingFile();
- if (file != null) {
- final VirtualFile virtualFile = file.getVirtualFile();
- if (ModuleUtilCore.moduleContainsFile(module, virtualFile, false)) {
- return;
+ if (!ApplicationManager.getApplication().isUnitTestMode()) {
+ final PsiReference reference = packageReferenceExpression.getReference();
+ if (reference != null) {
+ final PsiElement element = reference.resolve();
+ if (element != null) {
+ final PsiFile file = element.getContainingFile();
+ if (file != null) {
+ final VirtualFile virtualFile = file.getVirtualFile();
+ if (ModuleUtilCore.moduleContainsFile(module, virtualFile, false)) {
+ return;
+ }
}
}
}
diff --git a/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py b/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py
index dbac1432bec8..24b98b4a04ec 100644
--- a/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py
+++ b/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py
@@ -3,7 +3,7 @@ import clevercss import convert
import django.conf
import httplib
-import test2, test3
+import test3
print('Hello, World!')
diff --git a/python/testData/inspections/PyPackageRequirementsInspection/IpAddressNotInRequirements/ipaddress.py b/python/testData/inspections/PyPackageRequirementsInspection/IpAddressNotInRequirements/ipaddress.py
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/python/testData/inspections/PyPackageRequirementsInspection/IpAddressNotInRequirements/requirements.txt b/python/testData/inspections/PyPackageRequirementsInspection/IpAddressNotInRequirements/requirements.txt
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/python/testData/inspections/PyPackageRequirementsInspection/IpAddressNotInRequirements/test1.py b/python/testData/inspections/PyPackageRequirementsInspection/IpAddressNotInRequirements/test1.py
new file mode 100644
index 000000000000..64ef9ef3b69d
--- /dev/null
+++ b/python/testData/inspections/PyPackageRequirementsInspection/IpAddressNotInRequirements/test1.py
@@ -0,0 +1,4 @@
+import ipaddress
+
+
+print(ipaddress)
\ No newline at end of file
diff --git a/python/testData/inspections/PyPackageRequirementsInspection/TypingNotInRequirements/requirements.txt b/python/testData/inspections/PyPackageRequirementsInspection/TypingNotInRequirements/requirements.txt
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/python/testData/inspections/PyPackageRequirementsInspection/TypingNotInRequirements/test1.py b/python/testData/inspections/PyPackageRequirementsInspection/TypingNotInRequirements/test1.py
new file mode 100644
index 000000000000..9dbada6fe711
--- /dev/null
+++ b/python/testData/inspections/PyPackageRequirementsInspection/TypingNotInRequirements/test1.py
@@ -0,0 +1,3 @@
+import typing
+
+print(typing)
diff --git a/python/testData/inspections/PyPackageRequirementsInspection/TypingNotInRequirements/typing.py b/python/testData/inspections/PyPackageRequirementsInspection/TypingNotInRequirements/typing.py
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java
index dea0c2d198b4..00d5eee2330e 100644
--- a/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java
+++ b/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java
@@ -16,6 +16,7 @@
package com.jetbrains.python.inspections;
import com.jetbrains.python.fixtures.PyTestCase;
+import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.NotNull;
/**
@@ -38,11 +39,21 @@ public class PyPackageRequirementsInspectionTest extends PyTestCase {
doTest("test1.py");
}
+ // PY-16753
+ public void testIpAddressNotInRequirements() {
+ runWithLanguageLevel(LanguageLevel.PYTHON34, () -> doTest("test1.py"));
+ }
+
+ // PY-17422
+ public void testTypingNotInRequirements() {
+ runWithLanguageLevel(LanguageLevel.PYTHON35, () -> doTest("test1.py"));
+ }
+
private void doTest(@NotNull final String filename) {
final String testName = getTestName(false);
myFixture.copyDirectoryToProject("inspections/PyPackageRequirementsInspection/" + testName, "");
myFixture.configureFromTempProjectFile(filename);
myFixture.enableInspections(PyPackageRequirementsInspection.class);
- myFixture.checkHighlighting(true, false, false);
+ myFixture.checkHighlighting(true, false, true);
}
}