diff --git a/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java b/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java index e1dc883fa479..4e1906a37632 100644 --- a/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java @@ -19,6 +19,7 @@ import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElementVisitor; +import com.intellij.util.ui.CheckBox; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PythonFileType; import com.jetbrains.python.inspections.quickfix.AddEncodingQuickFix; @@ -29,6 +30,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -63,7 +65,7 @@ public class PyMandatoryEncodingInspection extends PyInspection { @Override public void visitPyFile(PyFile node) { - if (!LanguageLevel.forElement(node).isPython2()) return; + if (!(myAllPythons || LanguageLevel.forElement(node).isPython2())) return; final String charsetString = PythonFileType.getCharsetFromEncodingDeclaration(node); if (charsetString == null) { @@ -78,6 +80,7 @@ public class PyMandatoryEncodingInspection extends PyInspection { public String myDefaultEncoding = "utf-8"; public int myEncodingFormatIndex = 0; + public boolean myAllPythons = false; @Override public JComponent createOptionsPanel() { @@ -103,6 +106,10 @@ public class PyMandatoryEncodingInspection extends PyInspection { } }); - return PyEncodingUtil.createEncodingOptionsPanel(defaultEncoding, encodingFormat); + final JPanel panel = new JPanel(new BorderLayout()); + panel.add(new CheckBox("Enable in Python 3+", this, "myAllPythons"), BorderLayout.NORTH); + panel.add(PyEncodingUtil.createEncodingOptionsPanel(defaultEncoding, encodingFormat), BorderLayout.CENTER); + + return panel; } } diff --git a/python/testData/inspections/AddEncodingInPy3/test.py b/python/testData/inspections/AddEncodingInDisabledPy3/test.py similarity index 100% rename from python/testData/inspections/AddEncodingInPy3/test.py rename to python/testData/inspections/AddEncodingInDisabledPy3/test.py diff --git a/python/testData/inspections/AddEncodingInEnabledPy3/test.py b/python/testData/inspections/AddEncodingInEnabledPy3/test.py new file mode 100644 index 000000000000..76ef230348eb --- /dev/null +++ b/python/testData/inspections/AddEncodingInEnabledPy3/test.py @@ -0,0 +1 @@ +from typing import Any \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java b/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java index b8d273c9e98c..47ffa4857604 100644 --- a/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java +++ b/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java @@ -271,7 +271,16 @@ public class PythonInspectionsTest extends PyTestCase { } // PY-32364 - public void testAddEncodingInPy3() { - doHighlightingTest(PyMandatoryEncodingInspection.class, LanguageLevel.PYTHON34); + public void testAddEncodingInDisabledPy3() { + final PyMandatoryEncodingInspection inspection = new PyMandatoryEncodingInspection(); + inspection.myAllPythons = false; + doHighlightingTest(inspection, LanguageLevel.PYTHON34); + } + + // PY-32364 + public void testAddEncodingInEnabledPy3() { + final PyMandatoryEncodingInspection inspection = new PyMandatoryEncodingInspection(); + inspection.myAllPythons = true; + doHighlightingTest(inspection, LanguageLevel.PYTHON34); } }