Skip to content

Commit 0bb9942

Browse files
committed
Add better support for is & is not
1 parent 4214a29 commit 0bb9942

File tree

5 files changed

+69073
-69057
lines changed

5 files changed

+69073
-69057
lines changed

grammar.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ module.exports = grammar({
150150

151151
_similar_to: $ => seq($.keyword_similar, $.keyword_to),
152152
_not_similar_to: $ => seq($.keyword_not, $.keyword_similar, $.keyword_to),
153+
is_not: $ => seq($.keyword_is, $.keyword_not),
153154
_not_like: $ => seq($.keyword_not, $.keyword_like),
154155
_temporary: $ => choice($.keyword_temp, $.keyword_temporary),
155156
_not_null: $ => seq($.keyword_not, $.keyword_null),
@@ -1377,6 +1378,8 @@ module.exports = grammar({
13771378
[$._not_similar_to, 'pattern_matching'],
13781379
[seq($.keyword_is, $.keyword_distinct, $.keyword_from), 'binary_relation'],
13791380
[seq($.keyword_is, $.keyword_not, $.keyword_distinct, $.keyword_from), 'binary_relation'],
1381+
[$.keyword_is, 'binary_relation'],
1382+
[$.is_not, 'binary_relation'],
13801383
[$.keyword_and, 'clause_connective'],
13811384
[$.keyword_or, 'clause_connective'],
13821385
[$.keyword_in, 'binary_in'],
@@ -1387,17 +1390,6 @@ module.exports = grammar({
13871390
field('right', $._expression)
13881391
))
13891392
),
1390-
seq(
1391-
$._expression,
1392-
$.keyword_is,
1393-
choice(
1394-
$.keyword_null,
1395-
$._not_null,
1396-
$.keyword_true,
1397-
$.keyword_false,
1398-
),
1399-
),
1400-
// TODO exists/not exists (subquery)
14011393
),
14021394

14031395
_expression: $ => choice(

src/grammar.json

Lines changed: 78 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,19 @@
509509
}
510510
]
511511
},
512+
"is_not": {
513+
"type": "SEQ",
514+
"members": [
515+
{
516+
"type": "SYMBOL",
517+
"name": "keyword_is"
518+
},
519+
{
520+
"type": "SYMBOL",
521+
"name": "keyword_not"
522+
}
523+
]
524+
},
512525
"_not_like": {
513526
"type": "SEQ",
514527
"members": [
@@ -6006,7 +6019,7 @@
60066019
},
60076020
{
60086021
"type": "PREC_LEFT",
6009-
"value": "clause_connective",
6022+
"value": "binary_relation",
60106023
"content": {
60116024
"type": "SEQ",
60126025
"members": [
@@ -6023,7 +6036,7 @@
60236036
"name": "operator",
60246037
"content": {
60256038
"type": "SYMBOL",
6026-
"name": "keyword_and"
6039+
"name": "keyword_is"
60276040
}
60286041
},
60296042
{
@@ -6039,7 +6052,7 @@
60396052
},
60406053
{
60416054
"type": "PREC_LEFT",
6042-
"value": "clause_connective",
6055+
"value": "binary_relation",
60436056
"content": {
60446057
"type": "SEQ",
60456058
"members": [
@@ -6056,7 +6069,7 @@
60566069
"name": "operator",
60576070
"content": {
60586071
"type": "SYMBOL",
6059-
"name": "keyword_or"
6072+
"name": "is_not"
60606073
}
60616074
},
60626075
{
@@ -6072,7 +6085,7 @@
60726085
},
60736086
{
60746087
"type": "PREC_LEFT",
6075-
"value": "binary_in",
6088+
"value": "clause_connective",
60766089
"content": {
60776090
"type": "SEQ",
60786091
"members": [
@@ -6089,7 +6102,7 @@
60896102
"name": "operator",
60906103
"content": {
60916104
"type": "SYMBOL",
6092-
"name": "keyword_in"
6105+
"name": "keyword_and"
60936106
}
60946107
},
60956108
{
@@ -6104,38 +6117,70 @@
61046117
}
61056118
},
61066119
{
6107-
"type": "SEQ",
6108-
"members": [
6109-
{
6110-
"type": "SYMBOL",
6111-
"name": "_expression"
6112-
},
6113-
{
6114-
"type": "SYMBOL",
6115-
"name": "keyword_is"
6116-
},
6117-
{
6118-
"type": "CHOICE",
6119-
"members": [
6120-
{
6120+
"type": "PREC_LEFT",
6121+
"value": "clause_connective",
6122+
"content": {
6123+
"type": "SEQ",
6124+
"members": [
6125+
{
6126+
"type": "FIELD",
6127+
"name": "left",
6128+
"content": {
61216129
"type": "SYMBOL",
6122-
"name": "keyword_null"
6123-
},
6124-
{
6130+
"name": "_expression"
6131+
}
6132+
},
6133+
{
6134+
"type": "FIELD",
6135+
"name": "operator",
6136+
"content": {
61256137
"type": "SYMBOL",
6126-
"name": "_not_null"
6127-
},
6128-
{
6138+
"name": "keyword_or"
6139+
}
6140+
},
6141+
{
6142+
"type": "FIELD",
6143+
"name": "right",
6144+
"content": {
61296145
"type": "SYMBOL",
6130-
"name": "keyword_true"
6131-
},
6132-
{
6146+
"name": "_expression"
6147+
}
6148+
}
6149+
]
6150+
}
6151+
},
6152+
{
6153+
"type": "PREC_LEFT",
6154+
"value": "binary_in",
6155+
"content": {
6156+
"type": "SEQ",
6157+
"members": [
6158+
{
6159+
"type": "FIELD",
6160+
"name": "left",
6161+
"content": {
61336162
"type": "SYMBOL",
6134-
"name": "keyword_false"
6163+
"name": "_expression"
61356164
}
6136-
]
6137-
}
6138-
]
6165+
},
6166+
{
6167+
"type": "FIELD",
6168+
"name": "operator",
6169+
"content": {
6170+
"type": "SYMBOL",
6171+
"name": "keyword_in"
6172+
}
6173+
},
6174+
{
6175+
"type": "FIELD",
6176+
"name": "right",
6177+
"content": {
6178+
"type": "SYMBOL",
6179+
"name": "_expression"
6180+
}
6181+
}
6182+
]
6183+
}
61396184
}
61406185
]
61416186
},

src/node-types.json

Lines changed: 23 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -2373,6 +2373,25 @@
23732373
}
23742374
}
23752375
},
2376+
{
2377+
"type": "is_not",
2378+
"named": true,
2379+
"fields": {},
2380+
"children": {
2381+
"multiple": true,
2382+
"required": true,
2383+
"types": [
2384+
{
2385+
"type": "keyword_is",
2386+
"named": true
2387+
},
2388+
{
2389+
"type": "keyword_not",
2390+
"named": true
2391+
}
2392+
]
2393+
}
2394+
},
23762395
{
23772396
"type": "join",
23782397
"named": true,
@@ -2985,6 +3004,10 @@
29853004
"type": ">=",
29863005
"named": false
29873006
},
3007+
{
3008+
"type": "is_not",
3009+
"named": true
3010+
},
29883011
{
29893012
"type": "keyword_and",
29903013
"named": true
@@ -3081,80 +3104,6 @@
30813104
}
30823105
]
30833106
}
3084-
},
3085-
"children": {
3086-
"multiple": true,
3087-
"required": false,
3088-
"types": [
3089-
{
3090-
"type": "binary_expression",
3091-
"named": true
3092-
},
3093-
{
3094-
"type": "case",
3095-
"named": true
3096-
},
3097-
{
3098-
"type": "cast",
3099-
"named": true
3100-
},
3101-
{
3102-
"type": "count",
3103-
"named": true
3104-
},
3105-
{
3106-
"type": "field",
3107-
"named": true
3108-
},
3109-
{
3110-
"type": "invocation",
3111-
"named": true
3112-
},
3113-
{
3114-
"type": "keyword_false",
3115-
"named": true
3116-
},
3117-
{
3118-
"type": "keyword_is",
3119-
"named": true
3120-
},
3121-
{
3122-
"type": "keyword_not",
3123-
"named": true
3124-
},
3125-
{
3126-
"type": "keyword_null",
3127-
"named": true
3128-
},
3129-
{
3130-
"type": "keyword_true",
3131-
"named": true
3132-
},
3133-
{
3134-
"type": "list",
3135-
"named": true
3136-
},
3137-
{
3138-
"type": "literal",
3139-
"named": true
3140-
},
3141-
{
3142-
"type": "parameter",
3143-
"named": true
3144-
},
3145-
{
3146-
"type": "predicate",
3147-
"named": true
3148-
},
3149-
{
3150-
"type": "subquery",
3151-
"named": true
3152-
},
3153-
{
3154-
"type": "window_function",
3155-
"named": true
3156-
}
3157-
]
31583107
}
31593108
},
31603109
{

0 commit comments

Comments
 (0)