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) {