diff --git a/python/src/com/jetbrains/python/codeInsight/functionTypeComments/PyFunctionTypeAnnotationVisitorFilter.java b/python/src/com/jetbrains/python/codeInsight/functionTypeComments/PyFunctionTypeAnnotationVisitorFilter.java index 9a80da979cb3..8e3a0b9322b4 100644 --- a/python/src/com/jetbrains/python/codeInsight/functionTypeComments/PyFunctionTypeAnnotationVisitorFilter.java +++ b/python/src/com/jetbrains/python/codeInsight/functionTypeComments/PyFunctionTypeAnnotationVisitorFilter.java @@ -32,6 +32,7 @@ public class PyFunctionTypeAnnotationVisitorFilter implements PythonVisitorFilte visitorClass == PyMandatoryEncodingInspection.class || visitorClass == PyNonAsciiCharInspection.class || visitorClass == PyInterpreterInspection.class || - visitorClass == PyPep8Inspection.class); + visitorClass == PyPep8Inspection.class || + visitorClass == PyCompatibilityInspection.class); } } diff --git a/python/src/com/jetbrains/python/validation/UnsupportedFeatures.java b/python/src/com/jetbrains/python/validation/UnsupportedFeatures.java index effe3928ca99..1f315ba9bed1 100644 --- a/python/src/com/jetbrains/python/validation/UnsupportedFeatures.java +++ b/python/src/com/jetbrains/python/validation/UnsupportedFeatures.java @@ -22,15 +22,15 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ex.ProblemDescriptorImpl; import com.intellij.codeInspection.ex.QuickFixWrapper; +import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.jetbrains.python.psi.LanguageLevel; -import com.jetbrains.python.psi.PyElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; /** * @author Alexey.Ivanov @@ -42,8 +42,9 @@ public class UnsupportedFeatures extends CompatibilityVisitor { } @Override - public void visitPyElement(PyElement node) { - setVersionsToProcess(Arrays.asList(LanguageLevel.forElement(node))); + public synchronized void annotateElement(PsiElement psiElement, AnnotationHolder holder) { + setVersionsToProcess(Collections.singletonList(LanguageLevel.forElement(psiElement))); + super.annotateElement(psiElement, holder); } @Override diff --git a/python/testData/inspections/PyCompatibilityInspection/noWarningAboutEllipsisInFunctionTypeComments.py b/python/testData/inspections/PyCompatibilityInspection/noWarningAboutEllipsisInFunctionTypeComments.py new file mode 100644 index 000000000000..efdd12528893 --- /dev/null +++ b/python/testData/inspections/PyCompatibilityInspection/noWarningAboutEllipsisInFunctionTypeComments.py @@ -0,0 +1,12 @@ +from typing import List + +class Example: + def method(self, + lst, # type: List[str] + opt=0, # type: int + *args, # type: str + **kwargs # type: bool + ): + # type: (...) -> int + """Docstring comes after type comment.""" + pass diff --git a/python/testData/inspections/PyCompatibilityInspection/noWarningAboutStarredExpressionsInFunctionTypeComments.py b/python/testData/inspections/PyCompatibilityInspection/noWarningAboutStarredExpressionsInFunctionTypeComments.py new file mode 100644 index 000000000000..83f55e63269f --- /dev/null +++ b/python/testData/inspections/PyCompatibilityInspection/noWarningAboutStarredExpressionsInFunctionTypeComments.py @@ -0,0 +1,3 @@ +def create_instance(self, task_config, **kwargs): + # type: (TaskConfig, **Text) -> TaskInstance + pass diff --git a/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java index 7afe19f1f695..50e7d9825960 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java @@ -219,6 +219,16 @@ public class PyCompatibilityInspectionTest extends PyTestCase { doTest(LanguageLevel.PYTHON36); } + // PY-22302 + public void testNoWarningAboutEllipsisInFunctionTypeComments() { + doTest(); + } + + // PY-23355 + public void testNoWarningAboutStarredExpressionsInFunctionTypeComments() { + doTest(); + } + private void doTest(@NotNull LanguageLevel level) { runWithLanguageLevel(level, this::doTest); }