From 4ebec8fb6ef1ed67025e70ed662be3a15aa44a48 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 13 Dec 2012 15:35:08 +0100 Subject: [PATCH] highlighting for Python keyword arguments (PY-5418) --- .../src/com/jetbrains/python/psi/PyElementVisitor.java | 4 ++++ .../jetbrains/python/highlighting/PyHighlighter.java | 3 +++ .../python/highlighting/PythonColorsPage.java | 4 +++- .../python/psi/impl/PyKeywordArgumentImpl.java | 10 ++++++---- .../python/validation/HighlightingAnnotator.java | 10 ++++++++++ 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyElementVisitor.java b/python/psi-api/src/com/jetbrains/python/psi/PyElementVisitor.java index 1d102df30cbf..18444383b3f8 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyElementVisitor.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyElementVisitor.java @@ -253,4 +253,8 @@ public class PyElementVisitor extends PsiElementVisitor { public void visitPyConditionalExpression(PyConditionalExpression node) { visitPyElement(node); } + + public void visitPyKeywordArgument(PyKeywordArgument node) { + visitPyElement(node); + } } diff --git a/python/src/com/jetbrains/python/highlighting/PyHighlighter.java b/python/src/com/jetbrains/python/highlighting/PyHighlighter.java index ba35b492a0cd..b32606a196e3 100644 --- a/python/src/com/jetbrains/python/highlighting/PyHighlighter.java +++ b/python/src/com/jetbrains/python/highlighting/PyHighlighter.java @@ -116,6 +116,9 @@ public class PyHighlighter extends SyntaxHighlighterBase { public static final TextAttributesKey PY_SELF_PARAMETER = TextAttributesKey.createTextAttributesKey( "PY.SELF_PARAMETER", new TextAttributes(new Color(148, 85, 141), null, null, null, Font.PLAIN)); + public static final TextAttributesKey PY_KEYWORD_ARGUMENT = TextAttributesKey.createTextAttributesKey( + "PY.KEYWORD_ARGUMENT", new TextAttributes(new Color(102, 0, 153), null, null, null, Font.PLAIN)); + public static final TextAttributesKey PY_VALID_STRING_ESCAPE = _copy("PY.VALID_STRING_ESCAPE", VALID_STRING_ESCAPE); public static final TextAttributesKey PY_INVALID_STRING_ESCAPE = _copy("PY.INVALID_STRING_ESCAPE", INVALID_STRING_ESCAPE); diff --git a/python/src/com/jetbrains/python/highlighting/PythonColorsPage.java b/python/src/com/jetbrains/python/highlighting/PythonColorsPage.java index b46b801d9f04..9c061fd8c5c8 100644 --- a/python/src/com/jetbrains/python/highlighting/PythonColorsPage.java +++ b/python/src/com/jetbrains/python/highlighting/PythonColorsPage.java @@ -44,6 +44,7 @@ public class PythonColorsPage implements ColorSettingsPage, InspectionColorSetti new AttributesDescriptor("Predefined name", PyHighlighter.PY_PREDEFINED_USAGE), new AttributesDescriptor("Parameter", PyHighlighter.PY_PARAMETER), new AttributesDescriptor("'self' parameter", PyHighlighter.PY_SELF_PARAMETER), + new AttributesDescriptor("Keyword argument", PyHighlighter.PY_KEYWORD_ARGUMENT), new AttributesDescriptor("Valid escape sequence", PyHighlighter.PY_VALID_STRING_ESCAPE), new AttributesDescriptor("Invalid escape sequence", PyHighlighter.PY_INVALID_STRING_ESCAPE), }; @@ -59,6 +60,7 @@ public class PythonColorsPage implements ColorSettingsPage, InspectionColorSetti .put("builtin", PyHighlighter.PY_BUILTIN_NAME) .put("self", PyHighlighter.PY_SELF_PARAMETER) .put("param", PyHighlighter.PY_PARAMETER) + .put("kwarg", PyHighlighter.PY_KEYWORD_ARGUMENT) .build(); @NotNull @@ -99,9 +101,9 @@ public class PythonColorsPage implements ColorSettingsPage, InspectionColorSetti "\n"+ "class Foo:\n"+ " def __init__(self):\n" + - " self.sense = None\n" + " byte_string = 'newline:\\n also newline:\\x0a'\n" + " text_string = u\"Cyrillic \u042f is \\u042f. Oops: \\u042g\"\n"+ + " self.makeSense(whatever=1)\n" + " \n" + " def makeSense(self, whatever):\n"+ " self.sense = whatever\n"+ diff --git a/python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java b/python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java index c1e05dc0f364..02cba3fe8e95 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java @@ -6,10 +6,7 @@ import com.intellij.psi.PsiReference; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import com.jetbrains.python.PyTokenTypes; -import com.jetbrains.python.psi.LanguageLevel; -import com.jetbrains.python.psi.PyElementGenerator; -import com.jetbrains.python.psi.PyExpression; -import com.jetbrains.python.psi.PyKeywordArgument; +import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NonNls; @@ -73,4 +70,9 @@ public class PyKeywordArgumentImpl extends PyElementImpl implements PyKeywordArg getNode().replaceChild(getKeywordNode(), keywordArgument.getKeywordNode()); return this; } + + @Override + protected void acceptPyVisitor(PyElementVisitor pyVisitor) { + pyVisitor.visitPyKeywordArgument(this); + } } diff --git a/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java b/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java index 9b66ae61d5f1..3e665a2e6be8 100644 --- a/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java +++ b/python/src/com/jetbrains/python/validation/HighlightingAnnotator.java @@ -1,5 +1,6 @@ package com.jetbrains.python.validation; +import com.intellij.lang.ASTNode; import com.intellij.lang.annotation.Annotation; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ArrayUtil; @@ -36,6 +37,15 @@ public class HighlightingAnnotator extends PyAnnotator { } } + @Override + public void visitPyKeywordArgument(PyKeywordArgument node) { + ASTNode keywordNode = node.getKeywordNode(); + if (keywordNode != null) { + Annotation annotation = getHolder().createInfoAnnotation(keywordNode, null); + annotation.setTextAttributes(PyHighlighter.PY_KEYWORD_ARGUMENT); + } + } + private static boolean isSelf(PyParameter node, PyFunction function) { final PyNamedParameter named = node.getAsNamed(); if (named != null) {