mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
feat!: Indexes for nodes in the AST (#414)
Indexes allow associating extra data with nodes in the AST using an array and then quickly looking up the array to fetch the extra data. - Index eidx for expressions - Index sidx for statements - Index qidx for queries. AST nodes are not cloneable. Therefore once a module is created, it is not possible to accidentally create two nodes with the same index inadvertently via clone. Also added IndexChecker in debug builds. When a module is parsed, it will assert that indexes have been constructed correctly. AST Cleanup - Make literal expressions (null, val, number, string etc) also structs to match all other expressions - Merge True and False nodes into a single Bool node. Also update dependencies. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
committed by
GitHub
parent
620f8a4547
commit
444b2970a1
@@ -3,7 +3,7 @@
|
||||
|
||||
cases:
|
||||
- note: basic
|
||||
rego: |
|
||||
rego: |
|
||||
package test
|
||||
import future.keywords
|
||||
|
||||
@@ -13,48 +13,69 @@ cases:
|
||||
every a, b in vals { check(a) }
|
||||
}
|
||||
}
|
||||
num_expressions: 14
|
||||
num_queries: 3
|
||||
num_statements: 4
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 3
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 8
|
||||
eidx: 4
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 2
|
||||
stmts:
|
||||
- literal:
|
||||
- sidx: 3
|
||||
literal:
|
||||
every:
|
||||
value: x
|
||||
domain:
|
||||
array:
|
||||
- number: 2
|
||||
eidx: 5
|
||||
eidx: 6
|
||||
query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
- sidx: 0
|
||||
literal:
|
||||
expr:
|
||||
boolexpr:
|
||||
op: ">"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 7
|
||||
rhs:
|
||||
number: 0
|
||||
- literal:
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
- sidx: 2
|
||||
literal:
|
||||
every:
|
||||
key: a
|
||||
value: b
|
||||
domain:
|
||||
var: vals
|
||||
eidx: 10
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
- sidx: 1
|
||||
literal:
|
||||
expr:
|
||||
call:
|
||||
fcn:
|
||||
var: check
|
||||
eidx: 11
|
||||
params:
|
||||
- var: a
|
||||
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
|
||||
|
||||
@@ -7,12 +7,16 @@ cases:
|
||||
package test
|
||||
|
||||
x = 1 - 2 * 3 / 4 + 2
|
||||
num_expressions: 11
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -23,6 +27,7 @@ cases:
|
||||
op: "-"
|
||||
lhs:
|
||||
number: 1
|
||||
eidx: 2
|
||||
rhs:
|
||||
arithexpr:
|
||||
op: "/"
|
||||
@@ -31,10 +36,18 @@ cases:
|
||||
op: "*"
|
||||
lhs:
|
||||
number: 2
|
||||
eidx: 3
|
||||
rhs:
|
||||
number: 3
|
||||
eidx: 4
|
||||
eidx: 5
|
||||
rhs:
|
||||
number: 4
|
||||
eidx: 6
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
rhs:
|
||||
number: 2
|
||||
eidx: 9
|
||||
eidx: 10
|
||||
bodies: []
|
||||
|
||||
@@ -8,6 +8,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = [ x | y ] #, 5] # in {5}, 6]
|
||||
num_expressions: 11
|
||||
num_queries: 1
|
||||
num_statements: 1
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -16,18 +19,24 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 7
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
arraycompr:
|
||||
term:
|
||||
var: x
|
||||
eidx: 8
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- span: y
|
||||
literal:
|
||||
expr:
|
||||
var: y
|
||||
eidx: 9
|
||||
sidx: 0
|
||||
eidx: 10
|
||||
bodies: []
|
||||
|
||||
- note: case2-array
|
||||
@@ -36,6 +45,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = [ x | y, 5] # in {5}, 6]
|
||||
num_expressions: 13
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -44,6 +56,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 7
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -52,9 +65,14 @@ cases:
|
||||
op: "|"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 8
|
||||
rhs:
|
||||
var: y
|
||||
eidx: 9
|
||||
eidx: 10
|
||||
- number: 5
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
bodies: []
|
||||
|
||||
- note: case3-compr
|
||||
@@ -64,6 +82,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = [ x | y, 5 in {5}] #, 6]
|
||||
num_expressions: 18
|
||||
num_queries: 1
|
||||
num_statements: 1
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -72,25 +93,36 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
arraycompr:
|
||||
term:
|
||||
var: x
|
||||
eidx: 11
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- span: y, 5 in {5}
|
||||
sidx: 0
|
||||
literal:
|
||||
expr:
|
||||
inexpr:
|
||||
key:
|
||||
var: y
|
||||
eidx: 12
|
||||
value:
|
||||
number: 5
|
||||
eidx: 13
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 14
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
eidx: 15
|
||||
eidx: 17
|
||||
bodies: []
|
||||
|
||||
- note: case4-array
|
||||
@@ -100,6 +132,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = [ x | y, 5 in {5}, 6]
|
||||
num_expressions: 20
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -108,6 +143,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -116,15 +152,24 @@ cases:
|
||||
op: "|"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 11
|
||||
rhs:
|
||||
var: y
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
- inexpr:
|
||||
value:
|
||||
number: 5
|
||||
eidx: 14
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
eidx: 17
|
||||
- number: 6
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
bodies: []
|
||||
|
||||
- note: case5-array
|
||||
@@ -134,6 +179,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = [ x - {10} | y, 5 in {5}] #, 6]
|
||||
num_expressions: 22
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -142,6 +190,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -153,17 +202,28 @@ cases:
|
||||
op: "-"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 11
|
||||
rhs:
|
||||
set:
|
||||
- number: 10
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
rhs:
|
||||
var: y
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
- inexpr:
|
||||
value:
|
||||
number: 5
|
||||
eidx: 17
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
eidx: 20
|
||||
eidx: 21
|
||||
bodies: []
|
||||
|
||||
- note: case6-compr
|
||||
@@ -173,6 +233,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = [ (x - {10}) | y, 5 in {5}] #, 6]
|
||||
num_expressions: 21
|
||||
num_queries: 1
|
||||
num_statements: 1
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -181,6 +244,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -190,19 +254,31 @@ cases:
|
||||
op: "-"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 11
|
||||
rhs:
|
||||
set:
|
||||
- number: 10
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
- sidx: 0
|
||||
literal:
|
||||
expr:
|
||||
inexpr:
|
||||
key:
|
||||
var: y
|
||||
eidx: 15
|
||||
value:
|
||||
number: 5
|
||||
eidx: 16
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 17
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
eidx: 20
|
||||
bodies: []
|
||||
|
||||
@@ -17,19 +17,24 @@ cases:
|
||||
# Nested empty
|
||||
[[[[[]]]]]
|
||||
]
|
||||
|
||||
num_expressions: 17
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
span: = {1}
|
||||
op: "="
|
||||
value:
|
||||
set:
|
||||
- number: 1
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
bodies: --skip--
|
||||
|
||||
- spec:
|
||||
@@ -37,21 +42,34 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
array:
|
||||
- number: 2.5
|
||||
eidx: 5
|
||||
- string: abc
|
||||
eidx: 6
|
||||
- array:
|
||||
- number: 4
|
||||
eidx: 7
|
||||
- rawstring: raw
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
- array: []
|
||||
eidx: 10
|
||||
- array:
|
||||
- array:
|
||||
- array:
|
||||
- array:
|
||||
- array: []
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
bodies: []
|
||||
|
||||
- note: trailing-comma
|
||||
@@ -60,12 +78,16 @@ cases:
|
||||
x = [1,]
|
||||
y = [1,2
|
||||
,]
|
||||
num_expressions: 8
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
@@ -73,12 +95,15 @@ cases:
|
||||
span: "[1,]"
|
||||
values:
|
||||
- number: 1
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
@@ -86,7 +111,10 @@ cases:
|
||||
span: "[1,2\n,]"
|
||||
values:
|
||||
- number: 1
|
||||
eidx: 5
|
||||
- number: 2
|
||||
eidx: 6
|
||||
eidx: 7
|
||||
bodies: []
|
||||
|
||||
- note: no-comma
|
||||
|
||||
@@ -10,12 +10,16 @@ cases:
|
||||
# If not the following expressions would evaluate to empty set.
|
||||
x = {1, 2, 3} | {2} & {4}
|
||||
y = {2} & {4} | {1, 2, 3}
|
||||
num_expressions: 23
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -24,23 +28,34 @@ cases:
|
||||
lhs:
|
||||
set:
|
||||
- number: 1
|
||||
eidx: 2
|
||||
- number: 2
|
||||
eidx: 3
|
||||
- number: 3
|
||||
eidx: 4
|
||||
eidx: 5
|
||||
rhs:
|
||||
binexpr:
|
||||
op: "&"
|
||||
lhs:
|
||||
set:
|
||||
- number: 2
|
||||
eidx: 6
|
||||
eidx: 7
|
||||
rhs:
|
||||
set:
|
||||
- number: 4
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
eidx: 10
|
||||
eidx: 11
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 12
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -49,16 +64,26 @@ cases:
|
||||
rhs:
|
||||
set:
|
||||
- number: 1
|
||||
eidx: 18
|
||||
- number: 2
|
||||
eidx: 19
|
||||
- number: 3
|
||||
eidx: 20
|
||||
eidx: 21
|
||||
lhs:
|
||||
binexpr:
|
||||
op: "&"
|
||||
lhs:
|
||||
set:
|
||||
- number: 2
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
rhs:
|
||||
set:
|
||||
- number: 4
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
eidx: 17
|
||||
eidx: 22
|
||||
bodies: []
|
||||
|
||||
|
||||
|
||||
@@ -13,13 +13,16 @@ cases:
|
||||
# different types against object
|
||||
# different types against set
|
||||
# strings etc
|
||||
|
||||
num_expressions: 9
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -29,15 +32,22 @@ cases:
|
||||
arithexpr:
|
||||
op: "+"
|
||||
lhs:
|
||||
number: 1
|
||||
number: 1
|
||||
eidx: 2
|
||||
rhs:
|
||||
number: 2
|
||||
eidx: 3
|
||||
eidx: 4
|
||||
rhs:
|
||||
arithexpr:
|
||||
op: "-"
|
||||
lhs:
|
||||
number: 3
|
||||
eidx: 5
|
||||
rhs:
|
||||
number: 2
|
||||
|
||||
eidx: 6
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
|
||||
bodies: []
|
||||
|
||||
@@ -11,6 +11,9 @@ cases:
|
||||
|
||||
# Trailing comma
|
||||
x = inc(5,)
|
||||
num_expressions: 13
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
@@ -19,30 +22,42 @@ cases:
|
||||
refbrack:
|
||||
refr:
|
||||
var: deny
|
||||
eidx: 1
|
||||
index:
|
||||
call:
|
||||
fcn:
|
||||
var: sprintf
|
||||
eidx: 2
|
||||
params:
|
||||
- string: "Hello %v"
|
||||
eidx: 3
|
||||
- array:
|
||||
- string: "world"
|
||||
eidx: 4
|
||||
eidx: 5
|
||||
eidx: 6
|
||||
eidx: 7
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
number: 1
|
||||
eidx: 8
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 9
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
call:
|
||||
fcn:
|
||||
var: inc
|
||||
eidx: 10
|
||||
params:
|
||||
- number: 5
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
bodies: []
|
||||
|
||||
@@ -13,29 +13,38 @@ cases:
|
||||
# The following will be parsed as
|
||||
# (5 in [4, 5]) in (set() | {true})
|
||||
z = 5 in [4, 5] in set() | {true}
|
||||
|
||||
num_expressions: 21
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
inexpr:
|
||||
value:
|
||||
number: 5
|
||||
eidx: 5
|
||||
collection:
|
||||
array:
|
||||
- number: 4
|
||||
eidx: 6
|
||||
- number: 5
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
@@ -44,16 +53,26 @@ cases:
|
||||
inexpr:
|
||||
value:
|
||||
number: 5
|
||||
eidx: 11
|
||||
collection:
|
||||
array:
|
||||
- number: 4
|
||||
eidx: 12
|
||||
- number: 5
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
eidx: 15
|
||||
collection:
|
||||
binexpr:
|
||||
op: "|"
|
||||
lhs:
|
||||
set: []
|
||||
eidx: 16
|
||||
rhs:
|
||||
set:
|
||||
- true
|
||||
- bool: true
|
||||
eidx: 17
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
eidx: 20
|
||||
bodies: []
|
||||
|
||||
@@ -12,29 +12,37 @@ cases:
|
||||
|
||||
# Chained in-exprs
|
||||
y = 0, 5 in c in d
|
||||
num_expressions: 17
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
inexpr:
|
||||
key:
|
||||
number: 0
|
||||
eidx: 5
|
||||
value:
|
||||
number: 5
|
||||
eidx: 6
|
||||
collection:
|
||||
array:
|
||||
- number: 5
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 10
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
@@ -43,10 +51,16 @@ cases:
|
||||
inexpr:
|
||||
key:
|
||||
number: 0
|
||||
eidx: 11
|
||||
value:
|
||||
number: 5
|
||||
eidx: 12
|
||||
collection:
|
||||
var: c
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
collection:
|
||||
var: d
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
bodies: []
|
||||
|
||||
@@ -47,6 +47,9 @@ cases:
|
||||
"p" : "q", "r" in "d" : "e"
|
||||
|
||||
}
|
||||
num_expressions: 54
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- spec:
|
||||
span: x = {}
|
||||
@@ -55,18 +58,21 @@ cases:
|
||||
span: x = {}
|
||||
refr:
|
||||
var: x
|
||||
eidx: 4
|
||||
assign:
|
||||
span: = {}
|
||||
op: =
|
||||
value:
|
||||
object:
|
||||
fields: []
|
||||
eidx: 5
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 6
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -74,14 +80,18 @@ cases:
|
||||
fields:
|
||||
- key:
|
||||
string: a
|
||||
eidx: 7
|
||||
value:
|
||||
number: 5
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -89,75 +99,121 @@ cases:
|
||||
fields:
|
||||
- key:
|
||||
string: a
|
||||
eidx: 11
|
||||
value:
|
||||
number: 5
|
||||
eidx: 12
|
||||
- key:
|
||||
string: b
|
||||
eidx: 13
|
||||
value:
|
||||
array:
|
||||
- number: 1
|
||||
eidx: 14
|
||||
- number: 2
|
||||
eidx: 15
|
||||
- number: 3
|
||||
eidx: 16
|
||||
eidx: 17
|
||||
- key:
|
||||
string: c
|
||||
eidx: 18
|
||||
value:
|
||||
set:
|
||||
- number: 4
|
||||
eidx: 19
|
||||
- number: 5
|
||||
eidx: 20
|
||||
- number : 6
|
||||
eidx: 21
|
||||
eidx: 22
|
||||
- key:
|
||||
string: d
|
||||
eidx: 23
|
||||
value:
|
||||
object:
|
||||
fields:
|
||||
- key:
|
||||
string: a
|
||||
eidx: 24
|
||||
value:
|
||||
number: 5
|
||||
eidx: 25
|
||||
- key:
|
||||
string: b
|
||||
eidx: 26
|
||||
value:
|
||||
set: []
|
||||
eidx: 27
|
||||
eidx: 28
|
||||
- key:
|
||||
array:
|
||||
- number: 1
|
||||
eidx: 29
|
||||
- number: 2
|
||||
eidx: 30
|
||||
- number: 3
|
||||
eidx: 31
|
||||
eidx: 32
|
||||
value:
|
||||
number: 4
|
||||
eidx: 33
|
||||
- key:
|
||||
set:
|
||||
- number: 1
|
||||
eidx: 34
|
||||
eidx: 35
|
||||
value:
|
||||
number: 2
|
||||
eidx: 36
|
||||
- key:
|
||||
object:
|
||||
fields:
|
||||
- key:
|
||||
string: a
|
||||
eidx: 37
|
||||
value:
|
||||
number: 1
|
||||
eidx: 38
|
||||
- key:
|
||||
string: b
|
||||
eidx: 39
|
||||
value:
|
||||
number: 2
|
||||
eidx: 40
|
||||
eidx: 41
|
||||
value:
|
||||
rawstring: "hello,\n world"
|
||||
- key: null
|
||||
value: false
|
||||
- key: true
|
||||
value: true
|
||||
eidx: 42
|
||||
- key:
|
||||
"null": null
|
||||
eidx: 43
|
||||
value:
|
||||
bool: false
|
||||
eidx: 44
|
||||
- key:
|
||||
bool: true
|
||||
eidx: 45
|
||||
value:
|
||||
bool: true
|
||||
eidx: 46
|
||||
- key:
|
||||
string: p
|
||||
eidx: 47
|
||||
value:
|
||||
string: q
|
||||
eidx: 48
|
||||
- key:
|
||||
inexpr:
|
||||
value:
|
||||
string: r
|
||||
eidx: 49
|
||||
collection:
|
||||
string: d
|
||||
eidx: 50
|
||||
eidx: 51
|
||||
value:
|
||||
string: e
|
||||
|
||||
eidx: 52
|
||||
eidx: 53
|
||||
bodies: []
|
||||
|
||||
@@ -8,6 +8,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = { x | y } #, 5} # in {5}, 6}
|
||||
num_expressions: 11
|
||||
num_statements: 1
|
||||
num_queries: 1
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -16,18 +19,24 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 7
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
setcompr:
|
||||
term:
|
||||
var: x
|
||||
eidx: 8
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- span: y
|
||||
sidx: 0
|
||||
literal:
|
||||
expr:
|
||||
var: y
|
||||
eidx: 9
|
||||
eidx: 10
|
||||
bodies: []
|
||||
|
||||
- note: case2-set
|
||||
@@ -36,6 +45,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = { x | y, 5} # in {5}, 6}
|
||||
num_expressions: 13
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -44,6 +56,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 7
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -52,9 +65,14 @@ cases:
|
||||
op: "|"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 8
|
||||
rhs:
|
||||
var: y
|
||||
eidx: 9
|
||||
eidx: 10
|
||||
- number: 5
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
bodies: []
|
||||
|
||||
- note: case3-compr
|
||||
@@ -64,6 +82,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = { x | y, 5 in {5}} #, 6}
|
||||
num_expressions: 18
|
||||
num_statements: 1
|
||||
num_queries: 1
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -72,25 +93,35 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
setcompr:
|
||||
term:
|
||||
var: x
|
||||
eidx: 11
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- span: y, 5 in {5}
|
||||
sidx: 0
|
||||
literal:
|
||||
expr:
|
||||
inexpr:
|
||||
key:
|
||||
var: y
|
||||
var: y
|
||||
eidx: 12
|
||||
value:
|
||||
number: 5
|
||||
eidx: 13
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 14
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
eidx: 17
|
||||
bodies: []
|
||||
|
||||
- note: case4-set
|
||||
@@ -100,6 +131,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = { x | y, 5 in {5}, 6}
|
||||
num_expressions: 20
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -108,6 +142,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -116,15 +151,24 @@ cases:
|
||||
op: "|"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 11
|
||||
rhs:
|
||||
var: y
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
- inexpr:
|
||||
value:
|
||||
number: 5
|
||||
eidx: 14
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
eidx: 17
|
||||
- number: 6
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
bodies: []
|
||||
|
||||
- note: case5-set
|
||||
@@ -134,6 +178,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = { x - {10} | y, 5 in {5}} #, 6}
|
||||
num_expressions: 22
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -142,6 +189,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -153,17 +201,28 @@ cases:
|
||||
op: "-"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 11
|
||||
rhs:
|
||||
set:
|
||||
- number: 10
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
rhs:
|
||||
var: y
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
- inexpr:
|
||||
value:
|
||||
number: 5
|
||||
eidx: 17
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
eidx: 20
|
||||
eidx: 21
|
||||
bodies: []
|
||||
|
||||
- note: case6-compr
|
||||
@@ -173,6 +232,9 @@ cases:
|
||||
x = {1}
|
||||
y = {2}
|
||||
z = { (x - {10}) | y, 5 in {5}} #, 6}
|
||||
num_expressions: 21
|
||||
num_statements: 1
|
||||
num_queries: 1
|
||||
policy:
|
||||
- --skip--
|
||||
- --skip--
|
||||
@@ -181,6 +243,7 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 10
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
@@ -190,19 +253,31 @@ cases:
|
||||
op: "-"
|
||||
lhs:
|
||||
var: x
|
||||
eidx: 11
|
||||
rhs:
|
||||
set:
|
||||
- number: 10
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
- sidx: 0
|
||||
literal:
|
||||
expr:
|
||||
inexpr:
|
||||
key:
|
||||
var: y
|
||||
eidx: 15
|
||||
value:
|
||||
number: 5
|
||||
eidx: 16
|
||||
collection:
|
||||
set:
|
||||
- number: 5
|
||||
eidx: 17
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
eidx: 20
|
||||
bodies: []
|
||||
|
||||
@@ -17,19 +17,24 @@ cases:
|
||||
# Nested empty
|
||||
{{{{{}}}}}
|
||||
}
|
||||
|
||||
num_expressions: 17
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
span: = {1}
|
||||
op: "="
|
||||
value:
|
||||
set:
|
||||
- number: 1
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
bodies: --skip--
|
||||
|
||||
- spec:
|
||||
@@ -37,16 +42,23 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
set:
|
||||
- number: 2.5
|
||||
eidx: 5
|
||||
- string: abc
|
||||
eidx: 6
|
||||
- set:
|
||||
- number: 4
|
||||
eidx: 7
|
||||
- rawstring: raw
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
- set: []
|
||||
eidx: 10
|
||||
- set:
|
||||
- set:
|
||||
- set:
|
||||
@@ -54,6 +66,12 @@ cases:
|
||||
- object:
|
||||
span: "{}"
|
||||
fields: []
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
bodies: []
|
||||
|
||||
- note: trailing-comma
|
||||
@@ -62,12 +80,16 @@ cases:
|
||||
x = {1,}
|
||||
y = {1,2
|
||||
,}
|
||||
num_expressions: 8
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
@@ -75,12 +97,15 @@ cases:
|
||||
span: "{1,}"
|
||||
values:
|
||||
- number: 1
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
@@ -88,16 +113,19 @@ cases:
|
||||
span: "{1,2\n,}"
|
||||
values:
|
||||
- number: 1
|
||||
eidx: 5
|
||||
- number: 2
|
||||
eidx: 6
|
||||
eidx: 7
|
||||
bodies: []
|
||||
|
||||
|
||||
|
||||
- note: no-comma
|
||||
rego: |
|
||||
package test
|
||||
x = {1 2}
|
||||
error: expecting `}` while parsing set
|
||||
|
||||
|
||||
- note: two-trailing-commas
|
||||
rego: |
|
||||
package test
|
||||
|
||||
@@ -6,6 +6,7 @@ cases:
|
||||
rego: |
|
||||
package test
|
||||
import future.keywords
|
||||
num_expressions: 3
|
||||
imports:
|
||||
- span: import future.keywords
|
||||
refr:
|
||||
@@ -13,7 +14,9 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 1
|
||||
field: keywords
|
||||
eidx: 2
|
||||
|
||||
- note: all
|
||||
rego: |
|
||||
@@ -22,6 +25,7 @@ cases:
|
||||
import future.keywords.if
|
||||
import
|
||||
future.keywords.in
|
||||
num_expressions: 13
|
||||
imports:
|
||||
- span: import future.keywords.contains
|
||||
refr:
|
||||
@@ -32,8 +36,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 1
|
||||
field: keywords
|
||||
eidx: 2
|
||||
field: contains
|
||||
eidx: 3
|
||||
- span: import future.keywords.every
|
||||
refr:
|
||||
refdot:
|
||||
@@ -43,8 +50,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 4
|
||||
field: keywords
|
||||
eidx: 5
|
||||
field: every
|
||||
eidx: 6
|
||||
- span: import future.keywords.if
|
||||
refr:
|
||||
refdot:
|
||||
@@ -54,8 +64,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 7
|
||||
field: keywords
|
||||
eidx: 8
|
||||
field: if
|
||||
eidx: 9
|
||||
- span: "import\nfuture.keywords.in"
|
||||
refr:
|
||||
refdot:
|
||||
@@ -65,8 +78,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 10
|
||||
field: keywords
|
||||
eidx: 11
|
||||
field: in
|
||||
eidx: 12
|
||||
|
||||
- note: bracket
|
||||
rego: |
|
||||
@@ -74,6 +90,9 @@ cases:
|
||||
import future["keywords"]["contains"] import future.keywords["every"]
|
||||
import
|
||||
future["keywords"].if
|
||||
num_expressions: 14
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import future["keywords"]["contains"]
|
||||
refr:
|
||||
@@ -84,10 +103,15 @@ cases:
|
||||
span: future["keywords"]
|
||||
refr:
|
||||
var: future
|
||||
eidx: 1
|
||||
index:
|
||||
string: keywords
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
index:
|
||||
string: contains
|
||||
eidx: 4
|
||||
eidx: 5
|
||||
- span: import future.keywords["every"]
|
||||
refr:
|
||||
refbrack:
|
||||
@@ -97,9 +121,13 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 6
|
||||
field: keywords
|
||||
eidx: 7
|
||||
index:
|
||||
string: every
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
- span: "import\nfuture[\"keywords\"].if"
|
||||
refr:
|
||||
refdot:
|
||||
@@ -109,9 +137,13 @@ cases:
|
||||
span: future["keywords"]
|
||||
refr:
|
||||
var: future
|
||||
eidx: 10
|
||||
index:
|
||||
string: keywords
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
field: if
|
||||
eidx: 13
|
||||
|
||||
- note: as
|
||||
rego: |
|
||||
@@ -126,6 +158,9 @@ cases:
|
||||
import future["keywords"]
|
||||
#error: "this import shadows previous import of `contains`"
|
||||
query: data.test
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
want_result: {}
|
||||
|
||||
- note: shadow/1
|
||||
@@ -134,6 +169,9 @@ cases:
|
||||
import future.keywords
|
||||
import future.keywords.if
|
||||
#error: "this import shadows previous import of `if`"
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
query: data.test
|
||||
want_result: {}
|
||||
|
||||
@@ -144,6 +182,9 @@ cases:
|
||||
import future.keywords
|
||||
#error: "this import shadows previous import of `if`"
|
||||
query: data.test
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
want_result: {}
|
||||
|
||||
- note: in-as-var
|
||||
@@ -151,6 +192,9 @@ cases:
|
||||
package test
|
||||
import future.keywords.if
|
||||
in = 5
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
|
||||
- note: in-as-var-imported
|
||||
rego: |
|
||||
|
||||
@@ -7,68 +7,96 @@ cases:
|
||||
package test
|
||||
import data
|
||||
import input
|
||||
num_expressions: 3
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import data
|
||||
refr:
|
||||
var: data
|
||||
eidx: 1
|
||||
- span: import input
|
||||
refr:
|
||||
var: input
|
||||
eidx: 2
|
||||
|
||||
- note: input
|
||||
rego: |
|
||||
package test
|
||||
import input
|
||||
num_expressions: 2
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import input
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
|
||||
- note: dot
|
||||
rego: |
|
||||
package test
|
||||
import input.a
|
||||
import data.b
|
||||
num_expressions: 5
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import input.a
|
||||
refr:
|
||||
refdot:
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
field: a
|
||||
eidx: 2
|
||||
- span: import data.b
|
||||
refr:
|
||||
refdot:
|
||||
refr:
|
||||
var: data
|
||||
eidx: 3
|
||||
field: b
|
||||
eidx: 4
|
||||
|
||||
- note: bracket
|
||||
rego: |
|
||||
package test
|
||||
import input["a"]
|
||||
import data["b"]
|
||||
num_expressions: 7
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import input["a"]
|
||||
refr:
|
||||
refbrack:
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
index:
|
||||
string: a
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
- span: import data["b"]
|
||||
refr:
|
||||
refbrack:
|
||||
refr:
|
||||
var: data
|
||||
eidx: 4
|
||||
index:
|
||||
string: b
|
||||
eidx: 5
|
||||
eidx: 6
|
||||
|
||||
- note: multi-dot
|
||||
rego: |
|
||||
package test
|
||||
import input.a.b
|
||||
import data.c.d
|
||||
num_expressions: 7
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import input.a.b
|
||||
refr:
|
||||
@@ -79,8 +107,11 @@ cases:
|
||||
span: input.a
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
field: a
|
||||
eidx: 2
|
||||
field: b
|
||||
eidx: 3
|
||||
- span: import data.c.d
|
||||
refr:
|
||||
refdot:
|
||||
@@ -90,8 +121,11 @@ cases:
|
||||
span: data.c
|
||||
refr:
|
||||
var: data
|
||||
eidx: 4
|
||||
field: c
|
||||
eidx: 5
|
||||
field: d
|
||||
eidx: 6
|
||||
policy: []
|
||||
|
||||
|
||||
@@ -100,6 +134,9 @@ cases:
|
||||
package test
|
||||
import input["b.c"].d["e.f"].g
|
||||
import data.a["b.c"].d["e.f"]
|
||||
num_expressions: 15
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package: --skip--
|
||||
imports:
|
||||
- span: import input["b.c"].d["e.f"].g
|
||||
@@ -117,12 +154,19 @@ cases:
|
||||
span: input["b.c"]
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
index:
|
||||
string: b.c
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
field: d
|
||||
eidx: 4
|
||||
index:
|
||||
string: e.f
|
||||
eidx: 5
|
||||
eidx: 6
|
||||
field: g
|
||||
eidx: 7
|
||||
- span: import data.a["b.c"].d["e.f"]
|
||||
refr:
|
||||
refbrack:
|
||||
@@ -138,12 +182,19 @@ cases:
|
||||
span: data.a
|
||||
refr:
|
||||
var: data
|
||||
eidx: 8
|
||||
field: a
|
||||
eidx: 9
|
||||
index:
|
||||
string: b.c
|
||||
eidx: 10
|
||||
eidx: 11
|
||||
field: d
|
||||
eidx: 12
|
||||
index:
|
||||
string: e.f
|
||||
eidx: 13
|
||||
eidx: 14
|
||||
|
||||
- note: same-line
|
||||
rego: package test import input.a["b"] import data["c"].d
|
||||
@@ -151,6 +202,10 @@ cases:
|
||||
span: package test
|
||||
refr:
|
||||
var: test
|
||||
eidx: 0
|
||||
num_expressions: 9
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import input.a["b"]
|
||||
refr:
|
||||
@@ -161,9 +216,13 @@ cases:
|
||||
span: input.a
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
field: a
|
||||
eidx: 2
|
||||
index:
|
||||
string: b
|
||||
eidx: 3
|
||||
eidx: 4
|
||||
- span: import data["c"].d
|
||||
refr:
|
||||
refdot:
|
||||
@@ -173,14 +232,20 @@ cases:
|
||||
span: data["c"]
|
||||
refr:
|
||||
var: data
|
||||
eidx: 5
|
||||
index:
|
||||
string: c
|
||||
eidx: 6
|
||||
eidx: 7
|
||||
field: d
|
||||
|
||||
eidx: 8
|
||||
- note: as
|
||||
rego: |
|
||||
package test
|
||||
import input.x as y
|
||||
num_expressions: 3
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import input.x as y
|
||||
refr:
|
||||
@@ -188,7 +253,9 @@ cases:
|
||||
span: input.x
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
field: x
|
||||
eidx: 2
|
||||
as: y
|
||||
|
||||
- note: as/newline
|
||||
@@ -198,6 +265,9 @@ cases:
|
||||
input.x
|
||||
as
|
||||
y
|
||||
num_expressions: 3
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: "import\ninput.x\nas\ny"
|
||||
refr:
|
||||
@@ -205,7 +275,9 @@ cases:
|
||||
span: input.x
|
||||
refr:
|
||||
var: input
|
||||
eidx: 1
|
||||
field: x
|
||||
eidx: 2
|
||||
as: y
|
||||
|
||||
- note: missing-ref
|
||||
|
||||
@@ -4,20 +4,31 @@
|
||||
cases:
|
||||
- note: single-char
|
||||
rego: package a
|
||||
num_expressions: 1
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package:
|
||||
span: package a
|
||||
refr:
|
||||
var: a
|
||||
eidx: 0
|
||||
|
||||
- note: simple
|
||||
rego: package test
|
||||
num_expressions: 1
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package:
|
||||
span: package test
|
||||
refr:
|
||||
var: test
|
||||
eidx: 0
|
||||
|
||||
- note: dot
|
||||
rego: package a.b
|
||||
num_expressions: 2
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package:
|
||||
span: package a.b
|
||||
refr:
|
||||
@@ -25,10 +36,15 @@ cases:
|
||||
span: a.b
|
||||
refr:
|
||||
var: a
|
||||
eidx: 0
|
||||
field: b
|
||||
eidx: 1
|
||||
|
||||
- note: multi-dot
|
||||
rego: package a.b.c
|
||||
num_expressions: 3
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package:
|
||||
span: package a.b.c
|
||||
refr:
|
||||
@@ -39,11 +55,17 @@ cases:
|
||||
span: a.b
|
||||
refr:
|
||||
var: a
|
||||
eidx: 0
|
||||
field: b
|
||||
eidx: 1
|
||||
field: c
|
||||
eidx: 2
|
||||
|
||||
- note: bracket
|
||||
rego: package a["b"]
|
||||
num_expressions: 3
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package:
|
||||
span: package a["b"]
|
||||
refr:
|
||||
@@ -51,11 +73,17 @@ cases:
|
||||
span: a["b"]
|
||||
refr:
|
||||
var: a
|
||||
eidx: 0
|
||||
index:
|
||||
string: b
|
||||
eidx: 1
|
||||
eidx: 2
|
||||
|
||||
- note: multi-bracket
|
||||
rego: package a["b"]["c.d"]
|
||||
num_expressions: 5
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package:
|
||||
span: package a["b"]["c.d"]
|
||||
refr:
|
||||
@@ -66,35 +94,50 @@ cases:
|
||||
span: a["b"]
|
||||
refr:
|
||||
var: a
|
||||
eidx: 0
|
||||
index:
|
||||
string: b
|
||||
eidx: 1
|
||||
eidx: 2
|
||||
index:
|
||||
string: c.d
|
||||
eidx: 3
|
||||
eidx: 4
|
||||
|
||||
- note: complex
|
||||
rego: package a["b.c"].d["e.f"].g
|
||||
num_expressions: 7
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package:
|
||||
span: package a["b.c"].d["e.f"].g
|
||||
refr:
|
||||
refdot:
|
||||
span: a["b.c"].d["e.f"].g
|
||||
refr:
|
||||
refbrack:
|
||||
span: a["b.c"].d["e.f"]
|
||||
refr:
|
||||
refdot:
|
||||
span: a["b.c"].d
|
||||
refr:
|
||||
refbrack:
|
||||
span: a["b.c"]
|
||||
refr:
|
||||
var: a
|
||||
index:
|
||||
string: "b.c"
|
||||
field: d
|
||||
index:
|
||||
string: e.f
|
||||
refbrack:
|
||||
span: a["b.c"].d["e.f"]
|
||||
refr:
|
||||
refdot:
|
||||
span: a["b.c"].d
|
||||
refr:
|
||||
refbrack:
|
||||
span: a["b.c"]
|
||||
refr:
|
||||
var: a
|
||||
eidx: 0
|
||||
index:
|
||||
string: "b.c"
|
||||
eidx: 1
|
||||
eidx: 2
|
||||
field: d
|
||||
eidx: 3
|
||||
index:
|
||||
string: e.f
|
||||
eidx: 4
|
||||
eidx: 5
|
||||
field: g
|
||||
eidx: 6
|
||||
|
||||
- note: missing-package-keyword
|
||||
rego: packge a
|
||||
|
||||
@@ -6,6 +6,9 @@ cases:
|
||||
rego: |
|
||||
package test
|
||||
add(x, y) := 5 sub(x, y) = 5
|
||||
num_expressions: 9
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
package: --skip--
|
||||
imports:
|
||||
policy:
|
||||
@@ -16,14 +19,18 @@ cases:
|
||||
span: add(x, y) := 5
|
||||
refr:
|
||||
var: add
|
||||
eidx: 1
|
||||
args:
|
||||
- var: x
|
||||
eidx: 2
|
||||
- var: y
|
||||
eidx: 3
|
||||
assign:
|
||||
span: := 5
|
||||
op: :=
|
||||
value:
|
||||
number: 5
|
||||
eidx: 4
|
||||
bodies: []
|
||||
- spec:
|
||||
span: sub(x, y) = 5
|
||||
@@ -32,13 +39,17 @@ cases:
|
||||
span: sub(x, y) = 5
|
||||
refr:
|
||||
var: sub
|
||||
eidx: 5
|
||||
args:
|
||||
- var: x
|
||||
eidx: 6
|
||||
- var: y
|
||||
eidx: 7
|
||||
assign:
|
||||
span: = 5
|
||||
op: =
|
||||
value:
|
||||
number: 5
|
||||
eidx: 8
|
||||
bodies: []
|
||||
|
||||
|
||||
|
||||
@@ -12,6 +12,9 @@ cases:
|
||||
error: unexpected keyword `else`
|
||||
|
||||
- note: no-query
|
||||
num_expressions: 5
|
||||
num_statements: 2
|
||||
num_queries: 2
|
||||
rego: |
|
||||
package test
|
||||
|
||||
@@ -26,21 +29,29 @@ cases:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 10
|
||||
eidx: 2
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
false
|
||||
bool: false
|
||||
eidx: 3
|
||||
sidx: 0
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 4
|
||||
sidx: 1
|
||||
|
||||
- note: no-else
|
||||
rego: |
|
||||
@@ -51,27 +62,38 @@ cases:
|
||||
} {
|
||||
true
|
||||
}
|
||||
num_expressions: 5
|
||||
num_statements: 2
|
||||
num_queries: 2
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 10
|
||||
eidx: 2
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
false
|
||||
bool: false
|
||||
eidx: 3
|
||||
sidx: 0
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 4
|
||||
sidx: 1
|
||||
|
||||
- note: if-no-else
|
||||
rego: |
|
||||
@@ -83,27 +105,38 @@ cases:
|
||||
} {
|
||||
true
|
||||
}
|
||||
num_expressions: 8
|
||||
num_statements: 2
|
||||
num_queries: 2
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 10
|
||||
eidx: 5
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
false
|
||||
bool: false
|
||||
eidx: 6
|
||||
sidx: 0
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 7
|
||||
sidx: 1
|
||||
|
||||
- note: rule-named-if
|
||||
rego: |
|
||||
@@ -114,33 +147,45 @@ cases:
|
||||
} {
|
||||
true
|
||||
}
|
||||
num_expressions: 6
|
||||
num_statements: 2
|
||||
num_queries: 2
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 10
|
||||
eidx: 2
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: if
|
||||
eidx: 3
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
false
|
||||
bool: false
|
||||
eidx: 4
|
||||
sidx: 0
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 5
|
||||
sidx: 1
|
||||
|
||||
- note: query-else
|
||||
rego: |
|
||||
@@ -151,27 +196,38 @@ cases:
|
||||
} else {
|
||||
true
|
||||
}
|
||||
num_expressions: 5
|
||||
num_queries: 2
|
||||
num_statements: 2
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 1
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 10
|
||||
eidx: 2
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
false
|
||||
bool: false
|
||||
eidx: 3
|
||||
sidx: 0
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 4
|
||||
sidx: 1
|
||||
|
||||
- note: if-literal-else
|
||||
rego: |
|
||||
@@ -181,18 +237,24 @@ cases:
|
||||
x = 10 if 1 < 0 else {
|
||||
true
|
||||
}
|
||||
num_expressions: 10
|
||||
num_statements: 2
|
||||
num_queries: 2
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 10
|
||||
eidx: 5
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
@@ -200,13 +262,20 @@ cases:
|
||||
op: "<"
|
||||
lhs:
|
||||
number: 1
|
||||
eidx: 6
|
||||
rhs:
|
||||
number: 0
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
sidx: 0
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 9
|
||||
sidx: 1
|
||||
|
||||
- note: if-literal-else-assign
|
||||
rego: |
|
||||
@@ -217,18 +286,24 @@ cases:
|
||||
x = 10 if 1 < 0 else := 20 {
|
||||
true
|
||||
}
|
||||
num_expressions: 11
|
||||
num_statements: 2
|
||||
num_queries: 2
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x
|
||||
eidx: 4
|
||||
assign:
|
||||
op: "="
|
||||
value:
|
||||
number: 10
|
||||
eidx: 5
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
@@ -236,17 +311,25 @@ cases:
|
||||
op: "<"
|
||||
lhs:
|
||||
number: 1
|
||||
eidx: 6
|
||||
rhs:
|
||||
number: 0
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
sidx: 0
|
||||
- assign:
|
||||
op: ":="
|
||||
value:
|
||||
number: 20
|
||||
eidx: 9
|
||||
query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 10
|
||||
sidx: 1
|
||||
|
||||
- note: contains-else-error
|
||||
rego: |
|
||||
|
||||
@@ -8,6 +8,9 @@ cases:
|
||||
import future.keywords
|
||||
|
||||
deny.a contains 0, "bar" in ["bar1"] if true
|
||||
num_expressions: 11
|
||||
num_statements: 1
|
||||
num_queries: 1
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
@@ -16,27 +19,37 @@ cases:
|
||||
refdot:
|
||||
refr:
|
||||
var: deny
|
||||
eidx: 3
|
||||
field: a
|
||||
eidx: 4
|
||||
key:
|
||||
inexpr:
|
||||
key:
|
||||
number: 0
|
||||
eidx: 5
|
||||
value:
|
||||
string: bar
|
||||
eidx: 6
|
||||
collection:
|
||||
array:
|
||||
- string: bar1
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 10
|
||||
sidx: 0
|
||||
- note: old-syntax
|
||||
rego: |
|
||||
package test
|
||||
import future.keywords.if
|
||||
|
||||
|
||||
# The following are not sets
|
||||
x1 if true
|
||||
x2 { true }
|
||||
@@ -48,31 +61,41 @@ cases:
|
||||
# The following are not sets
|
||||
z.a if { true }
|
||||
z["b"] if { true }
|
||||
|
||||
num_expressions: 21
|
||||
num_statements: 6
|
||||
num_queries: 6
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x1
|
||||
eidx: 4
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 5
|
||||
sidx: 0
|
||||
- spec:
|
||||
head:
|
||||
compr:
|
||||
refr:
|
||||
var: x2
|
||||
eidx: 6
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
|
||||
bool: true
|
||||
eidx: 7
|
||||
sidx: 1
|
||||
|
||||
- spec:
|
||||
head:
|
||||
set:
|
||||
@@ -80,27 +103,37 @@ cases:
|
||||
refdot:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 8
|
||||
field: a
|
||||
eidx: 9
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 2
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
|
||||
bool: true
|
||||
eidx: 10
|
||||
sidx: 2
|
||||
|
||||
- spec:
|
||||
head:
|
||||
set:
|
||||
refr:
|
||||
var: y
|
||||
eidx: 11
|
||||
key:
|
||||
string: b
|
||||
eidx: 12
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 3
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 13
|
||||
sidx: 3
|
||||
|
||||
- spec:
|
||||
head:
|
||||
@@ -109,13 +142,18 @@ cases:
|
||||
refdot:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 14
|
||||
field: a
|
||||
eidx: 15
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 4
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
bool: true
|
||||
eidx: 16
|
||||
sidx: 4
|
||||
|
||||
- spec:
|
||||
head:
|
||||
@@ -124,12 +162,17 @@ cases:
|
||||
refbrack:
|
||||
refr:
|
||||
var: z
|
||||
eidx: 17
|
||||
index:
|
||||
string: b
|
||||
eidx: 18
|
||||
eidx: 19
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 5
|
||||
stmts:
|
||||
- literal:
|
||||
expr:
|
||||
true
|
||||
|
||||
bool: true
|
||||
eidx: 20
|
||||
sidx: 5
|
||||
|
||||
@@ -24,68 +24,97 @@ cases:
|
||||
some a, b in d
|
||||
}
|
||||
}
|
||||
|
||||
num_expressions: 25
|
||||
num_statements: 6
|
||||
num_queries: 2
|
||||
policy:
|
||||
- spec:
|
||||
head: --skip--
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 1
|
||||
stmts:
|
||||
- span: some a in {1}
|
||||
sidx: 0
|
||||
literal:
|
||||
some-decl:
|
||||
value:
|
||||
var: a
|
||||
eidx: 6
|
||||
collection:
|
||||
set:
|
||||
- number: 1
|
||||
eidx: 7
|
||||
eidx: 8
|
||||
- span: "some a\n , b in r"
|
||||
sidx: 1
|
||||
literal:
|
||||
some-decl:
|
||||
key:
|
||||
var: a
|
||||
eidx: 9
|
||||
value:
|
||||
var: b
|
||||
eidx: 10
|
||||
collection:
|
||||
var: r
|
||||
eidx: 11
|
||||
- span: "some 5, x in array"
|
||||
sidx: 2
|
||||
literal:
|
||||
some-decl:
|
||||
key:
|
||||
number: 5
|
||||
eidx: 12
|
||||
value:
|
||||
var: x
|
||||
eidx: 13
|
||||
collection:
|
||||
var: array
|
||||
eidx: 14
|
||||
- span: "some \"hello\", \"world\" in map"
|
||||
sidx: 3
|
||||
literal:
|
||||
some-decl:
|
||||
key:
|
||||
string: hello
|
||||
eidx: 15
|
||||
value:
|
||||
string: world
|
||||
eidx: 16
|
||||
collection:
|
||||
var: map
|
||||
- literal:
|
||||
eidx: 17
|
||||
- sidx: 5
|
||||
literal:
|
||||
some-decl:
|
||||
key:
|
||||
var: p
|
||||
eidx: 18
|
||||
value:
|
||||
var: q
|
||||
eidx: 19
|
||||
collection:
|
||||
setcompr:
|
||||
term:
|
||||
var: r
|
||||
eidx: 20
|
||||
query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
some-decl:
|
||||
key:
|
||||
var: a
|
||||
eidx: 21
|
||||
value:
|
||||
var: b
|
||||
eidx: 22
|
||||
collection:
|
||||
var: d
|
||||
eidx: 23
|
||||
sidx: 4
|
||||
eidx: 24
|
||||
|
||||
|
||||
- note: unimported-in
|
||||
@@ -156,6 +185,9 @@ cases:
|
||||
[1, 2, 3][a] == 3
|
||||
y = a
|
||||
}
|
||||
num_expressions: 24
|
||||
num_statements: 4
|
||||
num_queries: 1
|
||||
policy:
|
||||
- spec:
|
||||
head:
|
||||
@@ -163,10 +195,12 @@ cases:
|
||||
span: b := 5
|
||||
refr:
|
||||
var: b
|
||||
eidx: 4
|
||||
assign:
|
||||
op: :=
|
||||
value:
|
||||
number: 5
|
||||
eidx: 5
|
||||
bodies: []
|
||||
- spec:
|
||||
head:
|
||||
@@ -174,28 +208,38 @@ cases:
|
||||
span: x = y
|
||||
refr:
|
||||
var: x
|
||||
eidx: 6
|
||||
assign:
|
||||
op: =
|
||||
value:
|
||||
var: y
|
||||
eidx: 7
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- literal:
|
||||
some-vars:
|
||||
span: some a
|
||||
vars:
|
||||
- a
|
||||
sidx: 0
|
||||
- literal:
|
||||
expr:
|
||||
inexpr:
|
||||
span: b in {4, 5}
|
||||
value:
|
||||
var: b
|
||||
eidx: 8
|
||||
collection:
|
||||
set:
|
||||
- number: 4
|
||||
eidx: 9
|
||||
- number: 5
|
||||
eidx: 10
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
sidx: 1
|
||||
- literal:
|
||||
expr:
|
||||
boolexpr:
|
||||
@@ -207,12 +251,21 @@ cases:
|
||||
refr:
|
||||
array:
|
||||
- number: 1
|
||||
eidx: 13
|
||||
- number: 2
|
||||
eidx: 14
|
||||
- number: 3
|
||||
eidx: 15
|
||||
eidx: 16
|
||||
index:
|
||||
var: a
|
||||
eidx: 17
|
||||
eidx: 18
|
||||
rhs:
|
||||
number: 3
|
||||
eidx: 19
|
||||
eidx: 20
|
||||
sidx: 2
|
||||
- literal:
|
||||
expr:
|
||||
assignexpr:
|
||||
@@ -220,5 +273,9 @@ cases:
|
||||
op: =
|
||||
lhs:
|
||||
var: y
|
||||
eidx: 21
|
||||
rhs:
|
||||
var: a
|
||||
eidx: 22
|
||||
eidx: 23
|
||||
sidx: 3
|
||||
|
||||
@@ -13,11 +13,15 @@ cases:
|
||||
d,e,
|
||||
f
|
||||
}
|
||||
num_expressions: 3
|
||||
num_statements: 2
|
||||
num_queries: 1
|
||||
policy:
|
||||
- spec:
|
||||
head: --skip--
|
||||
bodies:
|
||||
- query:
|
||||
qidx: 0
|
||||
stmts:
|
||||
- span: some a
|
||||
literal:
|
||||
@@ -25,11 +29,13 @@ cases:
|
||||
span: some a
|
||||
vars:
|
||||
- a
|
||||
sidx: 0
|
||||
- span: "some\n d,e,\n f"
|
||||
literal:
|
||||
some-vars:
|
||||
span: "some\n d,e,\n f"
|
||||
vars: [d, e, f]
|
||||
sidx: 1
|
||||
|
||||
- note: same-line-error
|
||||
rego: |
|
||||
@@ -58,7 +64,7 @@ cases:
|
||||
package test
|
||||
some y
|
||||
error: unexpected keyword `some`
|
||||
|
||||
|
||||
- note: some-in-set
|
||||
rego: |
|
||||
package test
|
||||
|
||||
+126
-28
@@ -101,23 +101,27 @@ fn match_expr_impl(e: &Expr, v: &Value) -> Result<()> {
|
||||
if skip_value(v) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
match e {
|
||||
Expr::String(s) => match_span(&s.0, &v["string"]),
|
||||
Expr::RawString(s) => match_span(&s.0, &v["rawstring"]),
|
||||
Expr::Number(s) => match_span(&s.0, &v["number"]),
|
||||
Expr::True(s) => match_span(s, v),
|
||||
Expr::False(s) => match_span(s, v),
|
||||
Expr::Null(s) => match_span(s, v),
|
||||
Expr::Var(s) => match_span(&s.0, &v["var"]),
|
||||
Expr::Array { span, items } => match_vec(span, items, &v["array"]),
|
||||
Expr::Set { span, items } => match_vec(span, items, &v["set"]),
|
||||
Expr::Object { span, fields } => match_object(span, fields, &v["object"]),
|
||||
Expr::ArrayCompr { span, term, query } => {
|
||||
Expr::String { span: s, .. } => match_span(s, &v["string"]),
|
||||
Expr::RawString { span: s, .. } => match_span(s, &v["rawstring"]),
|
||||
Expr::Number { span: s, .. } => match_span(s, &v["number"]),
|
||||
Expr::Bool { span: s, .. } => match_span(s, &v["bool"]),
|
||||
Expr::Null { span: s, .. } => match_span(s, &v["null"]),
|
||||
Expr::Var { span: s, .. } => match_span(s, &v["var"]),
|
||||
Expr::Array { span, items, .. } => match_vec(span, items, &v["array"]),
|
||||
Expr::Set { span, items, .. } => match_vec(span, items, &v["set"]),
|
||||
Expr::Object { span, fields, .. } => match_object(span, fields, &v["object"]),
|
||||
Expr::ArrayCompr {
|
||||
span, term, query, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["arraycompr"]["span"])?;
|
||||
match_expr(term, &v["arraycompr"]["term"])?;
|
||||
match_query(query, &v["arraycompr"]["query"])
|
||||
}
|
||||
Expr::SetCompr { span, term, query } => {
|
||||
Expr::SetCompr {
|
||||
span, term, query, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["setcompr"]["span"])?;
|
||||
match_expr(term, &v["setcompr"]["term"])?;
|
||||
match_query(query, &v["setcompr"]["query"])
|
||||
@@ -127,28 +131,35 @@ fn match_expr_impl(e: &Expr, v: &Value) -> Result<()> {
|
||||
key,
|
||||
value,
|
||||
query,
|
||||
..
|
||||
} => {
|
||||
match_span_opt(span, &v["objectcompr"]["span"])?;
|
||||
match_expr(key, &v["objectcompr"]["key"])?;
|
||||
match_expr(value, &v["objectcompr"]["value"])?;
|
||||
match_query(query, &v["objectcompr"]["query"])
|
||||
}
|
||||
Expr::Call { span, fcn, params } => {
|
||||
Expr::Call {
|
||||
span, fcn, params, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["call"]["span"])?;
|
||||
match_expr(fcn, &v["call"]["fcn"])?;
|
||||
match_vec(span /*dummy*/, params, &v["call"]["params"])
|
||||
}
|
||||
Expr::RefDot { span, refr, field } => {
|
||||
Expr::RefDot {
|
||||
span, refr, field, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["refdot"]["span"])?;
|
||||
match_expr(refr, &v["refdot"]["refr"])?;
|
||||
match_span(&field.0, &v["refdot"]["field"])
|
||||
}
|
||||
Expr::RefBrack { span, refr, index } => {
|
||||
Expr::RefBrack {
|
||||
span, refr, index, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["refbrack"]["span"])?;
|
||||
match_expr(refr, &v["refbrack"]["refr"])?;
|
||||
match_expr(index, &v["refbrack"]["index"])
|
||||
}
|
||||
Expr::UnaryExpr { span, expr } => {
|
||||
Expr::UnaryExpr { span, expr, .. } => {
|
||||
match_span_opt(span, &v["span"])?;
|
||||
my_assert_eq!(
|
||||
&Value::String("-".into()),
|
||||
@@ -163,25 +174,33 @@ fn match_expr_impl(e: &Expr, v: &Value) -> Result<()> {
|
||||
);
|
||||
match_expr(expr, &v["expr"])
|
||||
}
|
||||
Expr::BinExpr { span, op, lhs, rhs } => {
|
||||
Expr::BinExpr {
|
||||
span, op, lhs, rhs, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["binexpr"]["span"])?;
|
||||
match_bin_op(span, op, &v["binexpr"]["op"])?;
|
||||
match_expr(lhs, &v["binexpr"]["lhs"])?;
|
||||
match_expr(rhs, &v["binexpr"]["rhs"])
|
||||
}
|
||||
Expr::ArithExpr { span, op, lhs, rhs } => {
|
||||
Expr::ArithExpr {
|
||||
span, op, lhs, rhs, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["arithexpr"]["span"])?;
|
||||
match_arith_op(span, op, &v["arithexpr"]["op"])?;
|
||||
match_expr(lhs, &v["arithexpr"]["lhs"])?;
|
||||
match_expr(rhs, &v["arithexpr"]["rhs"])
|
||||
}
|
||||
Expr::BoolExpr { span, op, lhs, rhs } => {
|
||||
Expr::BoolExpr {
|
||||
span, op, lhs, rhs, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["boolexpr"]["span"])?;
|
||||
match_bool_op(span, op, &v["boolexpr"]["op"])?;
|
||||
match_expr(lhs, &v["boolexpr"]["lhs"])?;
|
||||
match_expr(rhs, &v["boolexpr"]["rhs"])
|
||||
}
|
||||
Expr::AssignExpr { span, op, lhs, rhs } => {
|
||||
Expr::AssignExpr {
|
||||
span, op, lhs, rhs, ..
|
||||
} => {
|
||||
match_span_opt(span, &v["assignexpr"]["span"])?;
|
||||
match_assign_op(span, op, &v["assignexpr"]["op"])?;
|
||||
match_expr(lhs, &v["assignexpr"]["lhs"])?;
|
||||
@@ -192,6 +211,7 @@ fn match_expr_impl(e: &Expr, v: &Value) -> Result<()> {
|
||||
key,
|
||||
value,
|
||||
collection,
|
||||
..
|
||||
} => {
|
||||
match_span_opt(span, &v["inexpr"]["span"])?;
|
||||
match_expr_opt(span, key, &v["inexpr"]["key"])?;
|
||||
@@ -200,22 +220,45 @@ fn match_expr_impl(e: &Expr, v: &Value) -> Result<()> {
|
||||
}
|
||||
|
||||
#[cfg(feature = "rego-extensions")]
|
||||
Expr::OrExpr { span, lhs, rhs } => {
|
||||
Expr::OrExpr { span, lhs, rhs, .. } => {
|
||||
match_span_opt(span, &v["orexpr"]["span"])?;
|
||||
match_expr(lhs, &v["orexpr"]["lhs"])?;
|
||||
match_expr(rhs, &v["orexpr"]["rhs"])
|
||||
}
|
||||
}?;
|
||||
|
||||
match (e.eidx(), &v["eidx"]) {
|
||||
(eidx, Value::Number(n)) if n.as_u64() == Some(eidx as u64) => Ok(()),
|
||||
_ => {
|
||||
bail!(
|
||||
"{}",
|
||||
e.span().message(
|
||||
"mismatch-error",
|
||||
format!(
|
||||
"eidx mismatch: expected {:?}, got {:?}",
|
||||
v["eidx"],
|
||||
e.eidx(),
|
||||
)
|
||||
.as_str()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::let_and_return)]
|
||||
fn match_expr(expr: &Expr, v: &Value) -> Result<()> {
|
||||
match match_expr_impl(expr, v) {
|
||||
Ok(()) => Ok(()),
|
||||
Err(e) => bail!(
|
||||
"{e}\nexpr = {expr:#?}\nv={}\n-----------------------\n",
|
||||
serde_json::to_string_pretty(v)?
|
||||
),
|
||||
}
|
||||
let r = match_expr_impl(expr, v);
|
||||
|
||||
// Uncomment the following lines to print mismatch at each expression
|
||||
// nesting level.
|
||||
// if let Err(e) = &r {
|
||||
// bail!(
|
||||
// "{e}\nexpr = {expr:#?}\nv={}\n-----------------------\n",
|
||||
// serde_json::to_string_pretty(v)?
|
||||
// );
|
||||
// }
|
||||
r
|
||||
}
|
||||
|
||||
fn match_with_mod(m: &WithModifier, v: &Value) -> Result<()> {
|
||||
@@ -231,6 +274,20 @@ fn match_literal_stmt(ls: &LiteralStmt, v: &Value) -> Result<()> {
|
||||
if skip_value(v) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
match &v["sidx"] {
|
||||
Value::Number(n) if n.as_u64() == Some(ls.sidx as u64) => (),
|
||||
_ => {
|
||||
bail!(
|
||||
"{}",
|
||||
ls.span.message(
|
||||
"mismatch-error",
|
||||
format!("sidx mismatch: expected {:?}, got {:?}", v["sidx"], ls.sidx).as_str()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
match_span_opt(&ls.span, &v["span"])?;
|
||||
match_literal(&ls.literal, &v["literal"])?;
|
||||
|
||||
@@ -273,6 +330,19 @@ fn match_literal_stmt(ls: &LiteralStmt, v: &Value) -> Result<()> {
|
||||
}
|
||||
|
||||
fn match_query(q: &Query, v: &Value) -> Result<()> {
|
||||
match &v["qidx"] {
|
||||
Value::Number(n) if n.as_u64() == Some(q.qidx as u64) => (),
|
||||
_ => {
|
||||
bail!(
|
||||
"{}",
|
||||
q.span.message(
|
||||
"mismatch-error",
|
||||
format!("qidx mismatch: expected {:?}, got {:?}", v["qidx"], q.qidx).as_str()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
match_span_opt(&q.span, &v["span"])?;
|
||||
let stmts = &v["stmts"].as_array();
|
||||
let stmts = match &stmts {
|
||||
@@ -622,6 +692,15 @@ struct TestCase {
|
||||
imports: Option<Vec<Value>>,
|
||||
policy: Option<Vec<Value>>,
|
||||
error: Option<String>,
|
||||
|
||||
#[serde(default)]
|
||||
num_expressions: u32,
|
||||
|
||||
#[serde(default)]
|
||||
num_statements: u32,
|
||||
|
||||
#[serde(default)]
|
||||
num_queries: u32,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, PartialEq, Debug)]
|
||||
@@ -644,6 +723,25 @@ fn yaml_test_impl(file: &str) -> Result<()> {
|
||||
if let Some(e) = &case.error {
|
||||
bail!("error `{}` not raised by parser.", e);
|
||||
}
|
||||
|
||||
my_assert_eq!(
|
||||
module.num_expressions,
|
||||
case.num_expressions,
|
||||
"mismatch in num_expressions"
|
||||
);
|
||||
|
||||
my_assert_eq!(
|
||||
module.num_statements,
|
||||
case.num_statements,
|
||||
"mismatch in num_statements"
|
||||
);
|
||||
|
||||
my_assert_eq!(
|
||||
module.num_queries,
|
||||
case.num_queries,
|
||||
"mismatch in num_queries"
|
||||
);
|
||||
|
||||
if let Some(p) = &case.package {
|
||||
match_package(&module.package, p)?;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user