From fbb2b5a0fa58ce1fe3d0fdfa38c737c422083500 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Fri, 29 Jul 2016 19:05:50 +0300 Subject: [PATCH] Disabled compatiblity inspection for backported 'enum' (PY-19486) We still have false negative for not mentioning 'enum34' in requrements.txt. --- .../python/inspections/PyCompatibilityInspection.java | 9 +++++++-- .../PyCompatibilityInspection/backportedEnum.py | 1 + .../inspections/PyCompatibilityInspectionTest.java | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 python/testData/inspections/PyCompatibilityInspection/backportedEnum.py diff --git a/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java b/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java index 771d50d454ad..1314f323987d 100644 --- a/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java @@ -60,6 +60,10 @@ import java.util.List; * Inspection to detect code incompatibility with python versions */ public class PyCompatibilityInspection extends PyInspection { + public static List BACKPORTED_PACKAGES = ImmutableList.builder() + .add("enum") + .build(); + public static final int LATEST_INSPECTION_VERSION = 1; public static final List DEFAULT_PYTHON_VERSIONS = ImmutableList.of(LanguageLevel.PYTHON27, LanguageLevel.getLatest()); @@ -244,7 +248,7 @@ public class PyCompatibilityInspection extends PyInspection { final QualifiedName qName = importElement.getImportedQName(); if (qName != null && !qName.matches("builtins") && !qName.matches("__builtin__")) { moduleName = qName.toString(); - if (UnsupportedFeaturesUtil.MODULES.get(languageLevel).contains(moduleName)) { + if (UnsupportedFeaturesUtil.MODULES.get(languageLevel).contains(moduleName) && !BACKPORTED_PACKAGES.contains(moduleName)) { len = appendLanguageLevel(message, len, languageLevel); } } @@ -263,7 +267,8 @@ public class PyCompatibilityInspection extends PyInspection { if (name != null) { for (int i = 0; i != myVersionsToProcess.size(); ++i) { LanguageLevel languageLevel = myVersionsToProcess.get(i); - if (UnsupportedFeaturesUtil.MODULES.get(languageLevel).contains(name.toString())) { + final String moduleName = name.toString(); + if (UnsupportedFeaturesUtil.MODULES.get(languageLevel).contains(moduleName) && !BACKPORTED_PACKAGES.contains(moduleName)) { len = appendLanguageLevel(message, len, languageLevel); } } diff --git a/python/testData/inspections/PyCompatibilityInspection/backportedEnum.py b/python/testData/inspections/PyCompatibilityInspection/backportedEnum.py new file mode 100644 index 000000000000..e47ff1c3a5d5 --- /dev/null +++ b/python/testData/inspections/PyCompatibilityInspection/backportedEnum.py @@ -0,0 +1 @@ +import enum diff --git a/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java index 0f0065f449ad..867cc3a97638 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java @@ -176,6 +176,11 @@ public class PyCompatibilityInspectionTest extends PyTestCase { doTest(); } + // PY-19486 + public void testBackportedEnum() { + doTest(); + } + private void doTest(@NotNull LanguageLevel level) { runWithLanguageLevel(level, this::doTest); }