Skip to content

Commit 4ce1600

Browse files
committed
Highlight not/and/or tokens as keywords
1 parent 16bbbdd commit 4ce1600

File tree

11 files changed

+60
-25
lines changed

11 files changed

+60
-25
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/expressionLanguage/ExpressionLanguage.bnf

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
false="regexp:FALSE|false"
2222
id='regexp:\p{Alpha}\w*'
2323
string="regexp:('([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")"
24-
OP_OR="regexp:or|\|\|"
25-
OP_AND="regexp:and|&&"
24+
OP_OR="||"
25+
OP_OR_KW="or"
26+
OP_AND="&&"
27+
OP_AND_KW="and"
2628
OP_BIT_OR="|"
2729
OP_BIT_XOR="^"
2830
OP_BIT_AND="&"
@@ -45,7 +47,8 @@
4547
OP_DIV="/"
4648
OP_MOD="%"
4749
OP_POW="**"
48-
OP_NOT='regexp:not|\!'
50+
OP_NOT='!'
51+
OP_NOT_KW='not'
4952

5053
L_ROUND_BRACKET="("
5154
R_ROUND_BRACKET=")"
@@ -97,7 +100,7 @@ private rel_group ::= eq_strict_expr
97100

98101
private primary_group ::= simple_ref_expr | literal_expr | array_expr | hash_expr | call_expr | paren_expr
99102

100-
not_expr ::= OP_NOT expr
103+
not_expr ::= (OP_NOT|OP_NOT_KW) expr
101104
unary_min_expr ::= OP_MINUS expr
102105
unary_plus_expr ::= OP_PLUS expr
103106
div_expr ::= expr OP_DIV expr
@@ -118,8 +121,8 @@ lte_expr ::= expr OP_LTE expr
118121
not_in_expr ::= expr OP_NOT_IN expr
119122
in_expr ::= expr OP_IN expr
120123
matches_expr ::= expr OP_MATCHES expr
121-
or_expr ::= expr OP_OR expr
122-
and_expr ::= expr OP_AND expr
124+
or_expr ::= expr (OP_OR|OP_OR_KW) expr
125+
and_expr ::= expr (OP_AND|OP_AND_KW) expr
123126
bit_and_expr ::= expr OP_BIT_AND expr
124127
bit_or_expr ::= expr OP_BIT_OR expr
125128
bit_xor_expr ::= expr OP_BIT_XOR expr

src/main/java/fr/adrienbrault/idea/symfony2plugin/expressionLanguage/ExpressionLanguage.flex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,16 @@ TRUE=TRUE|true
3232
FALSE=FALSE|false
3333
ID=[:letter:][a-zA-Z_0-9]*
3434
STRING=('([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")
35-
OP_OR=or|\|\|
36-
OP_AND=and|&&
37-
OP_NOT=not|\!
3835
SYNTAX=[?:.,]
3936

4037
%%
4138
<YYINITIAL> {
4239
{WHITE_SPACE} { return WHITE_SPACE; }
4340

41+
"||" { return OP_OR; }
42+
"or" { return OP_OR_KW; }
43+
"&&" { return OP_AND; }
44+
"and" { return OP_AND_KW; }
4445
"|" { return OP_BIT_OR; }
4546
"^" { return OP_BIT_XOR; }
4647
"&" { return OP_BIT_AND; }
@@ -63,6 +64,8 @@ SYNTAX=[?:.,]
6364
"/" { return OP_DIV; }
6465
"%" { return OP_MOD; }
6566
"**" { return OP_POW; }
67+
"!" { return OP_NOT; }
68+
"not" { return OP_NOT_KW; }
6669
"(" { return L_ROUND_BRACKET; }
6770
")" { return R_ROUND_BRACKET; }
6871
"{" { return L_CURLY_BRACKET; }
@@ -77,9 +80,6 @@ SYNTAX=[?:.,]
7780
{FALSE} { return FALSE; }
7881
{ID} { return ID; }
7982
{STRING} { return STRING; }
80-
{OP_OR} { return OP_OR; }
81-
{OP_AND} { return OP_AND; }
82-
{OP_NOT} { return OP_NOT; }
8383
{SYNTAX} { return SYNTAX; }
8484

8585
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/expressionLanguage/ExpressionLanguageSyntaxHighlighter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
5050
return KEYWORD_KEYS;
5151
} else if (tokenType.equals(ExpressionLanguageTypes.OP_MATCHES)) {
5252
return KEYWORD_KEYS;
53+
} else if (tokenType.equals(ExpressionLanguageTypes.OP_AND_KW)) {
54+
return KEYWORD_KEYS;
55+
} else if (tokenType.equals(ExpressionLanguageTypes.OP_OR_KW)) {
56+
return KEYWORD_KEYS;
57+
} else if (tokenType.equals(ExpressionLanguageTypes.OP_NOT_KW)) {
58+
return KEYWORD_KEYS;
5359
}
5460

5561
return EMPTY_KEYS;

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/expressionLanguage/ExpressionLanguageParsingTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ public void testNotExpr() {
1313
doTest(true);
1414
}
1515

16+
public void testNotKwExpr() {
17+
doTest(true);
18+
}
19+
1620
public void testUnaryMinus() {
1721
doTest(true);
1822
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
a && b
1+
a && b and c
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
Expression Language File
22
ExpressionLanguageAndExprImpl(AND_EXPR)
3-
ExpressionLanguageRefExprImpl(REF_EXPR)
4-
ExpressionLanguageIdentifierImpl(IDENTIFIER)
5-
PsiElement( ExpressionLanguageType.id)('a')
3+
ExpressionLanguageAndExprImpl(AND_EXPR)
4+
ExpressionLanguageRefExprImpl(REF_EXPR)
5+
ExpressionLanguageIdentifierImpl(IDENTIFIER)
6+
PsiElement( ExpressionLanguageType.id)('a')
7+
PsiWhiteSpace(' ')
8+
PsiElement( ExpressionLanguageType.&&)('&&')
9+
PsiWhiteSpace(' ')
10+
ExpressionLanguageRefExprImpl(REF_EXPR)
11+
ExpressionLanguageIdentifierImpl(IDENTIFIER)
12+
PsiElement( ExpressionLanguageType.id)('b')
613
PsiWhiteSpace(' ')
7-
PsiElement( ExpressionLanguageType.OP_AND)('&&')
14+
PsiElement( ExpressionLanguageType.and)('and')
815
PsiWhiteSpace(' ')
916
ExpressionLanguageRefExprImpl(REF_EXPR)
1017
ExpressionLanguageIdentifierImpl(IDENTIFIER)
11-
PsiElement( ExpressionLanguageType.id)('b')
18+
PsiElement( ExpressionLanguageType.id)('c')
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Expression Language File
22
ExpressionLanguageNotExprImpl(NOT_EXPR)
3-
PsiElement( ExpressionLanguageType.OP_NOT)('!')
3+
PsiElement( ExpressionLanguageType.!)('!')
44
ExpressionLanguageRefExprImpl(REF_EXPR)
55
ExpressionLanguageIdentifierImpl(IDENTIFIER)
66
PsiElement( ExpressionLanguageType.id)('a')
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
not a
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Expression Language File
2+
ExpressionLanguageNotExprImpl(NOT_EXPR)
3+
PsiElement( ExpressionLanguageType.not)('not')
4+
PsiWhiteSpace(' ')
5+
ExpressionLanguageRefExprImpl(REF_EXPR)
6+
ExpressionLanguageIdentifierImpl(IDENTIFIER)
7+
PsiElement( ExpressionLanguageType.id)('a')
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
a || b
1+
a || b or c

0 commit comments

Comments
 (0)