diff --git a/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java b/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java index 672b4513571a..fe0a19bf8644 100644 --- a/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java @@ -1,16 +1,12 @@ package com.jetbrains.python.inspections; -import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; import com.jetbrains.python.actions.MoveFromFutureImportQuickFix; -import com.jetbrains.python.psi.PyFile; -import com.jetbrains.python.psi.PyFromImportStatement; -import com.jetbrains.python.psi.PyReferenceExpression; -import com.jetbrains.python.psi.PyStatement; +import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -46,7 +42,14 @@ public class PyFromFutureImportInspection extends PyInspection { PsiFile file = importSource.getContainingFile(); if (file instanceof PyFile) { final List statementList = ((PyFile)file).getStatements(); + boolean skippedDocString = false; for (PyStatement statement : statementList) { + if (statement instanceof PyExpressionStatement && + ((PyExpressionStatement) statement).getExpression() instanceof PyStringLiteralExpression && + !skippedDocString) { + skippedDocString = true; + continue; + } if (statement instanceof PyFromImportStatement) { if (statement == node) { return; diff --git a/python/testData/inspections/PyFromFutureImportInspection/expected.xml b/python/testData/inspections/PyFromFutureImportInspection/expected.xml deleted file mode 100644 index 3dc2f06db632..000000000000 --- a/python/testData/inspections/PyFromFutureImportInspection/expected.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - test.py - 7 - from __future__ imports must occur at the beginning of the file - - \ No newline at end of file diff --git a/python/testData/inspections/PyFromFutureImportInspection/module_docstring.py b/python/testData/inspections/PyFromFutureImportInspection/module_docstring.py new file mode 100644 index 000000000000..64079ffd19af --- /dev/null +++ b/python/testData/inspections/PyFromFutureImportInspection/module_docstring.py @@ -0,0 +1,3 @@ +# This is a comment +""" This is a module docstring """ +from __future__ import print_function diff --git a/python/testData/inspections/PyFromFutureImportInspection/test.py b/python/testData/inspections/PyFromFutureImportInspection/test.py new file mode 100644 index 000000000000..f8e7081e9122 --- /dev/null +++ b/python/testData/inspections/PyFromFutureImportInspection/test.py @@ -0,0 +1,7 @@ +from __future__ import print_function +from __future__ import absolute_import + +class A: + pass + +from __future__ import with_statement \ 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 cb48aa47ae1d..36d64b81874e 100644 --- a/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java +++ b/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java @@ -2,7 +2,6 @@ package com.jetbrains.python; import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.ex.LocalInspectionToolWrapper; -import com.intellij.openapi.vfs.LocalFileSystem; import com.jetbrains.python.fixtures.PyLightFixtureTestCase; import com.jetbrains.python.inspections.*; import com.jetbrains.python.psi.LanguageLevel; @@ -164,8 +163,15 @@ public class PythonInspectionsTest extends PyLightFixtureTestCase { } public void testPyFromFutureImportInspection() throws Throwable { - LocalInspectionTool inspection = new PyFromFutureImportInspection(); - doTest(getTestName(false), inspection); + myFixture.configureByFile("inspections/" + getTestName(true) + "/test.py"); + myFixture.enableInspections(PyFromFutureImportInspection.class); + myFixture.checkHighlighting(true, false, false); + } + + public void testPyFromFutureImportInspectionDocString() throws Throwable { + myFixture.configureByFile("inspections/PyFromFutureImportInspection/module_docstring.py"); + myFixture.enableInspections(PyFromFutureImportInspection.class); + myFixture.checkHighlighting(true, false, false); } public void testPyComparisonWithNoneInspection() throws Throwable {