diff --git a/python/src/com/jetbrains/python/highlighting/PyHighlighter.java b/python/src/com/jetbrains/python/highlighting/PyHighlighter.java
index 299badb3a5f9..fdbb740c3aba 100644
--- a/python/src/com/jetbrains/python/highlighting/PyHighlighter.java
+++ b/python/src/com/jetbrains/python/highlighting/PyHighlighter.java
@@ -112,7 +112,7 @@ public class PyHighlighter extends SyntaxHighlighterBase {
public static final TextAttributesKey PY_FUNCTION_CALL = TextAttributesKey.createTextAttributesKey("PY.FUNCTION_CALL", FUNCTION_CALL);
public static final TextAttributesKey PY_METHOD_CALL = TextAttributesKey.createTextAttributesKey("PY.METHOD_CALL", PY_FUNCTION_CALL);
- public static final TextAttributesKey PY_ANNOTATION = TextAttributesKey.createTextAttributesKey("PY.ANNOTATION");
+ public static final TextAttributesKey PY_ANNOTATION = TextAttributesKey.createTextAttributesKey("PY.ANNOTATION", IDENTIFIER);
public static final TextAttributesKey PY_VALID_STRING_ESCAPE = TextAttributesKey.createTextAttributesKey("PY.VALID_STRING_ESCAPE", VALID_STRING_ESCAPE);
diff --git a/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java b/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java
index 15159326d0ac..a126ed371128 100644
--- a/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java
+++ b/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java
@@ -15,6 +15,7 @@
*/
package com.jetbrains.python.validation;
+import com.intellij.codeInsight.daemon.impl.HighlightInfoType;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.psi.PsiElement;
@@ -81,7 +82,7 @@ public class HighlightingAnnotator extends PyAnnotator {
public void visitPyAnnotation(PyAnnotation node) {
final PyExpression value = node.getValue();
if (value != null) {
- addHighlightingAnnotation(value, PyHighlighter.PY_ANNOTATION);
+ addHighlightingAnnotation(value, PyHighlighter.PY_ANNOTATION, HighlightInfoType.SYMBOL_TYPE_SEVERITY);
}
}
diff --git a/python/src/com/jetbrains/python/validation/PyAnnotator.java b/python/src/com/jetbrains/python/validation/PyAnnotator.java
index a4a62e178b2c..86f957f568f6 100644
--- a/python/src/com/jetbrains/python/validation/PyAnnotator.java
+++ b/python/src/com/jetbrains/python/validation/PyAnnotator.java
@@ -18,13 +18,10 @@ package com.jetbrains.python.validation;
import com.intellij.lang.ASTNode;
import com.intellij.lang.annotation.Annotation;
import com.intellij.lang.annotation.AnnotationHolder;
+import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.psi.PsiElement;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.jetbrains.python.highlighting.PyHighlighter;
-import com.jetbrains.python.psi.PyAnnotation;
import com.jetbrains.python.psi.PyElementVisitor;
import org.jetbrains.annotations.NotNull;
@@ -58,24 +55,21 @@ public abstract class PyAnnotator extends PyElementVisitor {
}
protected void addHighlightingAnnotation(@NotNull PsiElement target, @NotNull TextAttributesKey key) {
- if (annotationHighlightingEnabled() && insideAnnotationValue(target) && key != PyHighlighter.PY_ANNOTATION) {
- return;
- }
+ addHighlightingAnnotation(target, key, HighlightSeverity.INFORMATION);
+ }
+
+ protected void addHighlightingAnnotation(@NotNull PsiElement target,
+ @NotNull TextAttributesKey key,
+ @NotNull HighlightSeverity severity) {
final String message = myTestMode ? key.getExternalName() : null;
- final Annotation annotation = getHolder().createInfoAnnotation(target, message);
+ // CodeInsightTestFixture#testHighlighting doesn't consider annotations with severity level < INFO
+ final HighlightSeverity actualSeverity =
+ myTestMode && severity.myVal < HighlightSeverity.INFORMATION.myVal ? HighlightSeverity.INFORMATION : severity;
+ final Annotation annotation = getHolder().createAnnotation(actualSeverity, target.getTextRange(), message);
annotation.setTextAttributes(key);
}
protected void addHighlightingAnnotation(@NotNull ASTNode target, @NotNull TextAttributesKey key) {
addHighlightingAnnotation(target.getPsi(), key);
}
-
- private static boolean insideAnnotationValue(@NotNull PsiElement target) {
- final PyAnnotation annotation = PsiTreeUtil.getParentOfType(target, PyAnnotation.class);
- return annotation != null && PsiTreeUtil.isAncestor(annotation.getValue(), target, false);
- }
-
- private static boolean annotationHighlightingEnabled() {
- return !EditorColorsManager.getInstance().getGlobalScheme().getAttributes(PyHighlighter.PY_ANNOTATION).isEmpty();
- }
}
diff --git a/python/testData/highlighting/annotations.py b/python/testData/highlighting/annotations.py
index 92fea4a9fe65..b2fa48600ae5 100644
--- a/python/testData/highlighting/annotations.py
+++ b/python/testData/highlighting/annotations.py
@@ -1,6 +1,6 @@
-TOP_LEVEL: str = 'foo'
+TOP_LEVEL: str = 'foo'
class C:
attr: Optional[Any] = None
- def method(self, xs: List[int]) -> None:
+ def method(self, xs: List[int]) -> None:
pass
diff --git a/python/testData/highlighting/parametersWithAnnotationsAndDefaults.py b/python/testData/highlighting/parametersWithAnnotationsAndDefaults.py
index 263d7de2765b..fbbeed0f8571 100644
--- a/python/testData/highlighting/parametersWithAnnotationsAndDefaults.py
+++ b/python/testData/highlighting/parametersWithAnnotationsAndDefaults.py
@@ -1,2 +1,2 @@
-def f(p1: int, p2: int = 42):
+def f(p1: int, p2: int = 42):
print(p1, p2)
\ No newline at end of file
diff --git a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java
index 1290bac7fe88..5c0fcc692fb7 100644
--- a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java
+++ b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java
@@ -23,7 +23,6 @@ import com.intellij.openapi.editor.markup.TextAttributes;
import com.jetbrains.python.documentation.PyDocumentationSettings;
import com.jetbrains.python.documentation.docstrings.DocStringFormat;
import com.jetbrains.python.fixtures.PyTestCase;
-import com.jetbrains.python.highlighting.PyHighlighter;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher;
import org.jetbrains.annotations.NotNull;
@@ -372,13 +371,11 @@ public class PythonHighlightingTest extends PyTestCase {
// PY-20401
public void testAnnotations() {
- createTemporaryColorScheme().setAttributes(PyHighlighter.PY_ANNOTATION, new TextAttributes(Color.RED, null, null, null, Font.PLAIN));
runWithLanguageLevel(LanguageLevel.PYTHON36, this::doTest);
}
// PY-22729
public void testParametersWithAnnotationsAndDefaults() {
- createTemporaryColorScheme().setAttributes(PyHighlighter.PY_ANNOTATION, new TextAttributes(Color.RED, null, null, null, Font.PLAIN));
runWithLanguageLevel(LanguageLevel.PYTHON30, this::doTest);
}
@@ -403,12 +400,15 @@ public class PythonHighlightingTest extends PyTestCase {
}
private void doTest() {
- final String TEST_PATH = "/highlighting/";
- myFixture.testHighlighting(true, true, false, TEST_PATH + getTestName(true) + PyNames.DOT_PY);
+ doTest(true, true);
}
private void doTest(boolean checkWarnings, boolean checkInfos) {
- myFixture.testHighlighting(checkWarnings, checkInfos, false, TEST_PATH + getTestName(true) + PyNames.DOT_PY);
+ myFixture.testHighlighting(checkWarnings, checkInfos, false, getTestName(true) + PyNames.DOT_PY);
}
+ @Override
+ protected String getTestDataPath() {
+ return super.getTestDataPath() + "/highlighting/";
+ }
}