Skip to content

Instantly share code, notes, and snippets.

@anderseknert
Created December 5, 2024 11:10
Show Gist options
  • Save anderseknert/baa7323a0a944d43250ede0d8af0629c to your computer and use it in GitHub Desktop.
Save anderseknert/baa7323a0a944d43250ede0d8af0629c to your computer and use it in GitHub Desktop.
Cost of custom function calls / caching
{
"package": {
"location": "1:1:1:8",
"path": [
{
"type": "var",
"value": "data"
},
{
"location": "1:9:1:14",
"type": "string",
"value": "regal"
},
{
"location": "1:15:1:18",
"type": "string",
"value": "ast"
}
],
"annotations": [
{
"location": "55:1:58:85",
"scope": "rule",
"description": "find vars like input[x].foo[y] where x and y are vars\nnote: value.type == \"ref\" check must have been done before calling this function\n"
},
{
"location": "81:1:84:64",
"scope": "rule",
"description": "traverses all nodes in provided terms (using `walk`), and returns an array with\nall variables declared in terms, i,e [x, y] or {x: y}, etc.\n"
},
{
"location": "91:1:94:70",
"scope": "rule",
"description": "traverses all nodes in provided terms (using `walk`), and returns true if any variable\nis found in terms, with early exit (as opposed to find_term_vars)\n"
},
{
"scope": "rule",
"description": "traverses all nodes under provided node (using `walk`), and returns an array with\nall variables declared via assignment (:=), `some`, `every` and in comprehensions\nDEPRECATED: uses ast.found.vars instead\n",
"location": "165:1:169:44"
},
{
"location": "182:1:192:10",
"scope": "rule",
"description": "object containing all variables found in the input AST, keyed first by the index of\nthe rule where the variables were found (as a numeric string), and then the context\nof the variable, which will be one of:\n- term\n- assign\n- every\n- some\n- somein\n- ref\n"
},
{
"location": "205:1:206:41",
"scope": "rule",
"description": "all refs foundd in module"
},
{
"description": "all symbols foundd in module",
"location": "218:1:219:44",
"scope": "rule"
},
{
"location": "229:1:230:50",
"scope": "rule",
"description": "all comprehensions found in module"
},
{
"location": "242:1:247:28",
"scope": "rule",
"description": "finds all vars declared in `rule` *before* the `location` provided\nnote: this isn't 100% accurate, as it doesn't take into account `=`\nassignments / unification, but it's likely good enough since other rules\nrecommend against those\n"
},
{
"location": "292:1:293:77",
"scope": "rule",
"description": "find *only* names in the local scope, and not e.g. rule names"
},
{
"location": "306:1:309:82",
"scope": "rule",
"description": "similar to `find_vars_in_local_scope`, but returns all variable names in scope\nof the given location *and* the rule names present in the scope (i.e. module)\n"
},
{
"location": "317:1:320:39",
"scope": "rule",
"description": "find all variables declared via `some` declarations (and *not* `some .. in`)\nin the scope of the given location\n"
},
{
"location": "326:1:327:41",
"scope": "rule",
"description": "all expressions in module"
}
]
},
"imports": [
{
"location": "3:1:3:7",
"path": {
"type": "ref",
"value": [
{
"type": "var",
"value": "rego",
"location": "3:8:3:12"
},
{
"location": "3:13:3:15",
"type": "string",
"value": "v1"
}
],
"location": "3:8:3:15"
}
},
{
"location": "5:1:5:7",
"path": {
"location": "5:8:5:23",
"type": "ref",
"value": [
{
"location": "5:8:5:12",
"type": "var",
"value": "data"
},
{
"location": "5:13:5:18",
"type": "string",
"value": "regal"
},
{
"location": "5:19:5:23",
"type": "string",
"value": "util"
}
]
}
}
],
"rules": [
{
"location": "7:1:11:2",
"head": {
"args": [
{
"location": "7:19:7:22",
"type": "var",
"value": "obj"
}
],
"assign": true,
"value": {
"location": "7:27:11:2",
"type": "arraycomprehension",
"value": {
"term": {
"type": "var",
"value": "value",
"location": "7:28:7:33"
},
"body": [
{
"location": "8:2:8:23",
"terms": [
{
"location": "8:2:8:6",
"type": "ref",
"value": [
{
"location": "8:2:8:6",
"type": "var",
"value": "walk"
}
]
},
{
"location": "8:7:8:10",
"type": "var",
"value": "obj"
},
{
"value": [
{
"location": "8:13:8:14",
"type": "var",
"value": "$0"
},
{
"location": "8:16:8:21",
"type": "var",
"value": "value"
}
],
"location": "8:12:8:22",
"type": "array"
}
]
},
{
"location": "9:2:9:21",
"terms": [
{
"location": "9:13:9:15",
"type": "ref",
"value": [
{
"location": "9:13:9:15",
"type": "var",
"value": "equal"
}
]
},
{
"value": [
{
"location": "9:2:9:7",
"type": "var",
"value": "value"
},
{
"location": "9:8:9:12",
"type": "string",
"value": "type"
}
],
"location": "9:2:9:12",
"type": "ref"
},
{
"location": "9:16:9:21",
"type": "string",
"value": "var"
}
]
},
{
"location": "10:2:10:33",
"terms": [
{
"value": [
{
"location": "10:28:10:30",
"type": "var",
"value": "equal"
}
],
"location": "10:28:10:30",
"type": "ref"
},
{
"location": "10:2:10:27",
"type": "call",
"value": [
{
"location": "10:2:10:9",
"type": "ref",
"value": [
{
"location": "10:2:10:9",
"type": "var",
"value": "indexof"
}
]
},
{
"value": [
{
"location": "10:10:10:15",
"type": "var",
"value": "value"
},
{
"location": "10:16:10:21",
"type": "string",
"value": "value"
}
],
"location": "10:10:10:21",
"type": "ref"
},
{
"location": "10:23:10:26",
"type": "string",
"value": "$"
}
]
},
{
"value": -1,
"location": "10:31:10:32",
"type": "number"
}
]
}
]
}
},
"location": "7:1:11:2",
"ref": [
{
"type": "var",
"value": "_find_nested_vars",
"location": "7:1:7:18"
}
]
}
},
{
"location": "16:1:19:2",
"head": {
"location": "16:1:16:32",
"ref": [
{
"location": "16:1:16:18",
"type": "var",
"value": "_find_assign_vars"
}
],
"args": [
{
"location": "16:19:16:24",
"type": "var",
"value": "value"
}
],
"assign": true,
"value": {
"location": "16:29:16:32",
"type": "var",
"value": "var"
}
},
"body": [
{
"location": "17:2:17:24",
"terms": [
{
"location": "17:16:17:18",
"type": "ref",
"value": [
{
"location": "17:16:17:18",
"type": "var",
"value": "equal"
}
]
},
{
"location": "17:2:17:15",
"type": "ref",
"value": [
{
"location": "17:2:17:7",
"type": "var",
"value": "value"
},
{
"location": "17:8:17:9",
"type": "number",
"value": 1
},
{
"location": "17:11:17:15",
"type": "string",
"value": "type"
}
]
},
{
"type": "string",
"value": "var",
"location": "17:19:17:24"
}
]
},
{
"location": "18:2:18:19",
"terms": [
{
"location": "18:6:18:8",
"type": "ref",
"value": [
{
"location": "18:6:18:8",
"type": "var",
"value": "assign"
}
]
},
{
"type": "var",
"value": "var",
"location": "18:2:18:5"
},
{
"location": "18:9:18:19",
"type": "array",
"value": [
{
"location": "18:10:18:18",
"type": "ref",
"value": [
{
"location": "18:10:18:15",
"type": "var",
"value": "value"
},
{
"location": "18:16:18:17",
"type": "number",
"value": 1
}
]
}
]
}
]
}
]
},
{
"location": "25:1:28:2",
"head": {
"ref": [
{
"location": "25:1:25:18",
"type": "var",
"value": "_find_assign_vars"
}
],
"args": [
{
"value": "value",
"location": "25:19:25:24",
"type": "var"
}
],
"assign": true,
"value": {
"location": "25:29:25:33",
"type": "var",
"value": "vars"
},
"location": "25:1:25:33"
},
"body": [
{
"terms": [
{
"type": "ref",
"value": [
{
"location": "26:16:26:18",
"type": "var",
"value": "internal"
},
{
"location": "26:16:26:18",
"type": "string",
"value": "member_2"
}
],
"location": "26:16:26:18"
},
{
"location": "26:2:26:15",
"type": "ref",
"value": [
{
"location": "26:2:26:7",
"type": "var",
"value": "value"
},
{
"value": 1,
"location": "26:8:26:9",
"type": "number"
},
{
"location": "26:11:26:15",
"type": "string",
"value": "type"
}
]
},
{
"location": "26:19:26:38",
"type": "set",
"value": [
{
"type": "string",
"value": "array",
"location": "26:20:26:27"
},
{
"type": "string",
"value": "object",
"location": "26:29:26:37"
}
]
}
],
"location": "26:2:26:38"
},
{
"location": "27:2:27:37",
"terms": [
{
"type": "ref",
"value": [
{
"location": "27:7:27:9",
"type": "var",
"value": "assign"
}
],
"location": "27:7:27:9"
},
{
"location": "27:2:27:6",
"type": "var",
"value": "vars"
},
{
"value": [
{
"location": "27:10:27:27",
"type": "ref",
"value": [
{
"location": "27:10:27:27",
"type": "var",
"value": "_find_nested_vars"
}
]
},
{
"location": "27:28:27:36",
"type": "ref",
"value": [
{
"location": "27:28:27:33",
"type": "var",
"value": "value"
},
{
"location": "27:34:27:35",
"type": "number",
"value": 1
}
]
}
],
"location": "27:10:27:37",
"type": "call"
}
]
}
]
},
{
"location": "31:1:34:2",
"head": {
"ref": [
{
"location": "31:1:31:21",
"type": "var",
"value": "_find_some_decl_vars"
}
],
"args": [
{
"location": "31:22:31:27",
"type": "var",
"value": "value"
}
],
"assign": true,
"value": {
"location": "31:32:34:2",
"type": "arraycomprehension",
"value": {
"body": [
{
"location": "32:2:32:17",
"terms": {
"location": "32:2:32:6",
"symbols": [
{
"type": "call",
"value": [
{
"location": "32:9:32:11",
"type": "ref",
"value": [
{
"location": "32:9:32:11",
"type": "var",
"value": "internal"
},
{
"location": "32:9:32:11",
"type": "string",
"value": "member_2"
}
]
},
{
"location": "32:7:32:8",
"type": "var",
"value": "v"
},
{
"location": "32:12:32:17",
"type": "var",
"value": "value"
}
],
"location": "32:7:32:17"
}
]
}
},
{
"location": "33:2:33:17",
"terms": [
{
"location": "33:9:33:11",
"type": "ref",
"value": [
{
"location": "33:9:33:11",
"type": "var",
"value": "equal"
}
]
},
{
"location": "33:2:33:8",
"type": "ref",
"value": [
{
"location": "33:2:33:3",
"type": "var",
"value": "v"
},
{
"location": "33:4:33:8",
"type": "string",
"value": "type"
}
]
},
{
"value": "var",
"location": "33:12:33:17",
"type": "string"
}
]
}
],
"term": {
"location": "31:33:31:34",
"type": "var",
"value": "v"
}
}
},
"location": "31:1:34:2"
}
},
{
"location": "37:1:42:2",
"head": {
"ref": [
{
"location": "37:1:37:24",
"type": "var",
"value": "_find_some_in_decl_vars"
}
],
"args": [
{
"location": "37:25:37:30",
"type": "var",
"value": "value"
}
],
"assign": true,
"value": {
"value": "vars",
"location": "37:35:37:39",
"type": "var"
},
"location": "37:1:37:39"
},
"body": [
{
"terms": [
{
"location": "38:6:38:8",
"type": "ref",
"value": [
{
"location": "38:6:38:8",
"type": "var",
"value": "assign"
}
]
},
{
"location": "38:2:38:5",
"type": "var",
"value": "arr"
},
{
"location": "38:9:38:23",
"type": "ref",
"value": [
{
"value": "value",
"location": "38:9:38:14",
"type": "var"
},
{
"location": "38:15:38:16",
"type": "number",
"value": 0
},
{
"location": "38:18:38:23",
"type": "string",
"value": "value"
}
]
}
],
"location": "38:2:38:23"
},
{
"terms": [
{
"location": "39:13:39:15",
"type": "ref",
"value": [
{
"location": "39:13:39:15",
"type": "var",
"value": "equal"
}
]
},
{
"location": "39:2:39:12",
"type": "call",
"value": [
{
"location": "39:2:39:7",
"type": "ref",
"value": [
{
"location": "39:2:39:7",
"type": "var",
"value": "count"
}
]
},
{
"location": "39:8:39:11",
"type": "var",
"value": "arr"
}
]
},
{
"location": "39:16:39:17",
"type": "number",
"value": 3
}
],
"location": "39:2:39:17"
},
{
"location": "41:2:41:35",
"terms": [
{
"location": "41:7:41:9",
"type": "ref",
"value": [
{
"location": "41:7:41:9",
"type": "var",
"value": "assign"
}
]
},
{
"location": "41:2:41:6",
"type": "var",
"value": "vars"
},
{
"location": "41:10:41:35",
"type": "call",
"value": [
{
"location": "41:10:41:27",
"type": "ref",
"value": [
{
"location": "41:10:41:27",
"type": "var",
"value": "_find_nested_vars"
}
]
},
{
"type": "ref",
"value": [
{
"location": "41:28:41:31",
"type": "var",
"value": "arr"
},
{
"location": "41:32:41:33",
"type": "number",
"value": 1
}
],
"location": "41:28:41:34"
}
]
}
]
}
]
},
{
"head": {
"args": [
{
"location": "45:25:45:30",
"type": "var",
"value": "value"
}
],
"assign": true,
"value": {
"location": "45:35:45:39",
"type": "var",
"value": "vars"
},
"location": "45:1:45:39",
"ref": [
{
"value": "_find_some_in_decl_vars",
"location": "45:1:45:24",
"type": "var"
}
]
},
"body": [
{
"location": "46:2:46:23",
"terms": [
{
"location": "46:6:46:8",
"type": "ref",
"value": [
{
"location": "46:6:46:8",
"type": "var",
"value": "assign"
}
]
},
{
"location": "46:2:46:5",
"type": "var",
"value": "arr"
},
{
"type": "ref",
"value": [
{
"location": "46:9:46:14",
"type": "var",
"value": "value"
},
{
"location": "46:15:46:16",
"type": "number",
"value": 0
},
{
"type": "string",
"value": "value",
"location": "46:18:46:23"
}
],
"location": "46:9:46:23"
}
]
},
{
"location": "47:2:47:17",
"terms": [
{
"location": "47:13:47:15",
"type": "ref",
"value": [
{
"location": "47:13:47:15",
"type": "var",
"value": "equal"
}
]
},
{
"value": [
{
"location": "47:2:47:7",
"type": "ref",
"value": [
{
"location": "47:2:47:7",
"type": "var",
"value": "count"
}
]
},
{
"location": "47:8:47:11",
"type": "var",
"value": "arr"
}
],
"location": "47:2:47:12",
"type": "call"
},
{
"type": "number",
"value": 4,
"location": "47:16:47:17"
}
]
},
{
"location": "49:2:52:3",
"terms": [
{
"location": "49:7:49:9",
"type": "ref",
"value": [
{
"location": "49:7:49:9",
"type": "var",
"value": "assign"
}
]
},
{
"location": "49:2:49:6",
"type": "var",
"value": "vars"
},
{
"type": "arraycomprehension",
"value": {
"term": {
"location": "49:11:49:12",
"type": "var",
"value": "v"
},
"body": [
{
"location": "50:3:50:19",
"terms": {
"location": "50:3:50:7",
"symbols": [
{
"location": "50:8:50:19",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "50:10:50:12",
"type": "var",
"value": "internal"
},
{
"location": "50:10:50:12",
"type": "string",
"value": "member_2"
}
],
"location": "50:10:50:12"
},
{
"value": "i",
"location": "50:8:50:9",
"type": "var"
},
{
"value": [
{
"location": "50:14:50:15",
"type": "number",
"value": 1
},
{
"type": "number",
"value": 2,
"location": "50:17:50:18"
}
],
"location": "50:13:50:19",
"type": "array"
}
]
}
]
}
},
{
"location": "51:3:51:38",
"terms": {
"location": "51:3:51:7",
"symbols": [
{
"location": "51:8:51:38",
"type": "call",
"value": [
{
"location": "51:10:51:12",
"type": "ref",
"value": [
{
"type": "var",
"value": "internal",
"location": "51:10:51:12"
},
{
"value": "member_2",
"location": "51:10:51:12",
"type": "string"
}
]
},
{
"location": "51:8:51:9",
"type": "var",
"value": "v"
},
{
"type": "call",
"value": [
{
"location": "51:13:51:30",
"type": "ref",
"value": [
{
"location": "51:13:51:30",
"type": "var",
"value": "_find_nested_vars"
}
]
},
{
"location": "51:31:51:37",
"type": "ref",
"value": [
{
"location": "51:31:51:34",
"type": "var",
"value": "arr"
},
{
"location": "51:35:51:36",
"type": "var",
"value": "i"
}
]
}
],
"location": "51:13:51:38"
}
]
}
]
}
}
]
},
"location": "49:10:52:3"
}
]
}
],
"location": "45:1:53:2"
},
{
"location": "59:1:64:2",
"annotations": [
{
"location": "55:1:58:85",
"scope": "rule",
"description": "find vars like input[x].foo[y] where x and y are vars\nnote: value.type == \"ref\" check must have been done before calling this function\n"
}
],
"head": {
"ref": [
{
"location": "59:1:59:14",
"type": "var",
"value": "find_ref_vars"
}
],
"args": [
{
"location": "59:15:59:20",
"type": "var",
"value": "value"
}
],
"assign": true,
"value": {
"location": "59:25:64:2",
"type": "arraycomprehension",
"value": {
"term": {
"location": "59:26:59:29",
"type": "var",
"value": "var"
},
"body": [
{
"location": "60:2:60:28",
"terms": {
"symbols": [
{
"location": "60:7:60:28",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "60:14:60:16",
"type": "var",
"value": "internal"
},
{
"location": "60:14:60:16",
"type": "string",
"value": "member_3"
}
],
"location": "60:14:60:16"
},
{
"location": "60:7:60:8",
"type": "var",
"value": "i"
},
{
"type": "var",
"value": "var",
"location": "60:10:60:13"
},
{
"value": [
{
"type": "var",
"value": "value",
"location": "60:17:60:22"
},
{
"type": "string",
"value": "value",
"location": "60:23:60:28"
}
],
"location": "60:17:60:28",
"type": "ref"
}
]
}
],
"location": "60:2:60:6"
}
},
{
"location": "62:2:62:7",
"terms": [
{
"type": "ref",
"value": [
{
"value": "gt",
"location": "62:4:62:5",
"type": "var"
}
],
"location": "62:4:62:5"
},
{
"location": "62:2:62:3",
"type": "var",
"value": "i"
},
{
"location": "62:6:62:7",
"type": "number",
"value": 0
}
]
},
{
"terms": [
{
"location": "63:11:63:13",
"type": "ref",
"value": [
{
"type": "var",
"value": "equal",
"location": "63:11:63:13"
}
]
},
{
"value": [
{
"location": "63:2:63:5",
"type": "var",
"value": "var"
},
{
"location": "63:6:63:10",
"type": "string",
"value": "type"
}
],
"location": "63:2:63:10",
"type": "ref"
},
{
"location": "63:14:63:19",
"type": "string",
"value": "var"
}
],
"location": "63:2:63:19"
}
]
}
},
"location": "59:1:64:2"
}
},
{
"body": [
{
"location": "69:2:72:3",
"terms": [
{
"value": [
{
"location": "69:10:69:12",
"type": "var",
"value": "assign"
}
],
"location": "69:10:69:12",
"type": "ref"
},
{
"type": "var",
"value": "key_var",
"location": "69:2:69:9"
},
{
"location": "69:13:72:3",
"type": "arraycomprehension",
"value": {
"body": [
{
"location": "70:3:70:26",
"terms": [
{
"location": "70:18:70:20",
"type": "ref",
"value": [
{
"location": "70:18:70:20",
"type": "var",
"value": "equal"
}
]
},
{
"value": [
{
"type": "var",
"value": "value",
"location": "70:3:70:8"
},
{
"location": "70:9:70:12",
"type": "string",
"value": "key"
},
{
"location": "70:13:70:17",
"type": "string",
"value": "type"
}
],
"location": "70:3:70:17",
"type": "ref"
},
{
"value": "var",
"location": "70:21:70:26",
"type": "string"
}
]
},
{
"location": "71:3:71:38",
"terms": [
{
"location": "71:33:71:35",
"type": "ref",
"value": [
{
"value": "equal",
"location": "71:33:71:35",
"type": "var"
}
]
},
{
"location": "71:3:71:32",
"type": "call",
"value": [
{
"location": "71:3:71:10",
"type": "ref",
"value": [
{
"location": "71:3:71:10",
"type": "var",
"value": "indexof"
}
]
},
{
"location": "71:11:71:26",
"type": "ref",
"value": [
{
"value": "value",
"location": "71:11:71:16",
"type": "var"
},
{
"location": "71:17:71:20",
"type": "string",
"value": "key"
},
{
"location": "71:21:71:26",
"type": "string",
"value": "value"
}
]
},
{
"value": "$",
"location": "71:28:71:31",
"type": "string"
}
]
},
{
"location": "71:36:71:37",
"type": "number",
"value": -1
}
]
}
],
"term": {
"location": "69:14:69:23",
"type": "ref",
"value": [
{
"location": "69:14:69:19",
"type": "var",
"value": "value"
},
{
"location": "69:20:69:23",
"type": "string",
"value": "key"
}
]
}
}
}
]
},
{
"location": "73:2:76:3",
"terms": [
{
"location": "73:10:73:12",
"type": "ref",
"value": [
{
"location": "73:10:73:12",
"type": "var",
"value": "assign"
}
]
},
{
"location": "73:2:73:9",
"type": "var",
"value": "val_var"
},
{
"value": {
"term": {
"location": "73:14:73:25",
"type": "ref",
"value": [
{
"type": "var",
"value": "value",
"location": "73:14:73:19"
},
{
"location": "73:20:73:25",
"type": "string",
"value": "value"
}
]
},
"body": [
{
"location": "74:3:74:28",
"terms": [
{
"location": "74:20:74:22",
"type": "ref",
"value": [
{
"location": "74:20:74:22",
"type": "var",
"value": "equal"
}
]
},
{
"type": "ref",
"value": [
{
"location": "74:3:74:8",
"type": "var",
"value": "value"
},
{
"location": "74:9:74:14",
"type": "string",
"value": "value"
},
{
"location": "74:15:74:19",
"type": "string",
"value": "type"
}
],
"location": "74:3:74:19"
},
{
"location": "74:23:74:28",
"type": "string",
"value": "var"
}
]
},
{
"location": "75:3:75:40",
"terms": [
{
"location": "75:35:75:37",
"type": "ref",
"value": [
{
"location": "75:35:75:37",
"type": "var",
"value": "equal"
}
]
},
{
"location": "75:3:75:34",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "75:3:75:10",
"type": "var",
"value": "indexof"
}
],
"location": "75:3:75:10"
},
{
"location": "75:11:75:28",
"type": "ref",
"value": [
{
"location": "75:11:75:16",
"type": "var",
"value": "value"
},
{
"location": "75:17:75:22",
"type": "string",
"value": "value"
},
{
"location": "75:23:75:28",
"type": "string",
"value": "value"
}
]
},
{
"location": "75:30:75:33",
"type": "string",
"value": "$"
}
]
},
{
"location": "75:38:75:39",
"type": "number",
"value": -1
}
]
}
]
},
"location": "73:13:76:3",
"type": "arraycomprehension"
}
]
},
{
"location": "78:2:78:40",
"terms": [
{
"type": "ref",
"value": [
{
"value": "assign",
"location": "78:7:78:9",
"type": "var"
}
],
"location": "78:7:78:9"
},
{
"value": "vars",
"location": "78:2:78:6",
"type": "var"
},
{
"location": "78:10:78:40",
"type": "call",
"value": [
{
"location": "78:10:78:22",
"type": "ref",
"value": [
{
"location": "78:10:78:15",
"type": "var",
"value": "array"
},
{
"location": "78:16:78:22",
"type": "string",
"value": "concat"
}
]
},
{
"value": "key_var",
"location": "78:23:78:30",
"type": "var"
},
{
"location": "78:32:78:39",
"type": "var",
"value": "val_var"
}
]
}
]
}
],
"location": "68:1:79:2",
"head": {
"location": "68:1:68:32",
"ref": [
{
"value": "_find_every_vars",
"location": "68:1:68:17",
"type": "var"
}
],
"args": [
{
"location": "68:18:68:23",
"type": "var",
"value": "value"
}
],
"assign": true,
"value": {
"location": "68:28:68:32",
"type": "var",
"value": "vars"
}
}
},
{
"location": "85:1:89:2",
"annotations": [
{
"location": "81:1:84:64",
"scope": "rule",
"description": "traverses all nodes in provided terms (using `walk`), and returns an array with\nall variables declared in terms, i,e [x, y] or {x: y}, etc.\n"
}
],
"head": {
"ref": [
{
"location": "85:1:85:15",
"type": "var",
"value": "find_term_vars"
}
],
"args": [
{
"value": "terms",
"location": "85:16:85:21",
"type": "var"
}
],
"assign": true,
"value": {
"location": "85:26:89:2",
"type": "arraycomprehension",
"value": {
"term": {
"location": "85:27:85:31",
"type": "var",
"value": "term"
},
"body": [
{
"location": "86:2:86:24",
"terms": [
{
"value": [
{
"location": "86:2:86:6",
"type": "var",
"value": "walk"
}
],
"location": "86:2:86:6",
"type": "ref"
},
{
"location": "86:7:86:12",
"type": "var",
"value": "terms"
},
{
"location": "86:14:86:23",
"type": "array",
"value": [
{
"location": "86:15:86:16",
"type": "var",
"value": "$1"
},
{
"type": "var",
"value": "term",
"location": "86:18:86:22"
}
]
}
]
},
{
"location": "88:2:88:20",
"terms": [
{
"location": "88:12:88:14",
"type": "ref",
"value": [
{
"type": "var",
"value": "equal",
"location": "88:12:88:14"
}
]
},
{
"location": "88:2:88:11",
"type": "ref",
"value": [
{
"location": "88:2:88:6",
"type": "var",
"value": "term"
},
{
"value": "type",
"location": "88:7:88:11",
"type": "string"
}
]
},
{
"location": "88:15:88:20",
"type": "string",
"value": "var"
}
]
}
]
}
},
"location": "85:1:89:2"
}
},
{
"head": {
"value": {
"type": "boolean",
"value": true
},
"location": "95:1:95:20",
"ref": [
{
"location": "95:1:95:13",
"type": "var",
"value": "has_term_var"
}
],
"args": [
{
"type": "var",
"value": "terms",
"location": "95:14:95:19"
}
]
},
"body": [
{
"location": "96:2:96:24",
"terms": [
{
"value": [
{
"value": "walk",
"location": "96:2:96:6",
"type": "var"
}
],
"location": "96:2:96:6",
"type": "ref"
},
{
"location": "96:7:96:12",
"type": "var",
"value": "terms"
},
{
"location": "96:14:96:23",
"type": "array",
"value": [
{
"location": "96:15:96:16",
"type": "var",
"value": "$2"
},
{
"location": "96:18:96:22",
"type": "var",
"value": "term"
}
]
}
]
},
{
"location": "98:2:98:20",
"terms": [
{
"location": "98:12:98:14",
"type": "ref",
"value": [
{
"location": "98:12:98:14",
"type": "var",
"value": "equal"
}
]
},
{
"location": "98:2:98:11",
"type": "ref",
"value": [
{
"location": "98:2:98:6",
"type": "var",
"value": "term"
},
{
"location": "98:7:98:11",
"type": "string",
"value": "type"
}
]
},
{
"location": "98:15:98:20",
"type": "string",
"value": "var"
}
]
}
],
"location": "95:1:99:2",
"annotations": [
{
"description": "traverses all nodes in provided terms (using `walk`), and returns true if any variable\nis found in terms, with early exit (as opposed to find_term_vars)\n",
"location": "91:1:94:70",
"scope": "rule"
}
]
},
{
"location": "101:1:112:2",
"head": {
"value": {
"type": "object",
"value": [
[
{
"value": "term",
"location": "101:29:101:35",
"type": "string"
},
{
"location": "101:37:101:87",
"type": "call",
"value": [
{
"location": "101:37:101:51",
"type": "ref",
"value": [
{
"location": "101:37:101:51",
"type": "var",
"value": "find_term_vars"
}
]
},
{
"type": "call",
"value": [
{
"location": "101:52:101:69",
"type": "ref",
"value": [
{
"location": "101:52:101:69",
"type": "var",
"value": "function_ret_args"
}
]
},
{
"location": "101:70:101:77",
"type": "var",
"value": "fn_name"
},
{
"location": "101:79:101:84",
"type": "var",
"value": "value"
}
],
"location": "101:52:101:86"
}
]
}
]
],
"location": "101:28:101:87"
},
"location": "101:1:101:87",
"ref": [
{
"location": "101:1:101:11",
"type": "var",
"value": "_find_vars"
}
],
"args": [
{
"location": "101:12:101:17",
"type": "var",
"value": "value"
},
{
"location": "101:19:101:23",
"type": "var",
"value": "last"
}
],
"assign": true
},
"body": [
{
"terms": [
{
"location": "102:7:102:9",
"type": "ref",
"value": [
{
"location": "102:7:102:9",
"type": "var",
"value": "equal"
}
]
},
{
"type": "var",
"value": "last",
"location": "102:2:102:6"
},
{
"location": "102:10:102:17",
"type": "string",
"value": "terms"
}
],
"location": "102:2:102:17"
},
{
"location": "103:2:103:24",
"terms": [
{
"location": "103:16:103:18",
"type": "ref",
"value": [
{
"location": "103:16:103:18",
"type": "var",
"value": "equal"
}
]
},
{
"location": "103:2:103:15",
"type": "ref",
"value": [
{
"location": "103:2:103:7",
"type": "var",
"value": "value"
},
{
"location": "103:8:103:9",
"type": "number",
"value": 0
},
{
"location": "103:11:103:15",
"type": "string",
"value": "type"
}
]
},
{
"location": "103:19:103:24",
"type": "string",
"value": "ref"
}
]
},
{
"location": "104:2:104:33",
"terms": [
{
"location": "104:25:104:27",
"type": "ref",
"value": [
{
"location": "104:25:104:27",
"type": "var",
"value": "equal"
}
]
},
{
"type": "ref",
"value": [
{
"location": "104:2:104:7",
"type": "var",
"value": "value"
},
{
"location": "104:8:104:9",
"type": "number",
"value": 0
},
{
"location": "104:11:104:16",
"type": "string",
"value": "value"
},
{
"location": "104:17:104:18",
"type": "number",
"value": 0
},
{
"location": "104:20:104:24",
"type": "string",
"value": "type"
}
],
"location": "104:2:104:24"
},
{
"location": "104:28:104:33",
"type": "string",
"value": "var"
}
]
},
{
"location": "105:2:105:37",
"terms": [
{
"location": "105:26:105:28",
"type": "ref",
"value": [
{
"location": "105:26:105:28",
"type": "var",
"value": "neq"
}
]
},
{
"location": "105:2:105:25",
"type": "ref",
"value": [
{
"location": "105:2:105:7",
"type": "var",
"value": "value"
},
{
"location": "105:8:105:9",
"type": "number",
"value": 0
},
{
"location": "105:11:105:16",
"type": "string",
"value": "value"
},
{
"value": 0,
"location": "105:17:105:18",
"type": "number"
},
{
"value": "value",
"location": "105:20:105:25",
"type": "string"
}
]
},
{
"type": "string",
"value": "assign",
"location": "105:29:105:37"
}
]
},
{
"location": "107:2:107:42",
"terms": [
{
"location": "107:10:107:12",
"type": "ref",
"value": [
{
"location": "107:10:107:12",
"type": "var",
"value": "assign"
}
]
},
{
"location": "107:2:107:9",
"type": "var",
"value": "fn_name"
},
{
"location": "107:13:107:42",
"type": "call",
"value": [
{
"location": "107:13:107:26",
"type": "ref",
"value": [
{
"value": "ref_to_string",
"location": "107:13:107:26",
"type": "var"
}
]
},
{
"value": [
{
"location": "107:27:107:32",
"type": "var",
"value": "value"
},
{
"location": "107:33:107:34",
"type": "number",
"value": 0
},
{
"location": "107:36:107:41",
"type": "string",
"value": "value"
}
],
"location": "107:27:107:41",
"type": "ref"
}
]
}
]
},
{
"location": "109:2:109:28",
"negated": true,
"terms": [
{
"location": "109:6:109:14",
"type": "ref",
"value": [
{
"type": "var",
"value": "contains",
"location": "109:6:109:14"
}
]
},
{
"value": "fn_name",
"location": "109:15:109:22",
"type": "var"
},
{
"location": "109:24:109:27",
"type": "string",
"value": "$"
}
]
},
{
"location": "110:2:110:31",
"terms": [
{
"location": "110:10:110:12",
"type": "ref",
"value": [
{
"location": "110:10:110:12",
"type": "var",
"value": "internal"
},
{
"location": "110:10:110:12",
"type": "string",
"value": "member_2"
}
]
},
{
"location": "110:2:110:9",
"type": "var",
"value": "fn_name"
},
{
"location": "110:13:110:31",
"type": "var",
"value": "all_function_names"
}
]
},
{
"location": "111:2:111:38",
"terms": [
{
"location": "111:2:111:22",
"type": "ref",
"value": [
{
"location": "111:2:111:22",
"type": "var",
"value": "function_ret_in_args"
}
]
},
{
"location": "111:23:111:30",
"type": "var",
"value": "fn_name"
},
{
"location": "111:32:111:37",
"type": "var",
"value": "value"
}
]
}
]
},
{
"location": "114:1:119:2",
"head": {
"assign": true,
"value": {
"location": "114:28:114:64",
"type": "object",
"value": [
[
{
"value": "assign",
"location": "114:29:114:37",
"type": "string"
},
{
"location": "114:39:114:64",
"type": "call",
"value": [
{
"location": "114:39:114:56",
"type": "ref",
"value": [
{
"location": "114:39:114:56",
"type": "var",
"value": "_find_assign_vars"
}
]
},
{
"location": "114:57:114:62",
"type": "var",
"value": "value"
}
]
}
]
]
},
"location": "114:1:114:64",
"ref": [
{
"location": "114:1:114:11",
"type": "var",
"value": "_find_vars"
}
],
"args": [
{
"value": "value",
"location": "114:12:114:17",
"type": "var"
},
{
"location": "114:19:114:23",
"type": "var",
"value": "last"
}
]
},
"body": [
{
"location": "115:2:115:17",
"terms": [
{
"location": "115:7:115:9",
"type": "ref",
"value": [
{
"location": "115:7:115:9",
"type": "var",
"value": "equal"
}
]
},
{
"location": "115:2:115:6",
"type": "var",
"value": "last"
},
{
"value": "terms",
"location": "115:10:115:17",
"type": "string"
}
]
},
{
"location": "116:2:116:24",
"terms": [
{
"location": "116:16:116:18",
"type": "ref",
"value": [
{
"location": "116:16:116:18",
"type": "var",
"value": "equal"
}
]
},
{
"location": "116:2:116:15",
"type": "ref",
"value": [
{
"value": "value",
"location": "116:2:116:7",
"type": "var"
},
{
"location": "116:8:116:9",
"type": "number",
"value": 0
},
{
"location": "116:11:116:15",
"type": "string",
"value": "type"
}
]
},
{
"location": "116:19:116:24",
"type": "string",
"value": "ref"
}
]
},
{
"location": "117:2:117:33",
"terms": [
{
"location": "117:25:117:27",
"type": "ref",
"value": [
{
"location": "117:25:117:27",
"type": "var",
"value": "equal"
}
]
},
{
"type": "ref",
"value": [
{
"value": "value",
"location": "117:2:117:7",
"type": "var"
},
{
"location": "117:8:117:9",
"type": "number",
"value": 0
},
{
"location": "117:11:117:16",
"type": "string",
"value": "value"
},
{
"location": "117:17:117:18",
"type": "number",
"value": 0
},
{
"location": "117:20:117:24",
"type": "string",
"value": "type"
}
],
"location": "117:2:117:24"
},
{
"location": "117:28:117:33",
"type": "string",
"value": "var"
}
]
},
{
"location": "118:2:118:37",
"terms": [
{
"type": "ref",
"value": [
{
"location": "118:26:118:28",
"type": "var",
"value": "equal"
}
],
"location": "118:26:118:28"
},
{
"location": "118:2:118:25",
"type": "ref",
"value": [
{
"location": "118:2:118:7",
"type": "var",
"value": "value"
},
{
"location": "118:8:118:9",
"type": "number",
"value": 0
},
{
"location": "118:11:118:16",
"type": "string",
"value": "value"
},
{
"location": "118:17:118:18",
"type": "number",
"value": 0
},
{
"location": "118:20:118:25",
"type": "string",
"value": "value"
}
]
},
{
"location": "118:29:118:37",
"type": "string",
"value": "assign"
}
]
}
]
},
{
"location": "125:1:130:2",
"head": {
"value": {
"location": "125:28:125:64",
"type": "object",
"value": [
[
{
"location": "125:29:125:37",
"type": "string",
"value": "assign"
},
{
"location": "125:39:125:64",
"type": "call",
"value": [
{
"location": "125:39:125:56",
"type": "ref",
"value": [
{
"location": "125:39:125:56",
"type": "var",
"value": "_find_assign_vars"
}
]
},
{
"location": "125:57:125:62",
"type": "var",
"value": "value"
}
]
}
]
]
},
"location": "125:1:125:64",
"ref": [
{
"type": "var",
"value": "_find_vars",
"location": "125:1:125:11"
}
],
"args": [
{
"location": "125:12:125:17",
"type": "var",
"value": "value"
},
{
"location": "125:19:125:23",
"type": "var",
"value": "last"
}
],
"assign": true
},
"body": [
{
"location": "126:2:126:17",
"terms": [
{
"location": "126:7:126:9",
"type": "ref",
"value": [
{
"value": "equal",
"location": "126:7:126:9",
"type": "var"
}
]
},
{
"location": "126:2:126:6",
"type": "var",
"value": "last"
},
{
"location": "126:10:126:17",
"type": "string",
"value": "terms"
}
]
},
{
"location": "127:2:127:24",
"terms": [
{
"location": "127:16:127:18",
"type": "ref",
"value": [
{
"location": "127:16:127:18",
"type": "var",
"value": "equal"
}
]
},
{
"location": "127:2:127:15",
"type": "ref",
"value": [
{
"location": "127:2:127:7",
"type": "var",
"value": "value"
},
{
"location": "127:8:127:9",
"type": "number",
"value": 0
},
{
"location": "127:11:127:15",
"type": "string",
"value": "type"
}
]
},
{
"location": "127:19:127:24",
"type": "string",
"value": "ref"
}
]
},
{
"location": "128:2:128:33",
"terms": [
{
"location": "128:25:128:27",
"type": "ref",
"value": [
{
"location": "128:25:128:27",
"type": "var",
"value": "equal"
}
]
},
{
"location": "128:2:128:24",
"type": "ref",
"value": [
{
"value": "value",
"location": "128:2:128:7",
"type": "var"
},
{
"location": "128:8:128:9",
"type": "number",
"value": 0
},
{
"value": "value",
"location": "128:11:128:16",
"type": "string"
},
{
"location": "128:17:128:18",
"type": "number",
"value": 0
},
{
"location": "128:20:128:24",
"type": "string",
"value": "type"
}
]
},
{
"location": "128:28:128:33",
"type": "string",
"value": "var"
}
]
},
{
"location": "129:2:129:33",
"terms": [
{
"location": "129:26:129:28",
"type": "ref",
"value": [
{
"value": "equal",
"location": "129:26:129:28",
"type": "var"
}
]
},
{
"type": "ref",
"value": [
{
"value": "value",
"location": "129:2:129:7",
"type": "var"
},
{
"type": "number",
"value": 0,
"location": "129:8:129:9"
},
{
"location": "129:11:129:16",
"type": "string",
"value": "value"
},
{
"location": "129:17:129:18",
"type": "number",
"value": 0
},
{
"location": "129:20:129:25",
"type": "string",
"value": "value"
}
],
"location": "129:2:129:25"
},
{
"location": "129:29:129:33",
"type": "string",
"value": "eq"
}
]
}
]
},
{
"location": "132:1:132:77",
"head": {
"args": [
{
"location": "132:12:132:17",
"type": "var",
"value": "value"
},
{
"location": "132:19:132:20",
"type": "var",
"value": "$3"
}
],
"assign": true,
"value": {
"location": "132:25:132:54",
"type": "object",
"value": [
[
{
"location": "132:26:132:31",
"type": "string",
"value": "ref"
},
{
"location": "132:33:132:54",
"type": "call",
"value": [
{
"location": "132:33:132:46",
"type": "ref",
"value": [
{
"value": "find_ref_vars",
"location": "132:33:132:46",
"type": "var"
}
]
},
{
"location": "132:47:132:52",
"type": "var",
"value": "value"
}
]
}
]
]
},
"location": "132:1:132:54",
"ref": [
{
"location": "132:1:132:11",
"type": "var",
"value": "_find_vars"
}
]
},
"body": [
{
"location": "132:58:132:77",
"terms": [
{
"value": [
{
"location": "132:69:132:71",
"type": "var",
"value": "equal"
}
],
"location": "132:69:132:71",
"type": "ref"
},
{
"location": "132:58:132:68",
"type": "ref",
"value": [
{
"location": "132:58:132:63",
"type": "var",
"value": "value"
},
{
"location": "132:64:132:68",
"type": "string",
"value": "type"
}
]
},
{
"location": "132:72:132:77",
"type": "string",
"value": "ref"
}
]
}
]
},
{
"location": "134:1:137:2",
"head": {
"location": "134:1:134:70",
"ref": [
{
"location": "134:1:134:11",
"type": "var",
"value": "_find_vars"
}
],
"args": [
{
"location": "134:12:134:17",
"type": "var",
"value": "value"
},
{
"value": "last",
"location": "134:19:134:23",
"type": "var"
}
],
"assign": true,
"value": {
"location": "134:28:134:70",
"type": "object",
"value": [
[
{
"location": "134:29:134:37",
"type": "string",
"value": "somein"
},
{
"location": "134:39:134:70",
"type": "call",
"value": [
{
"location": "134:39:134:62",
"type": "ref",
"value": [
{
"location": "134:39:134:62",
"type": "var",
"value": "_find_some_in_decl_vars"
}
]
},
{
"type": "var",
"value": "value",
"location": "134:63:134:68"
}
]
}
]
]
}
},
"body": [
{
"location": "135:2:135:19",
"terms": [
{
"location": "135:7:135:9",
"type": "ref",
"value": [
{
"type": "var",
"value": "equal",
"location": "135:7:135:9"
}
]
},
{
"location": "135:2:135:6",
"type": "var",
"value": "last"
},
{
"value": "symbols",
"location": "135:10:135:19",
"type": "string"
}
]
},
{
"location": "136:2:136:25",
"terms": [
{
"location": "136:16:136:18",
"type": "ref",
"value": [
{
"type": "var",
"value": "equal",
"location": "136:16:136:18"
}
]
},
{
"location": "136:2:136:15",
"type": "ref",
"value": [
{
"location": "136:2:136:7",
"type": "var",
"value": "value"
},
{
"location": "136:8:136:9",
"type": "number",
"value": 0
},
{
"location": "136:11:136:15",
"type": "string",
"value": "type"
}
]
},
{
"value": "call",
"location": "136:19:136:25",
"type": "string"
}
]
}
]
},
{
"body": [
{
"location": "140:2:140:19",
"terms": [
{
"location": "140:7:140:9",
"type": "ref",
"value": [
{
"location": "140:7:140:9",
"type": "var",
"value": "equal"
}
]
},
{
"location": "140:2:140:6",
"type": "var",
"value": "last"
},
{
"location": "140:10:140:19",
"type": "string",
"value": "symbols"
}
]
},
{
"location": "141:2:141:25",
"terms": [
{
"location": "141:16:141:18",
"type": "ref",
"value": [
{
"location": "141:16:141:18",
"type": "var",
"value": "neq"
}
]
},
{
"location": "141:2:141:15",
"type": "ref",
"value": [
{
"location": "141:2:141:7",
"type": "var",
"value": "value"
},
{
"location": "141:8:141:9",
"type": "number",
"value": 0
},
{
"location": "141:11:141:15",
"type": "string",
"value": "type"
}
]
},
{
"location": "141:19:141:25",
"type": "string",
"value": "call"
}
]
}
],
"location": "139:1:142:2",
"head": {
"ref": [
{
"value": "_find_vars",
"location": "139:1:139:11",
"type": "var"
}
],
"args": [
{
"type": "var",
"value": "value",
"location": "139:12:139:17"
},
{
"location": "139:19:139:23",
"type": "var",
"value": "last"
}
],
"assign": true,
"value": {
"type": "object",
"value": [
[
{
"location": "139:29:139:35",
"type": "string",
"value": "some"
},
{
"type": "call",
"value": [
{
"location": "139:37:139:57",
"type": "ref",
"value": [
{
"location": "139:37:139:57",
"type": "var",
"value": "_find_some_decl_vars"
}
]
},
{
"location": "139:58:139:63",
"type": "var",
"value": "value"
}
],
"location": "139:37:139:65"
}
]
],
"location": "139:28:139:65"
},
"location": "139:1:139:65"
}
},
{
"location": "144:1:147:2",
"head": {
"assign": true,
"value": {
"location": "144:28:144:62",
"type": "object",
"value": [
[
{
"location": "144:29:144:36",
"type": "string",
"value": "every"
},
{
"location": "144:38:144:62",
"type": "call",
"value": [
{
"location": "144:38:144:54",
"type": "ref",
"value": [
{
"location": "144:38:144:54",
"type": "var",
"value": "_find_every_vars"
}
]
},
{
"location": "144:55:144:60",
"type": "var",
"value": "value"
}
]
}
]
]
},
"location": "144:1:144:62",
"ref": [
{
"value": "_find_vars",
"location": "144:1:144:11",
"type": "var"
}
],
"args": [
{
"type": "var",
"value": "value",
"location": "144:12:144:17"
},
{
"value": "last",
"location": "144:19:144:23",
"type": "var"
}
]
},
"body": [
{
"location": "145:2:145:17",
"terms": [
{
"location": "145:7:145:9",
"type": "ref",
"value": [
{
"location": "145:7:145:9",
"type": "var",
"value": "equal"
}
]
},
{
"type": "var",
"value": "last",
"location": "145:2:145:6"
},
{
"location": "145:10:145:17",
"type": "string",
"value": "terms"
}
]
},
{
"location": "146:2:146:14",
"terms": {
"location": "146:2:146:14",
"type": "ref",
"value": [
{
"location": "146:2:146:7",
"type": "var",
"value": "value"
},
{
"value": "domain",
"location": "146:8:146:14",
"type": "string"
}
]
}
}
]
},
{
"head": {
"args": [
{
"location": "149:12:149:17",
"type": "var",
"value": "value"
},
{
"location": "149:19:149:23",
"type": "var",
"value": "last"
}
],
"assign": true,
"value": {
"location": "149:28:149:46",
"type": "object",
"value": [
[
{
"location": "149:29:149:35",
"type": "string",
"value": "args"
},
{
"location": "149:37:149:45",
"type": "var",
"value": "arg_vars"
}
]
]
},
"location": "149:1:149:46",
"ref": [
{
"location": "149:1:149:11",
"type": "var",
"value": "_find_vars"
}
]
},
"body": [
{
"terms": [
{
"location": "150:7:150:9",
"type": "ref",
"value": [
{
"location": "150:7:150:9",
"type": "var",
"value": "equal"
}
]
},
{
"location": "150:2:150:6",
"type": "var",
"value": "last"
},
{
"value": "args",
"location": "150:10:150:16",
"type": "string"
}
],
"location": "150:2:150:16"
},
{
"location": "152:2:155:3",
"terms": [
{
"location": "152:11:152:13",
"type": "ref",
"value": [
{
"location": "152:11:152:13",
"type": "var",
"value": "assign"
}
]
},
{
"location": "152:2:152:10",
"type": "var",
"value": "arg_vars"
},
{
"location": "152:14:155:3",
"type": "arraycomprehension",
"value": {
"term": {
"location": "152:15:152:18",
"type": "var",
"value": "arg"
},
"body": [
{
"location": "153:3:153:20",
"terms": {
"location": "153:3:153:7",
"symbols": [
{
"location": "153:8:153:20",
"type": "call",
"value": [
{
"location": "153:12:153:14",
"type": "ref",
"value": [
{
"location": "153:12:153:14",
"type": "var",
"value": "internal"
},
{
"location": "153:12:153:14",
"type": "string",
"value": "member_2"
}
]
},
{
"value": "arg",
"location": "153:8:153:11",
"type": "var"
},
{
"value": "value",
"location": "153:15:153:20",
"type": "var"
}
]
}
]
}
},
{
"location": "154:3:154:20",
"terms": [
{
"location": "154:12:154:14",
"type": "ref",
"value": [
{
"location": "154:12:154:14",
"type": "var",
"value": "equal"
}
]
},
{
"value": [
{
"location": "154:3:154:6",
"type": "var",
"value": "arg"
},
{
"location": "154:7:154:11",
"type": "string",
"value": "type"
}
],
"location": "154:3:154:11",
"type": "ref"
},
{
"location": "154:15:154:20",
"type": "string",
"value": "var"
}
]
}
]
}
}
]
},
{
"location": "157:2:157:21",
"terms": [
{
"location": "157:18:157:19",
"type": "ref",
"value": [
{
"location": "157:18:157:19",
"type": "var",
"value": "gt"
}
]
},
{
"location": "157:2:157:17",
"type": "call",
"value": [
{
"value": [
{
"location": "157:2:157:7",
"type": "var",
"value": "count"
}
],
"location": "157:2:157:7",
"type": "ref"
},
{
"location": "157:8:157:16",
"type": "var",
"value": "arg_vars"
}
]
},
{
"location": "157:20:157:21",
"type": "number",
"value": 0
}
]
}
],
"location": "149:1:158:2"
},
{
"location": "160:1:163:2",
"head": {
"assign": true,
"value": {
"location": "160:22:160:40",
"type": "call",
"value": [
{
"value": [
{
"location": "160:22:160:29",
"type": "var",
"value": "sprintf"
}
],
"location": "160:22:160:29",
"type": "ref"
},
{
"location": "160:30:160:34",
"type": "string",
"value": "%d"
},
{
"location": "160:36:160:39",
"type": "array",
"value": [
{
"location": "160:37:160:38",
"type": "var",
"value": "i"
}
]
}
]
},
"location": "160:1:160:40",
"ref": [
{
"location": "160:1:160:12",
"type": "var",
"value": "_rule_index"
}
],
"args": [
{
"type": "var",
"value": "rule",
"location": "160:13:160:17"
}
]
},
"body": [
{
"location": "161:2:161:21",
"terms": {
"location": "161:2:161:6",
"symbols": [
{
"location": "161:7:161:21",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "161:12:161:14",
"type": "var",
"value": "internal"
},
{
"location": "161:12:161:14",
"type": "string",
"value": "member_3"
}
],
"location": "161:12:161:14"
},
{
"location": "161:7:161:8",
"type": "var",
"value": "i"
},
{
"value": "r",
"location": "161:10:161:11",
"type": "var"
},
{
"location": "161:15:161:21",
"type": "var",
"value": "_rules"
}
]
}
]
}
},
{
"location": "162:2:162:11",
"terms": [
{
"location": "162:4:162:6",
"type": "ref",
"value": [
{
"location": "162:4:162:6",
"type": "var",
"value": "equal"
}
]
},
{
"location": "162:2:162:3",
"type": "var",
"value": "r"
},
{
"value": "rule",
"location": "162:7:162:11",
"type": "var"
}
]
}
]
},
{
"location": "170:1:174:2",
"annotations": [
{
"scope": "rule",
"description": "traverses all nodes under provided node (using `walk`), and returns an array with\nall variables declared via assignment (:=), `some`, `every` and in comprehensions\nDEPRECATED: uses ast.found.vars instead\n",
"location": "165:1:169:44"
}
],
"head": {
"assign": true,
"value": {
"value": {
"term": {
"type": "var",
"value": "var",
"location": "170:21:170:24"
},
"body": [
{
"location": "171:2:171:27",
"terms": [
{
"location": "171:2:171:6",
"type": "ref",
"value": [
{
"location": "171:2:171:6",
"type": "var",
"value": "walk"
}
]
},
{
"location": "171:7:171:11",
"type": "var",
"value": "node"
},
{
"location": "171:13:171:26",
"type": "array",
"value": [
{
"location": "171:14:171:18",
"type": "var",
"value": "path"
},
{
"location": "171:20:171:25",
"type": "var",
"value": "value"
}
]
}
]
},
{
"location": "173:2:173:50",
"terms": [
{
"value": [
{
"location": "173:6:173:8",
"type": "var",
"value": "assign"
}
],
"location": "173:6:173:8",
"type": "ref"
},
{
"location": "173:2:173:5",
"type": "var",
"value": "var"
},
{
"location": "173:9:174:2",
"type": "ref",
"value": [
{
"location": "173:9:173:44",
"type": "call",
"value": [
{
"location": "173:9:173:19",
"type": "ref",
"value": [
{
"location": "173:9:173:19",
"type": "var",
"value": "_find_vars"
}
]
},
{
"value": "value",
"location": "173:20:173:25",
"type": "var"
},
{
"location": "173:27:173:44",
"type": "call",
"value": [
{
"location": "173:27:173:37",
"type": "ref",
"value": [
{
"location": "173:27:173:32",
"type": "var",
"value": "regal"
},
{
"location": "173:33:173:37",
"type": "string",
"value": "last"
}
]
},
{
"location": "173:38:173:42",
"type": "var",
"value": "path"
}
]
}
]
},
{
"location": "173:45:173:46",
"type": "var",
"value": "$4"
},
{
"location": "173:48:173:49",
"type": "var",
"value": "$5"
}
]
}
]
}
]
},
"location": "170:20:174:2",
"type": "arraycomprehension"
},
"location": "170:1:174:2",
"ref": [
{
"location": "170:1:170:10",
"type": "var",
"value": "find_vars"
}
],
"args": [
{
"location": "170:11:170:15",
"type": "var",
"value": "node"
}
]
}
},
{
"location": "178:1:178:22",
"head": {
"location": "178:1:178:22",
"ref": [
{
"location": "178:1:178:7",
"type": "var",
"value": "_rules"
}
],
"assign": true,
"value": {
"location": "178:11:178:22",
"type": "ref",
"value": [
{
"location": "178:11:178:16",
"type": "var",
"value": "input"
},
{
"location": "178:17:178:22",
"type": "string",
"value": "rules"
}
]
}
}
},
{
"location": "180:1:180:79",
"head": {
"location": "180:1:180:60",
"ref": [
{
"location": "180:1:180:7",
"type": "var",
"value": "_rules"
}
],
"assign": true,
"value": {
"location": "180:11:180:60",
"type": "ref",
"value": [
{
"type": "var",
"value": "data",
"location": "180:11:180:15"
},
{
"value": "workspace",
"location": "180:16:180:25",
"type": "string"
},
{
"location": "180:26:180:32",
"type": "string",
"value": "parsed"
},
{
"location": "180:33:180:53",
"type": "ref",
"value": [
{
"location": "180:33:180:38",
"type": "var",
"value": "input"
},
{
"location": "180:39:180:44",
"type": "string",
"value": "regal"
},
{
"type": "string",
"value": "file",
"location": "180:45:180:49"
},
{
"type": "string",
"value": "uri",
"location": "180:50:180:53"
}
]
},
{
"location": "180:55:180:60",
"type": "string",
"value": "rules"
}
]
}
},
"body": [
{
"location": "180:64:180:79",
"negated": true,
"terms": {
"location": "180:68:180:79",
"type": "ref",
"value": [
{
"value": "input",
"location": "180:68:180:73",
"type": "var"
},
{
"value": "rules",
"location": "180:74:180:79",
"type": "string"
}
]
}
}
]
},
{
"head": {
"location": "193:1:193:45",
"ref": [
{
"location": "193:1:193:6",
"type": "var",
"value": "found"
},
{
"location": "193:7:193:11",
"type": "string",
"value": "vars"
},
{
"location": "193:12:193:22",
"type": "var",
"value": "rule_index"
},
{
"location": "193:24:193:31",
"type": "var",
"value": "context"
}
],
"key": {
"location": "193:42:193:45",
"type": "var",
"value": "var"
}
},
"body": [
{
"location": "194:2:194:24",
"terms": {
"symbols": [
{
"location": "194:7:194:24",
"type": "call",
"value": [
{
"location": "194:15:194:17",
"type": "ref",
"value": [
{
"location": "194:15:194:17",
"type": "var",
"value": "internal"
},
{
"location": "194:15:194:17",
"type": "string",
"value": "member_3"
}
]
},
{
"location": "194:7:194:8",
"type": "var",
"value": "i"
},
{
"location": "194:10:194:14",
"type": "var",
"value": "rule"
},
{
"location": "194:18:194:24",
"type": "var",
"value": "_rules"
}
]
}
],
"location": "194:2:194:6"
}
},
{
"location": "197:2:197:34",
"terms": [
{
"value": [
{
"value": "assign",
"location": "197:13:197:15",
"type": "var"
}
],
"location": "197:13:197:15",
"type": "ref"
},
{
"location": "197:2:197:12",
"type": "var",
"value": "rule_index"
},
{
"location": "197:16:197:34",
"type": "call",
"value": [
{
"location": "197:16:197:23",
"type": "ref",
"value": [
{
"value": "sprintf",
"location": "197:16:197:23",
"type": "var"
}
]
},
{
"location": "197:24:197:28",
"type": "string",
"value": "%d"
},
{
"location": "197:30:197:33",
"type": "array",
"value": [
{
"value": "i",
"location": "197:31:197:32",
"type": "var"
}
]
}
]
}
]
},
{
"location": "199:2:199:27",
"terms": [
{
"location": "199:2:199:6",
"type": "ref",
"value": [
{
"location": "199:2:199:6",
"type": "var",
"value": "walk"
}
]
},
{
"value": "rule",
"location": "199:7:199:11",
"type": "var"
},
{
"location": "199:13:199:26",
"type": "array",
"value": [
{
"location": "199:14:199:18",
"type": "var",
"value": "path"
},
{
"location": "199:20:199:25",
"type": "var",
"value": "value"
}
]
}
]
},
{
"location": "201:2:201:59",
"terms": {
"location": "201:2:201:6",
"symbols": [
{
"location": "201:7:201:59",
"type": "call",
"value": [
{
"location": "201:21:201:23",
"type": "ref",
"value": [
{
"location": "201:21:201:23",
"type": "var",
"value": "internal"
},
{
"type": "string",
"value": "member_3",
"location": "201:21:201:23"
}
]
},
{
"location": "201:7:201:14",
"type": "var",
"value": "context"
},
{
"location": "201:16:201:20",
"type": "var",
"value": "vars"
},
{
"location": "201:24:201:59",
"type": "call",
"value": [
{
"location": "201:24:201:34",
"type": "ref",
"value": [
{
"location": "201:24:201:34",
"type": "var",
"value": "_find_vars"
}
]
},
{
"location": "201:35:201:40",
"type": "var",
"value": "value"
},
{
"location": "201:42:201:59",
"type": "call",
"value": [
{
"location": "201:42:201:52",
"type": "ref",
"value": [
{
"location": "201:42:201:47",
"type": "var",
"value": "regal"
},
{
"location": "201:48:201:52",
"type": "string",
"value": "last"
}
]
},
{
"type": "var",
"value": "path",
"location": "201:53:201:57"
}
]
}
]
}
]
}
]
}
},
{
"location": "202:2:202:18",
"terms": {
"location": "202:2:202:6",
"symbols": [
{
"location": "202:7:202:18",
"type": "call",
"value": [
{
"location": "202:11:202:13",
"type": "ref",
"value": [
{
"location": "202:11:202:13",
"type": "var",
"value": "internal"
},
{
"location": "202:11:202:13",
"type": "string",
"value": "member_2"
}
]
},
{
"type": "var",
"value": "var",
"location": "202:7:202:10"
},
{
"type": "var",
"value": "vars",
"location": "202:14:202:18"
}
]
}
]
}
}
],
"location": "193:1:203:2",
"annotations": [
{
"location": "182:1:192:10",
"scope": "rule",
"description": "object containing all variables found in the input AST, keyed first by the index of\nthe rule where the variables were found (as a numeric string), and then the context\nof the variable, which will be one of:\n- term\n- assign\n- every\n- some\n- somein\n- ref\n"
}
]
},
{
"location": "207:1:216:2",
"annotations": [
{
"location": "205:1:206:41",
"scope": "rule",
"description": "all refs foundd in module"
}
],
"head": {
"ref": [
{
"value": "found",
"location": "207:1:207:6",
"type": "var"
},
{
"location": "207:7:207:11",
"type": "string",
"value": "refs"
},
{
"location": "207:12:207:22",
"type": "var",
"value": "rule_index"
}
],
"key": {
"value": "value",
"location": "207:33:207:38",
"type": "var"
},
"location": "207:1:207:38"
},
"body": [
{
"location": "208:2:208:24",
"terms": {
"location": "208:2:208:6",
"symbols": [
{
"location": "208:7:208:24",
"type": "call",
"value": [
{
"location": "208:15:208:17",
"type": "ref",
"value": [
{
"location": "208:15:208:17",
"type": "var",
"value": "internal"
},
{
"location": "208:15:208:17",
"type": "string",
"value": "member_3"
}
]
},
{
"location": "208:7:208:8",
"type": "var",
"value": "i"
},
{
"location": "208:10:208:14",
"type": "var",
"value": "rule"
},
{
"location": "208:18:208:24",
"type": "var",
"value": "_rules"
}
]
}
]
}
},
{
"location": "211:2:211:34",
"terms": [
{
"location": "211:13:211:15",
"type": "ref",
"value": [
{
"location": "211:13:211:15",
"type": "var",
"value": "assign"
}
]
},
{
"location": "211:2:211:12",
"type": "var",
"value": "rule_index"
},
{
"value": [
{
"location": "211:16:211:23",
"type": "ref",
"value": [
{
"location": "211:16:211:23",
"type": "var",
"value": "sprintf"
}
]
},
{
"location": "211:24:211:28",
"type": "string",
"value": "%d"
},
{
"location": "211:30:211:33",
"type": "array",
"value": [
{
"location": "211:31:211:32",
"type": "var",
"value": "i"
}
]
}
],
"location": "211:16:211:34",
"type": "call"
}
]
},
{
"location": "213:2:213:24",
"terms": [
{
"location": "213:2:213:6",
"type": "ref",
"value": [
{
"location": "213:2:213:6",
"type": "var",
"value": "walk"
}
]
},
{
"location": "213:7:213:11",
"type": "var",
"value": "rule"
},
{
"location": "213:13:213:23",
"type": "array",
"value": [
{
"location": "213:14:213:15",
"type": "var",
"value": "$6"
},
{
"location": "213:17:213:22",
"type": "var",
"value": "value"
}
]
}
]
},
{
"location": "215:2:215:15",
"terms": [
{
"type": "ref",
"value": [
{
"location": "215:2:215:8",
"type": "var",
"value": "is_ref"
}
],
"location": "215:2:215:8"
},
{
"location": "215:9:215:14",
"type": "var",
"value": "value"
}
]
}
]
},
{
"annotations": [
{
"location": "218:1:219:44",
"scope": "rule",
"description": "all symbols foundd in module"
}
],
"head": {
"ref": [
{
"location": "220:1:220:6",
"type": "var",
"value": "found"
},
{
"location": "220:7:220:14",
"type": "string",
"value": "symbols"
},
{
"value": "rule_index",
"location": "220:15:220:25",
"type": "var"
}
],
"key": {
"location": "220:36:220:49",
"type": "ref",
"value": [
{
"location": "220:36:220:41",
"type": "var",
"value": "value"
},
{
"type": "string",
"value": "symbols",
"location": "220:42:220:49"
}
]
},
"location": "220:1:220:49"
},
"body": [
{
"location": "221:2:221:24",
"terms": {
"location": "221:2:221:6",
"symbols": [
{
"location": "221:7:221:24",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "221:15:221:17",
"type": "var",
"value": "internal"
},
{
"type": "string",
"value": "member_3",
"location": "221:15:221:17"
}
],
"location": "221:15:221:17"
},
{
"location": "221:7:221:8",
"type": "var",
"value": "i"
},
{
"location": "221:10:221:14",
"type": "var",
"value": "rule"
},
{
"location": "221:18:221:24",
"type": "var",
"value": "_rules"
}
]
}
]
}
},
{
"location": "224:2:224:34",
"terms": [
{
"location": "224:13:224:15",
"type": "ref",
"value": [
{
"location": "224:13:224:15",
"type": "var",
"value": "assign"
}
]
},
{
"location": "224:2:224:12",
"type": "var",
"value": "rule_index"
},
{
"location": "224:16:224:34",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "224:16:224:23",
"type": "var",
"value": "sprintf"
}
],
"location": "224:16:224:23"
},
{
"location": "224:24:224:28",
"type": "string",
"value": "%d"
},
{
"location": "224:30:224:33",
"type": "array",
"value": [
{
"location": "224:31:224:32",
"type": "var",
"value": "i"
}
]
}
]
}
]
},
{
"location": "226:2:226:24",
"terms": [
{
"location": "226:2:226:6",
"type": "ref",
"value": [
{
"type": "var",
"value": "walk",
"location": "226:2:226:6"
}
]
},
{
"location": "226:7:226:11",
"type": "var",
"value": "rule"
},
{
"location": "226:13:226:23",
"type": "array",
"value": [
{
"location": "226:14:226:15",
"type": "var",
"value": "$7"
},
{
"value": "value",
"location": "226:17:226:22",
"type": "var"
}
]
}
]
}
],
"location": "220:1:227:2"
},
{
"location": "231:1:240:2",
"annotations": [
{
"location": "229:1:230:50",
"scope": "rule",
"description": "all comprehensions found in module"
}
],
"head": {
"ref": [
{
"location": "231:1:231:6",
"type": "var",
"value": "found"
},
{
"location": "231:7:231:21",
"type": "string",
"value": "comprehensions"
},
{
"location": "231:22:231:32",
"type": "var",
"value": "rule_index"
}
],
"key": {
"location": "231:43:231:48",
"type": "var",
"value": "value"
},
"location": "231:1:231:48"
},
"body": [
{
"location": "232:2:232:24",
"terms": {
"location": "232:2:232:6",
"symbols": [
{
"location": "232:7:232:24",
"type": "call",
"value": [
{
"location": "232:15:232:17",
"type": "ref",
"value": [
{
"type": "var",
"value": "internal",
"location": "232:15:232:17"
},
{
"location": "232:15:232:17",
"type": "string",
"value": "member_3"
}
]
},
{
"location": "232:7:232:8",
"type": "var",
"value": "i"
},
{
"type": "var",
"value": "rule",
"location": "232:10:232:14"
},
{
"value": "_rules",
"location": "232:18:232:24",
"type": "var"
}
]
}
]
}
},
{
"location": "235:2:235:34",
"terms": [
{
"location": "235:13:235:15",
"type": "ref",
"value": [
{
"location": "235:13:235:15",
"type": "var",
"value": "assign"
}
]
},
{
"location": "235:2:235:12",
"type": "var",
"value": "rule_index"
},
{
"location": "235:16:235:34",
"type": "call",
"value": [
{
"location": "235:16:235:23",
"type": "ref",
"value": [
{
"location": "235:16:235:23",
"type": "var",
"value": "sprintf"
}
]
},
{
"location": "235:24:235:28",
"type": "string",
"value": "%d"
},
{
"location": "235:30:235:33",
"type": "array",
"value": [
{
"value": "i",
"location": "235:31:235:32",
"type": "var"
}
]
}
]
}
]
},
{
"location": "237:2:237:24",
"terms": [
{
"location": "237:2:237:6",
"type": "ref",
"value": [
{
"value": "walk",
"location": "237:2:237:6",
"type": "var"
}
]
},
{
"type": "var",
"value": "rule",
"location": "237:7:237:11"
},
{
"value": [
{
"value": "$8",
"location": "237:14:237:15",
"type": "var"
},
{
"value": "value",
"location": "237:17:237:22",
"type": "var"
}
],
"location": "237:13:237:23",
"type": "array"
}
]
},
{
"location": "239:2:239:81",
"terms": [
{
"type": "ref",
"value": [
{
"location": "239:13:239:15",
"type": "var",
"value": "internal"
},
{
"location": "239:13:239:15",
"type": "string",
"value": "member_2"
}
],
"location": "239:13:239:15"
},
{
"location": "239:2:239:12",
"type": "ref",
"value": [
{
"location": "239:2:239:7",
"type": "var",
"value": "value"
},
{
"location": "239:8:239:12",
"type": "string",
"value": "type"
}
]
},
{
"value": [
{
"type": "string",
"value": "arraycomprehension",
"location": "239:17:239:37"
},
{
"value": "objectcomprehension",
"location": "239:39:239:60",
"type": "string"
},
{
"location": "239:62:239:80",
"type": "string",
"value": "setcomprehension"
}
],
"location": "239:16:239:81",
"type": "set"
}
]
}
]
},
{
"head": {
"assign": true,
"value": {
"location": "248:45:253:2",
"type": "arraycomprehension",
"value": {
"term": {
"location": "248:46:248:49",
"type": "var",
"value": "var"
},
"body": [
{
"location": "249:2:249:44",
"terms": [
{
"location": "249:6:249:8",
"type": "ref",
"value": [
{
"type": "var",
"value": "assign",
"location": "249:6:249:8"
}
]
},
{
"value": "var",
"location": "249:2:249:5",
"type": "var"
},
{
"location": "249:9:249:44",
"type": "ref",
"value": [
{
"location": "249:9:249:14",
"type": "var",
"value": "found"
},
{
"location": "249:15:249:19",
"type": "string",
"value": "vars"
},
{
"type": "call",
"value": [
{
"location": "249:20:249:31",
"type": "ref",
"value": [
{
"location": "249:20:249:31",
"type": "var",
"value": "_rule_index"
}
]
},
{
"location": "249:32:249:36",
"type": "var",
"value": "rule"
}
],
"location": "249:20:249:38"
},
{
"location": "249:39:249:40",
"type": "var",
"value": "$9"
},
{
"location": "249:42:249:43",
"type": "var",
"value": "$10"
}
]
}
]
},
{
"terms": [
{
"location": "251:6:251:17",
"type": "ref",
"value": [
{
"location": "251:6:251:17",
"type": "var",
"value": "is_wildcard"
}
]
},
{
"type": "var",
"value": "var",
"location": "251:18:251:21"
}
],
"location": "251:2:251:22",
"negated": true
},
{
"location": "252:2:252:64",
"terms": [
{
"location": "252:2:252:18",
"type": "ref",
"value": [
{
"location": "252:2:252:18",
"type": "var",
"value": "_before_location"
}
]
},
{
"type": "var",
"value": "rule",
"location": "252:19:252:23"
},
{
"location": "252:25:252:28",
"type": "var",
"value": "var"
},
{
"location": "252:30:252:64",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "252:30:252:34",
"type": "var",
"value": "util"
},
{
"location": "252:35:252:53",
"type": "string",
"value": "to_location_object"
}
],
"location": "252:30:252:53"
},
{
"location": "252:54:252:62",
"type": "var",
"value": "location"
}
]
}
]
}
]
}
},
"location": "248:1:253:2",
"ref": [
{
"location": "248:1:248:25",
"type": "var",
"value": "find_vars_in_local_scope"
}
],
"args": [
{
"location": "248:26:248:30",
"type": "var",
"value": "rule"
},
{
"type": "var",
"value": "location",
"location": "248:32:248:40"
}
]
},
"location": "248:1:253:2",
"annotations": [
{
"location": "242:1:247:28",
"scope": "rule",
"description": "finds all vars declared in `rule` *before* the `location` provided\nnote: this isn't 100% accurate, as it doesn't take into account `=`\nassignments / unification, but it's likely good enough since other rules\nrecommend against those\n"
}
]
},
{
"location": "255:1:262:2",
"head": {
"args": [
{
"location": "255:15:255:23",
"type": "var",
"value": "location"
}
],
"assign": true,
"value": {
"location": "255:28:255:31",
"type": "var",
"value": "end"
},
"location": "255:1:255:31",
"ref": [
{
"location": "255:1:255:14",
"type": "var",
"value": "_end_location"
}
]
},
"body": [
{
"terms": [
{
"value": [
{
"value": "assign",
"location": "256:6:256:8",
"type": "var"
}
],
"location": "256:6:256:8",
"type": "ref"
},
{
"location": "256:2:256:5",
"type": "var",
"value": "loc"
},
{
"value": [
{
"location": "256:9:256:32",
"type": "ref",
"value": [
{
"location": "256:9:256:13",
"type": "var",
"value": "util"
},
{
"location": "256:14:256:32",
"type": "string",
"value": "to_location_object"
}
]
},
{
"type": "var",
"value": "location",
"location": "256:33:256:41"
}
],
"location": "256:9:256:42",
"type": "call"
}
],
"location": "256:2:256:42"
},
{
"location": "257:2:257:32",
"terms": [
{
"location": "257:8:257:10",
"type": "ref",
"value": [
{
"location": "257:8:257:10",
"type": "var",
"value": "assign"
}
]
},
{
"location": "257:2:257:7",
"type": "var",
"value": "lines"
},
{
"location": "257:11:257:32",
"type": "call",
"value": [
{
"location": "257:11:257:16",
"type": "ref",
"value": [
{
"location": "257:11:257:16",
"type": "var",
"value": "split"
}
]
},
{
"location": "257:17:257:25",
"type": "ref",
"value": [
{
"location": "257:17:257:20",
"type": "var",
"value": "loc"
},
{
"location": "257:21:257:25",
"type": "string",
"value": "text"
}
]
},
{
"location": "257:27:257:31",
"type": "string",
"value": "\n"
}
]
}
]
},
{
"location": "258:2:261:3",
"terms": [
{
"value": [
{
"type": "var",
"value": "assign",
"location": "258:6:258:8"
}
],
"location": "258:6:258:8",
"type": "ref"
},
{
"location": "258:2:258:5",
"type": "var",
"value": "end"
},
{
"location": "258:9:261:3",
"type": "object",
"value": [
[
{
"location": "259:3:259:8",
"type": "string",
"value": "row"
},
{
"value": [
{
"value": [
{
"location": "259:35:259:36",
"type": "var",
"value": "minus"
}
],
"location": "259:35:259:36",
"type": "ref"
},
{
"value": [
{
"location": "259:19:259:20",
"type": "ref",
"value": [
{
"location": "259:19:259:20",
"type": "var",
"value": "plus"
}
]
},
{
"location": "259:11:259:18",
"type": "ref",
"value": [
{
"location": "259:11:259:14",
"type": "var",
"value": "loc"
},
{
"location": "259:15:259:18",
"type": "string",
"value": "row"
}
]
},
{
"location": "259:21:259:34",
"type": "call",
"value": [
{
"location": "259:21:259:26",
"type": "ref",
"value": [
{
"location": "259:21:259:26",
"type": "var",
"value": "count"
}
]
},
{
"location": "259:27:259:32",
"type": "var",
"value": "lines"
}
]
}
],
"location": "259:11:259:35",
"type": "call"
},
{
"type": "number",
"value": 1,
"location": "259:37:259:38"
}
],
"location": "259:11:259:39",
"type": "call"
}
],
[
{
"type": "string",
"value": "col",
"location": "260:3:260:8"
},
{
"location": "260:10:260:44",
"type": "call",
"value": [
{
"location": "260:18:260:19",
"type": "ref",
"value": [
{
"location": "260:18:260:19",
"type": "var",
"value": "plus"
}
]
},
{
"value": [
{
"location": "260:10:260:13",
"type": "var",
"value": "loc"
},
{
"location": "260:14:260:17",
"type": "string",
"value": "col"
}
],
"location": "260:10:260:17",
"type": "ref"
},
{
"location": "260:20:260:45",
"type": "call",
"value": [
{
"location": "260:20:260:25",
"type": "ref",
"value": [
{
"type": "var",
"value": "count",
"location": "260:20:260:25"
}
]
},
{
"location": "260:26:260:44",
"type": "call",
"value": [
{
"location": "260:26:260:36",
"type": "ref",
"value": [
{
"location": "260:26:260:31",
"type": "var",
"value": "regal"
},
{
"location": "260:32:260:36",
"type": "string",
"value": "last"
}
]
},
{
"location": "260:37:260:42",
"type": "var",
"value": "lines"
}
]
}
]
}
]
}
]
]
}
]
}
]
},
{
"location": "266:1:278:2",
"head": {
"location": "266:1:266:36",
"ref": [
{
"type": "var",
"value": "_before_location",
"location": "266:1:266:17"
}
],
"args": [
{
"location": "266:18:266:22",
"type": "var",
"value": "rule"
},
{
"location": "266:24:266:25",
"type": "var",
"value": "$11"
},
{
"location": "266:27:266:35",
"type": "var",
"value": "location"
}
],
"value": {
"type": "boolean",
"value": true
}
},
"body": [
{
"location": "267:2:267:42",
"terms": [
{
"value": [
{
"location": "267:6:267:8",
"type": "var",
"value": "assign"
}
],
"location": "267:6:267:8",
"type": "ref"
},
{
"location": "267:2:267:5",
"type": "var",
"value": "loc"
},
{
"location": "267:9:267:42",
"type": "call",
"value": [
{
"location": "267:9:267:32",
"type": "ref",
"value": [
{
"location": "267:9:267:13",
"type": "var",
"value": "util"
},
{
"location": "267:14:267:32",
"type": "string",
"value": "to_location_object"
}
]
},
{
"location": "267:33:267:41",
"type": "var",
"value": "location"
}
]
}
]
},
{
"location": "269:2:269:66",
"terms": [
{
"location": "269:14:269:16",
"type": "ref",
"value": [
{
"location": "269:14:269:16",
"type": "var",
"value": "assign"
}
]
},
{
"location": "269:2:269:13",
"type": "var",
"value": "value_start"
},
{
"value": [
{
"type": "ref",
"value": [
{
"location": "269:17:269:21",
"type": "var",
"value": "util"
},
{
"location": "269:22:269:40",
"type": "string",
"value": "to_location_object"
}
],
"location": "269:17:269:40"
},
{
"location": "269:41:269:65",
"type": "ref",
"value": [
{
"location": "269:41:269:45",
"type": "var",
"value": "rule"
},
{
"location": "269:46:269:50",
"type": "string",
"value": "head"
},
{
"value": "value",
"location": "269:51:269:56",
"type": "string"
},
{
"value": "location",
"location": "269:57:269:65",
"type": "string"
}
]
}
],
"location": "269:17:269:66",
"type": "call"
}
]
},
{
"location": "271:2:271:28",
"terms": [
{
"value": [
{
"value": "gte",
"location": "271:10:271:12",
"type": "var"
}
],
"location": "271:10:271:12",
"type": "ref"
},
{
"type": "ref",
"value": [
{
"location": "271:2:271:5",
"type": "var",
"value": "loc"
},
{
"location": "271:6:271:9",
"type": "string",
"value": "row"
}
],
"location": "271:2:271:9"
},
{
"location": "271:13:271:28",
"type": "ref",
"value": [
{
"location": "271:13:271:24",
"type": "var",
"value": "value_start"
},
{
"location": "271:25:271:28",
"type": "string",
"value": "row"
}
]
}
]
},
{
"location": "272:2:272:28",
"terms": [
{
"location": "272:10:272:12",
"type": "ref",
"value": [
{
"value": "gte",
"location": "272:10:272:12",
"type": "var"
}
]
},
{
"location": "272:2:272:9",
"type": "ref",
"value": [
{
"location": "272:2:272:5",
"type": "var",
"value": "loc"
},
{
"location": "272:6:272:9",
"type": "string",
"value": "col"
}
]
},
{
"location": "272:13:272:28",
"type": "ref",
"value": [
{
"location": "272:13:272:24",
"type": "var",
"value": "value_start"
},
{
"location": "272:25:272:28",
"type": "string",
"value": "col"
}
]
}
]
},
{
"location": "274:2:274:79",
"terms": [
{
"location": "274:12:274:14",
"type": "ref",
"value": [
{
"value": "assign",
"location": "274:12:274:14",
"type": "var"
}
]
},
{
"value": "value_end",
"location": "274:2:274:11",
"type": "var"
},
{
"location": "274:15:274:79",
"type": "call",
"value": [
{
"location": "274:15:274:28",
"type": "ref",
"value": [
{
"type": "var",
"value": "_end_location",
"location": "274:15:274:28"
}
]
},
{
"location": "274:29:274:79",
"type": "call",
"value": [
{
"location": "274:29:274:52",
"type": "ref",
"value": [
{
"location": "274:29:274:33",
"type": "var",
"value": "util"
},
{
"value": "to_location_object",
"location": "274:34:274:52",
"type": "string"
}
]
},
{
"location": "274:53:274:77",
"type": "ref",
"value": [
{
"location": "274:53:274:57",
"type": "var",
"value": "rule"
},
{
"location": "274:58:274:62",
"type": "string",
"value": "head"
},
{
"location": "274:63:274:68",
"type": "string",
"value": "value"
},
{
"location": "274:69:274:77",
"type": "string",
"value": "location"
}
]
}
]
}
]
}
]
},
{
"location": "276:2:276:26",
"terms": [
{
"location": "276:10:276:12",
"type": "ref",
"value": [
{
"value": "lte",
"location": "276:10:276:12",
"type": "var"
}
]
},
{
"location": "276:2:276:9",
"type": "ref",
"value": [
{
"location": "276:2:276:5",
"type": "var",
"value": "loc"
},
{
"location": "276:6:276:9",
"type": "string",
"value": "row"
}
]
},
{
"location": "276:13:276:26",
"type": "ref",
"value": [
{
"location": "276:13:276:22",
"type": "var",
"value": "value_end"
},
{
"location": "276:23:276:26",
"type": "string",
"value": "row"
}
]
}
]
},
{
"location": "277:2:277:26",
"terms": [
{
"location": "277:10:277:12",
"type": "ref",
"value": [
{
"location": "277:10:277:12",
"type": "var",
"value": "lte"
}
]
},
{
"location": "277:2:277:9",
"type": "ref",
"value": [
{
"location": "277:2:277:5",
"type": "var",
"value": "loc"
},
{
"location": "277:6:277:9",
"type": "string",
"value": "col"
}
]
},
{
"location": "277:13:277:26",
"type": "ref",
"value": [
{
"value": "value_end",
"location": "277:13:277:22",
"type": "var"
},
{
"location": "277:23:277:26",
"type": "string",
"value": "col"
}
]
}
]
}
]
},
{
"head": {
"ref": [
{
"location": "280:1:280:17",
"type": "var",
"value": "_before_location"
}
],
"args": [
{
"location": "280:18:280:19",
"type": "var",
"value": "$12"
},
{
"value": "var",
"location": "280:21:280:24",
"type": "var"
},
{
"location": "280:26:280:34",
"type": "var",
"value": "location"
}
],
"value": {
"type": "boolean",
"value": true
},
"location": "280:1:280:35"
},
"body": [
{
"location": "281:2:281:83",
"terms": [
{
"value": [
{
"location": "281:44:281:45",
"type": "var",
"value": "lt"
}
],
"location": "281:44:281:45",
"type": "ref"
},
{
"value": [
{
"location": "281:2:281:39",
"type": "call",
"value": [
{
"value": [
{
"type": "var",
"value": "util",
"location": "281:2:281:6"
},
{
"type": "string",
"value": "to_location_object",
"location": "281:7:281:25"
}
],
"location": "281:2:281:25",
"type": "ref"
},
{
"value": [
{
"location": "281:26:281:29",
"type": "var",
"value": "var"
},
{
"location": "281:30:281:38",
"type": "string",
"value": "location"
}
],
"location": "281:26:281:38",
"type": "ref"
}
]
},
{
"location": "281:40:281:43",
"type": "string",
"value": "row"
}
],
"location": "281:2:281:45",
"type": "ref"
},
{
"location": "281:46:282:2",
"type": "ref",
"value": [
{
"location": "281:46:281:79",
"type": "call",
"value": [
{
"location": "281:46:281:69",
"type": "ref",
"value": [
{
"location": "281:46:281:50",
"type": "var",
"value": "util"
},
{
"location": "281:51:281:69",
"type": "string",
"value": "to_location_object"
}
]
},
{
"location": "281:70:281:78",
"type": "var",
"value": "location"
}
]
},
{
"location": "281:80:281:83",
"type": "string",
"value": "row"
}
]
}
]
}
],
"location": "280:1:282:2"
},
{
"location": "284:1:290:2",
"head": {
"value": {
"type": "boolean",
"value": true
},
"location": "284:1:284:35",
"ref": [
{
"location": "284:1:284:17",
"type": "var",
"value": "_before_location"
}
],
"args": [
{
"location": "284:18:284:19",
"type": "var",
"value": "$13"
},
{
"value": "var",
"location": "284:21:284:24",
"type": "var"
},
{
"type": "var",
"value": "location",
"location": "284:26:284:34"
}
]
},
"body": [
{
"terms": [
{
"location": "285:10:285:12",
"type": "ref",
"value": [
{
"location": "285:10:285:12",
"type": "var",
"value": "assign"
}
]
},
{
"location": "285:2:285:9",
"type": "var",
"value": "var_loc"
},
{
"location": "285:13:285:50",
"type": "call",
"value": [
{
"location": "285:13:285:36",
"type": "ref",
"value": [
{
"location": "285:13:285:17",
"type": "var",
"value": "util"
},
{
"location": "285:18:285:36",
"type": "string",
"value": "to_location_object"
}
]
},
{
"location": "285:37:285:49",
"type": "ref",
"value": [
{
"location": "285:37:285:40",
"type": "var",
"value": "var"
},
{
"location": "285:41:285:49",
"type": "string",
"value": "location"
}
]
}
]
}
],
"location": "285:2:285:50"
},
{
"location": "286:2:286:42",
"terms": [
{
"value": [
{
"location": "286:6:286:8",
"type": "var",
"value": "assign"
}
],
"location": "286:6:286:8",
"type": "ref"
},
{
"value": "loc",
"location": "286:2:286:5",
"type": "var"
},
{
"location": "286:9:286:42",
"type": "call",
"value": [
{
"location": "286:9:286:32",
"type": "ref",
"value": [
{
"location": "286:9:286:13",
"type": "var",
"value": "util"
},
{
"location": "286:14:286:32",
"type": "string",
"value": "to_location_object"
}
]
},
{
"location": "286:33:286:41",
"type": "var",
"value": "location"
}
]
}
]
},
{
"location": "288:2:288:24",
"terms": [
{
"location": "288:14:288:16",
"type": "ref",
"value": [
{
"location": "288:14:288:16",
"type": "var",
"value": "equal"
}
]
},
{
"location": "288:2:288:13",
"type": "ref",
"value": [
{
"value": "var_loc",
"location": "288:2:288:9",
"type": "var"
},
{
"location": "288:10:288:13",
"type": "string",
"value": "row"
}
]
},
{
"location": "288:17:288:24",
"type": "ref",
"value": [
{
"location": "288:17:288:20",
"type": "var",
"value": "loc"
},
{
"location": "288:21:288:24",
"type": "string",
"value": "row"
}
]
}
]
},
{
"location": "289:2:289:23",
"terms": [
{
"type": "ref",
"value": [
{
"value": "lt",
"location": "289:14:289:15",
"type": "var"
}
],
"location": "289:14:289:15"
},
{
"value": [
{
"location": "289:2:289:9",
"type": "var",
"value": "var_loc"
},
{
"location": "289:10:289:13",
"type": "string",
"value": "col"
}
],
"location": "289:2:289:13",
"type": "ref"
},
{
"value": [
{
"location": "289:16:289:19",
"type": "var",
"value": "loc"
},
{
"location": "289:20:289:23",
"type": "string",
"value": "col"
}
],
"location": "289:16:289:23",
"type": "ref"
}
]
}
]
},
{
"location": "294:1:299:2",
"annotations": [
{
"location": "292:1:293:77",
"scope": "rule",
"description": "find *only* names in the local scope, and not e.g. rule names"
}
],
"head": {
"location": "294:1:294:51",
"ref": [
{
"location": "294:1:294:26",
"type": "var",
"value": "find_names_in_local_scope"
}
],
"args": [
{
"location": "294:27:294:31",
"type": "var",
"value": "rule"
},
{
"location": "294:33:294:41",
"type": "var",
"value": "location"
}
],
"assign": true,
"value": {
"type": "var",
"value": "names",
"location": "294:46:294:51"
}
},
"body": [
{
"location": "295:2:295:43",
"terms": [
{
"location": "295:15:295:17",
"type": "ref",
"value": [
{
"location": "295:15:295:17",
"type": "var",
"value": "assign"
}
]
},
{
"value": "fn_arg_names",
"location": "295:2:295:14",
"type": "var"
},
{
"value": [
{
"location": "295:18:295:37",
"type": "ref",
"value": [
{
"type": "var",
"value": "_function_arg_names",
"location": "295:18:295:37"
}
]
},
{
"location": "295:38:295:42",
"type": "var",
"value": "rule"
}
],
"location": "295:18:295:43",
"type": "call"
}
]
},
{
"location": "296:2:296:106",
"terms": [
{
"location": "296:12:296:14",
"type": "ref",
"value": [
{
"location": "296:12:296:14",
"type": "var",
"value": "assign"
}
]
},
{
"location": "296:2:296:11",
"type": "var",
"value": "var_names"
},
{
"location": "296:15:296:106",
"type": "setcomprehension",
"value": {
"term": {
"value": [
{
"type": "var",
"value": "var",
"location": "296:16:296:19"
},
{
"type": "string",
"value": "value",
"location": "296:20:296:25"
}
],
"location": "296:16:296:25",
"type": "ref"
},
"body": [
{
"location": "296:28:296:105",
"terms": {
"location": "296:28:296:32",
"symbols": [
{
"location": "296:33:296:105",
"type": "call",
"value": [
{
"location": "296:37:296:39",
"type": "ref",
"value": [
{
"location": "296:37:296:39",
"type": "var",
"value": "internal"
},
{
"location": "296:37:296:39",
"type": "string",
"value": "member_2"
}
]
},
{
"type": "var",
"value": "var",
"location": "296:33:296:36"
},
{
"location": "296:40:296:106",
"type": "call",
"value": [
{
"location": "296:40:296:64",
"type": "ref",
"value": [
{
"location": "296:40:296:64",
"type": "var",
"value": "find_vars_in_local_scope"
}
]
},
{
"location": "296:65:296:69",
"type": "var",
"value": "rule"
},
{
"location": "296:71:296:105",
"type": "call",
"value": [
{
"location": "296:71:296:94",
"type": "ref",
"value": [
{
"value": "util",
"location": "296:71:296:75",
"type": "var"
},
{
"location": "296:76:296:94",
"type": "string",
"value": "to_location_object"
}
]
},
{
"location": "296:95:296:103",
"type": "var",
"value": "location"
}
]
}
]
}
]
}
]
}
}
]
}
}
]
},
{
"location": "298:2:298:35",
"terms": [
{
"location": "298:8:298:10",
"type": "ref",
"value": [
{
"location": "298:8:298:10",
"type": "var",
"value": "assign"
}
]
},
{
"location": "298:2:298:7",
"type": "var",
"value": "names"
},
{
"location": "298:11:298:35",
"type": "call",
"value": [
{
"location": "298:24:298:25",
"type": "ref",
"value": [
{
"location": "298:24:298:25",
"type": "var",
"value": "or"
}
]
},
{
"location": "298:11:298:23",
"type": "var",
"value": "fn_arg_names"
},
{
"type": "var",
"value": "var_names",
"location": "298:26:298:35"
}
]
}
]
}
]
},
{
"location": "301:1:304:2",
"head": {
"value": {
"location": "301:30:304:2",
"type": "setcomprehension",
"value": {
"term": {
"value": [
{
"location": "301:31:301:34",
"type": "var",
"value": "arg"
},
{
"location": "301:35:301:40",
"type": "string",
"value": "value"
}
],
"location": "301:31:301:40",
"type": "ref"
},
"body": [
{
"location": "302:2:302:28",
"terms": {
"location": "302:2:302:6",
"symbols": [
{
"location": "302:7:302:28",
"type": "call",
"value": [
{
"location": "302:11:302:13",
"type": "ref",
"value": [
{
"type": "var",
"value": "internal",
"location": "302:11:302:13"
},
{
"location": "302:11:302:13",
"type": "string",
"value": "member_2"
}
]
},
{
"location": "302:7:302:10",
"type": "var",
"value": "arg"
},
{
"value": [
{
"location": "302:14:302:18",
"type": "var",
"value": "rule"
},
{
"location": "302:19:302:23",
"type": "string",
"value": "head"
},
{
"value": "args",
"location": "302:24:302:28",
"type": "string"
}
],
"location": "302:14:302:28",
"type": "ref"
}
]
}
]
}
},
{
"location": "303:2:303:19",
"terms": [
{
"location": "303:11:303:13",
"type": "ref",
"value": [
{
"location": "303:11:303:13",
"type": "var",
"value": "equal"
}
]
},
{
"location": "303:2:303:10",
"type": "ref",
"value": [
{
"value": "arg",
"location": "303:2:303:5",
"type": "var"
},
{
"location": "303:6:303:10",
"type": "string",
"value": "type"
}
]
},
{
"location": "303:14:303:19",
"type": "string",
"value": "var"
}
]
}
]
}
},
"location": "301:1:304:2",
"ref": [
{
"location": "301:1:301:20",
"type": "var",
"value": "_function_arg_names"
}
],
"args": [
{
"location": "301:21:301:25",
"type": "var",
"value": "rule"
}
],
"assign": true
}
},
{
"location": "310:1:315:2",
"annotations": [
{
"location": "306:1:309:82",
"scope": "rule",
"description": "similar to `find_vars_in_local_scope`, but returns all variable names in scope\nof the given location *and* the rule names present in the scope (i.e. module)\n"
}
],
"head": {
"assign": true,
"value": {
"location": "310:40:310:45",
"type": "var",
"value": "names"
},
"location": "310:1:310:45",
"ref": [
{
"location": "310:1:310:20",
"type": "var",
"value": "find_names_in_scope"
}
],
"args": [
{
"location": "310:21:310:25",
"type": "var",
"value": "rule"
},
{
"value": "location",
"location": "310:27:310:35",
"type": "var"
}
]
},
"body": [
{
"location": "311:2:311:78",
"terms": [
{
"location": "311:9:311:11",
"type": "ref",
"value": [
{
"location": "311:9:311:11",
"type": "var",
"value": "assign"
}
]
},
{
"location": "311:2:311:8",
"type": "var",
"value": "locals"
},
{
"location": "311:12:311:78",
"type": "call",
"value": [
{
"location": "311:12:311:37",
"type": "ref",
"value": [
{
"value": "find_names_in_local_scope",
"location": "311:12:311:37",
"type": "var"
}
]
},
{
"location": "311:38:311:42",
"type": "var",
"value": "rule"
},
{
"location": "311:44:311:78",
"type": "call",
"value": [
{
"location": "311:44:311:67",
"type": "ref",
"value": [
{
"location": "311:44:311:48",
"type": "var",
"value": "util"
},
{
"type": "string",
"value": "to_location_object",
"location": "311:49:311:67"
}
]
},
{
"location": "311:68:311:76",
"type": "var",
"value": "location"
}
]
}
]
}
]
},
{
"location": "314:2:314:55",
"terms": [
{
"location": "314:8:314:10",
"type": "ref",
"value": [
{
"location": "314:8:314:10",
"type": "var",
"value": "assign"
}
]
},
{
"location": "314:2:314:7",
"type": "var",
"value": "names"
},
{
"location": "314:12:314:56",
"type": "call",
"value": [
{
"location": "314:47:314:48",
"type": "ref",
"value": [
{
"location": "314:47:314:48",
"type": "var",
"value": "or"
}
]
},
{
"location": "314:12:314:47",
"type": "call",
"value": [
{
"location": "314:23:314:24",
"type": "ref",
"value": [
{
"location": "314:23:314:24",
"type": "var",
"value": "or"
}
]
},
{
"location": "314:12:314:22",
"type": "var",
"value": "rule_names"
},
{
"location": "314:25:314:45",
"type": "var",
"value": "imported_identifiers"
}
]
},
{
"type": "var",
"value": "locals",
"location": "314:49:314:55"
}
]
}
]
}
]
},
{
"location": "321:1:324:2",
"annotations": [
{
"location": "317:1:320:39",
"scope": "rule",
"description": "find all variables declared via `some` declarations (and *not* `some .. in`)\nin the scope of the given location\n"
}
],
"head": {
"assign": true,
"value": {
"location": "321:50:324:2",
"type": "setcomprehension",
"value": {
"term": {
"location": "321:51:321:65",
"type": "ref",
"value": [
{
"location": "321:51:321:59",
"type": "var",
"value": "some_var"
},
{
"location": "321:60:321:65",
"type": "string",
"value": "value"
}
]
},
"body": [
{
"location": "322:2:322:56",
"terms": {
"symbols": [
{
"location": "322:7:322:56",
"type": "call",
"value": [
{
"value": [
{
"location": "322:16:322:18",
"type": "var",
"value": "internal"
},
{
"type": "string",
"value": "member_2",
"location": "322:16:322:18"
}
],
"location": "322:16:322:18",
"type": "ref"
},
{
"location": "322:7:322:15",
"type": "var",
"value": "some_var"
},
{
"location": "322:19:322:56",
"type": "ref",
"value": [
{
"location": "322:19:322:24",
"type": "var",
"value": "found"
},
{
"location": "322:25:322:29",
"type": "string",
"value": "vars"
},
{
"location": "322:30:322:48",
"type": "call",
"value": [
{
"value": [
{
"location": "322:30:322:41",
"type": "var",
"value": "_rule_index"
}
],
"location": "322:30:322:41",
"type": "ref"
},
{
"location": "322:42:322:46",
"type": "var",
"value": "rule"
}
]
},
{
"location": "322:49:322:55",
"type": "string",
"value": "some"
}
]
}
]
}
],
"location": "322:2:322:6"
}
},
{
"location": "323:2:323:44",
"terms": [
{
"location": "323:2:323:18",
"type": "ref",
"value": [
{
"location": "323:2:323:18",
"type": "var",
"value": "_before_location"
}
]
},
{
"location": "323:19:323:23",
"type": "var",
"value": "rule"
},
{
"location": "323:25:323:33",
"type": "var",
"value": "some_var"
},
{
"location": "323:35:323:43",
"type": "var",
"value": "location"
}
]
}
]
}
},
"location": "321:1:324:2",
"ref": [
{
"location": "321:1:321:30",
"type": "var",
"value": "find_some_decl_names_in_scope"
}
],
"args": [
{
"location": "321:31:321:35",
"type": "var",
"value": "rule"
},
{
"location": "321:37:321:45",
"type": "var",
"value": "location"
}
]
}
},
{
"body": [
{
"location": "329:2:329:38",
"terms": {
"location": "329:2:329:6",
"symbols": [
{
"location": "329:7:329:38",
"type": "call",
"value": [
{
"location": "329:24:329:26",
"type": "ref",
"value": [
{
"location": "329:24:329:26",
"type": "var",
"value": "internal"
},
{
"location": "329:24:329:26",
"type": "string",
"value": "member_3"
}
]
},
{
"location": "329:7:329:17",
"type": "var",
"value": "rule_index"
},
{
"location": "329:19:329:23",
"type": "var",
"value": "rule"
},
{
"location": "329:27:329:38",
"type": "ref",
"value": [
{
"location": "329:27:329:32",
"type": "var",
"value": "input"
},
{
"location": "329:33:329:38",
"type": "string",
"value": "rules"
}
]
}
]
}
]
}
},
{
"location": "330:2:330:36",
"terms": {
"symbols": [
{
"location": "330:7:330:36",
"type": "call",
"value": [
{
"type": "ref",
"value": [
{
"location": "330:24:330:26",
"type": "var",
"value": "internal"
},
{
"location": "330:24:330:26",
"type": "string",
"value": "member_3"
}
],
"location": "330:24:330:26"
},
{
"location": "330:7:330:17",
"type": "var",
"value": "expr_index"
},
{
"value": "expr",
"location": "330:19:330:23",
"type": "var"
},
{
"location": "330:27:330:36",
"type": "ref",
"value": [
{
"type": "var",
"value": "rule",
"location": "330:27:330:31"
},
{
"location": "330:32:330:36",
"type": "string",
"value": "body"
}
]
}
]
}
],
"location": "330:2:330:6"
}
}
],
"location": "328:1:331:2",
"annotations": [
{
"location": "326:1:327:41",
"scope": "rule",
"description": "all expressions in module"
}
],
"head": {
"location": "328:1:328:38",
"ref": [
{
"location": "328:1:328:6",
"type": "var",
"value": "exprs"
},
{
"location": "328:7:328:17",
"type": "var",
"value": "rule_index"
},
{
"location": "328:19:328:29",
"type": "var",
"value": "expr_index"
}
],
"assign": true,
"value": {
"location": "328:34:328:38",
"type": "var",
"value": "expr"
}
}
}
],
"comments": [
{
"text": "IHNpbXBsZSBhc3NpZ25tZW50LCBpLmUuIGB4IDo9IDEwMGAgcmV0dXJucyBgeGA=",
"location": "13:1:13:49"
},
{
"location": "14:1:14:49",
"text": "IGFsd2F5cyByZXR1cm5zIGEgc2luZ2xlIHZhciwgYnV0IHdyYXBwZWQgaW4gYW4="
},
{
"location": "15:1:15:24",
"text": "IGFycmF5IGZvciBjb25zaXN0ZW5jeQ=="
},
{
"location": "21:1:21:41",
"text": "ICdkZXN0cnVjdHVyaW5nJyBhcnJheSBhc3NpZ25tZW50LCBpLmUu"
},
{
"location": "22:1:22:25",
"text": "IFthLCBiLCBjXSA6PSBbMSwgMiwgM10="
},
{
"location": "23:1:23:5",
"text": "IG9y"
},
{
"location": "24:1:24:27",
"text": "IHthOiBifSA6PSB7ImZvbyI6ICJiYXIifQ=="
},
{
"location": "30:1:30:56",
"text": "IHZhciBkZWNsYXJlZCB2aWEgYHNvbWVgLCBpLmUuIGBzb21lIHhgIG9yIGBzb21lIHgsIHlg"
},
{
"location": "36:1:36:56",
"text": "IHNpbmdsZSB2YXIgZGVjbGFyZWQgdmlhIGBzb21lIGluYCwgaS5lLiBgc29tZSB4IGluIHlg"
},
{
"text": "IHR3byB2YXJzIGRlY2xhcmVkIHZpYSBgc29tZSBpbmAsIGkuZS4gYHNvbWUgeCwgeSBpbiB6YA==",
"location": "44:1:44:57"
},
{
"location": "55:1:58:85",
"text": "IE1FVEFEQVRB"
},
{
"location": "56:1:56:17",
"text": "IGRlc2NyaXB0aW9uOiB8"
},
{
"location": "57:1:57:58",
"text": "ICAgZmluZCB2YXJzIGxpa2UgaW5wdXRbeF0uZm9vW3ldIHdoZXJlIHggYW5kIHkgYXJlIHZhcnM="
},
{
"location": "58:1:58:85",
"text": "ICAgbm90ZTogdmFsdWUudHlwZSA9PSAicmVmIiBjaGVjayBtdXN0IGhhdmUgYmVlbiBkb25lIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24="
},
{
"location": "66:1:66:63",
"text": "IG9uZSBvciB0d28gdmFycyBkZWNsYXJlZCB2aWEgYGV2ZXJ5YCwgaS5lLiBgZXZlcnkgeCBpbiB5IHt9YA=="
},
{
"location": "67:1:67:40",
"text": "IG9yIGBldmVyeWAsIGkuZS4gYGV2ZXJ5IHgsIHkgaW4geSB7fWA="
},
{
"location": "81:1:84:64",
"text": "IE1FVEFEQVRB"
},
{
"location": "82:1:82:17",
"text": "IGRlc2NyaXB0aW9uOiB8"
},
{
"location": "83:1:83:84",
"text": "ICAgdHJhdmVyc2VzIGFsbCBub2RlcyBpbiBwcm92aWRlZCB0ZXJtcyAodXNpbmcgYHdhbGtgKSwgYW5kIHJldHVybnMgYW4gYXJyYXkgd2l0aA=="
},
{
"text": "ICAgYWxsIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiB0ZXJtcywgaSxlIFt4LCB5XSBvciB7eDogeX0sIGV0Yy4=",
"location": "84:1:84:64"
},
{
"location": "91:1:94:70",
"text": "IE1FVEFEQVRB"
},
{
"location": "92:1:92:17",
"text": "IGRlc2NyaXB0aW9uOiB8"
},
{
"location": "93:1:93:91",
"text": "ICAgdHJhdmVyc2VzIGFsbCBub2RlcyBpbiBwcm92aWRlZCB0ZXJtcyAodXNpbmcgYHdhbGtgKSwgYW5kIHJldHVybnMgdHJ1ZSBpZiBhbnkgdmFyaWFibGU="
},
{
"location": "94:1:94:70",
"text": "ICAgaXMgZm91bmQgaW4gdGVybXMsIHdpdGggZWFybHkgZXhpdCAoYXMgb3Bwb3NlZCB0byBmaW5kX3Rlcm1fdmFycyk="
},
{
"location": "110:32:110:65",
"text": "IHJlZ2FsIGlnbm9yZTpleHRlcm5hbC1yZWZlcmVuY2U="
},
{
"location": "121:1:121:77",
"text": "IGA9YCBpc24ndCBuZWNlc3NhcmlseSBhc3NpZ25tZW50LCBhbmQgb25seSBjb25zaWRlcmluZyB0aGUgdmFyaWFibGUgb24gdGhl"
},
{
"location": "122:1:122:77",
"text": "IGxlZnQtaGFuZCBzaWRlIGlzIGVxdWFsbHkgZHViaW91cywgYnV0IHdlJ2xsIHRyZWF0IGB4ID0gMWAgYXMgYHggOj0gMWAgZm9y"
},
{
"location": "123:1:123:79",
"text": "IHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gdW50aWwgd2UgaGF2ZSBhIG1vcmUgcm9idXN0IHdheSBvZiBkZWFsaW5nIHdpdGg="
},
{
"text": "IHVuaWZpY2F0aW9u",
"location": "124:1:124:14"
},
{
"location": "161:22:161:55",
"text": "IHJlZ2FsIGlnbm9yZTpleHRlcm5hbC1yZWZlcmVuY2U="
},
{
"location": "165:1:169:44",
"text": "IE1FVEFEQVRB"
},
{
"location": "166:1:166:17",
"text": "IGRlc2NyaXB0aW9uOiB8"
},
{
"location": "167:1:167:86",
"text": "ICAgdHJhdmVyc2VzIGFsbCBub2RlcyB1bmRlciBwcm92aWRlZCBub2RlICh1c2luZyBgd2Fsa2ApLCBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRo"
},
{
"location": "168:1:168:86",
"text": "ICAgYWxsIHZhcmlhYmxlcyBkZWNsYXJlZCB2aWEgYXNzaWdubWVudCAoOj0pLCBgc29tZWAsIGBldmVyeWAgYW5kIGluIGNvbXByZWhlbnNpb25z"
},
{
"location": "169:1:169:44",
"text": "ICAgREVQUkVDQVRFRDogdXNlcyBhc3QuZm91bmQudmFycyBpbnN0ZWFk"
},
{
"location": "176:1:176:85",
"text": "IGhhY2sgdG8gd29yayBhcm91bmQgdGhlIGRpZmZlcmVudCBpbnB1dCBtb2RlbHMgb2YgbGludGluZyB2cy4gdGhlIGxzcCBwYWNrYWdlLi4gd2U="
},
{
"location": "177:1:177:49",
"text": "IHNob3VsZCBwcm9iYWJseSBjb25zaWRlciBzb21ldGhpbmcgbW9yZSByb2J1c3Q="
},
{
"location": "182:1:192:10",
"text": "IE1FVEFEQVRBOg=="
},
{
"text": "IGRlc2NyaXB0aW9uOiB8",
"location": "183:1:183:17"
},
{
"location": "184:1:184:88",
"text": "ICAgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHZhcmlhYmxlcyBmb3VuZCBpbiB0aGUgaW5wdXQgQVNULCBrZXllZCBmaXJzdCBieSB0aGUgaW5kZXggb2Y="
},
{
"location": "185:1:185:88",
"text": "ICAgdGhlIHJ1bGUgd2hlcmUgdGhlIHZhcmlhYmxlcyB3ZXJlIGZvdW5kIChhcyBhIG51bWVyaWMgc3RyaW5nKSwgYW5kIHRoZW4gdGhlIGNvbnRleHQ="
},
{
"location": "186:1:186:43",
"text": "ICAgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCB3aWxsIGJlIG9uZSBvZjo="
},
{
"location": "187:1:187:11",
"text": "ICAgLSB0ZXJt"
},
{
"text": "ICAgLSBhc3NpZ24=",
"location": "188:1:188:13"
},
{
"location": "189:1:189:12",
"text": "ICAgLSBldmVyeQ=="
},
{
"location": "190:1:190:11",
"text": "ICAgLSBzb21l"
},
{
"location": "191:1:191:13",
"text": "ICAgLSBzb21laW4="
},
{
"location": "192:1:192:10",
"text": "ICAgLSByZWY="
},
{
"location": "196:2:196:92",
"text": "IGNvbnZlcnRpbmcgdG8gc3RyaW5nIHVudGlsIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXBvbGljeS1hZ2VudC9vcGEvaXNzdWVzLzY3MzYgaXMgZml4ZWQ="
},
{
"location": "205:1:206:41",
"text": "IE1FVEFEQVRB"
},
{
"location": "206:1:206:41",
"text": "IGRlc2NyaXB0aW9uOiBhbGwgcmVmcyBmb3VuZGQgaW4gbW9kdWxl"
},
{
"location": "210:2:210:92",
"text": "IGNvbnZlcnRpbmcgdG8gc3RyaW5nIHVudGlsIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXBvbGljeS1hZ2VudC9vcGEvaXNzdWVzLzY3MzYgaXMgZml4ZWQ="
},
{
"location": "218:1:219:44",
"text": "IE1FVEFEQVRB"
},
{
"location": "219:1:219:44",
"text": "IGRlc2NyaXB0aW9uOiBhbGwgc3ltYm9scyBmb3VuZGQgaW4gbW9kdWxl"
},
{
"location": "223:2:223:92",
"text": "IGNvbnZlcnRpbmcgdG8gc3RyaW5nIHVudGlsIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXBvbGljeS1hZ2VudC9vcGEvaXNzdWVzLzY3MzYgaXMgZml4ZWQ="
},
{
"location": "229:1:230:50",
"text": "IE1FVEFEQVRB"
},
{
"location": "230:1:230:50",
"text": "IGRlc2NyaXB0aW9uOiBhbGwgY29tcHJlaGVuc2lvbnMgZm91bmQgaW4gbW9kdWxl"
},
{
"location": "234:2:234:92",
"text": "IGNvbnZlcnRpbmcgdG8gc3RyaW5nIHVudGlsIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXBvbGljeS1hZ2VudC9vcGEvaXNzdWVzLzY3MzYgaXMgZml4ZWQ="
},
{
"location": "242:1:247:28",
"text": "IE1FVEFEQVRB"
},
{
"location": "243:1:243:17",
"text": "IGRlc2NyaXB0aW9uOiB8"
},
{
"location": "244:1:244:71",
"text": "ICAgZmluZHMgYWxsIHZhcnMgZGVjbGFyZWQgaW4gYHJ1bGVgICpiZWZvcmUqIHRoZSBgbG9jYXRpb25gIHByb3ZpZGVk"
},
{
"location": "245:1:245:72",
"text": "ICAgbm90ZTogdGhpcyBpc24ndCAxMDAlIGFjY3VyYXRlLCBhcyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IGA9YA=="
},
{
"location": "246:1:246:77",
"text": "ICAgYXNzaWdubWVudHMgLyB1bmlmaWNhdGlvbiwgYnV0IGl0J3MgbGlrZWx5IGdvb2QgZW5vdWdoIHNpbmNlIG90aGVyIHJ1bGVz"
},
{
"location": "247:1:247:28",
"text": "ICAgcmVjb21tZW5kIGFnYWluc3QgdGhvc2U="
},
{
"location": "249:45:249:78",
"text": "IHJlZ2FsIGlnbm9yZTpleHRlcm5hbC1yZWZlcmVuY2U="
},
{
"location": "264:1:264:62",
"text": "IHNwZWNpYWwgY2FzZSDigJQgdGhlIHZhbHVlIGxvY2F0aW9uIG9mIHRoZSBydWxlIGhlYWQgInNlZXMi"
},
{
"location": "265:1:265:48",
"text": "IGFsbCBsb2NhbCB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIHJ1bGUgYm9keQ=="
},
{
"location": "292:1:293:77",
"text": "IE1FVEFEQVRB"
},
{
"location": "293:1:293:77",
"text": "IGRlc2NyaXB0aW9uOiBmaW5kICpvbmx5KiBuYW1lcyBpbiB0aGUgbG9jYWwgc2NvcGUsIGFuZCBub3QgZS5nLiBydWxlIG5hbWVz"
},
{
"location": "306:1:309:82",
"text": "IE1FVEFEQVRB"
},
{
"location": "307:1:307:17",
"text": "IGRlc2NyaXB0aW9uOiB8"
},
{
"location": "308:1:308:83",
"text": "ICAgc2ltaWxhciB0byBgZmluZF92YXJzX2luX2xvY2FsX3Njb3BlYCwgYnV0IHJldHVybnMgYWxsIHZhcmlhYmxlIG5hbWVzIGluIHNjb3Bl"
},
{
"location": "309:1:309:82",
"text": "ICAgb2YgdGhlIGdpdmVuIGxvY2F0aW9uICphbmQqIHRoZSBydWxlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHNjb3BlIChpLmUuIG1vZHVsZSk="
},
{
"location": "313:2:313:36",
"text": "IHBhcmVucyBiZWxvdyBhZGRlZCBieSBvcGEtZm10IDop"
},
{
"location": "317:1:320:39",
"text": "IE1FVEFEQVRB"
},
{
"location": "318:1:318:17",
"text": "IGRlc2NyaXB0aW9uOiB8"
},
{
"location": "319:1:319:81",
"text": "ICAgZmluZCBhbGwgdmFyaWFibGVzIGRlY2xhcmVkIHZpYSBgc29tZWAgZGVjbGFyYXRpb25zIChhbmQgKm5vdCogYHNvbWUgLi4gaW5gKQ=="
},
{
"location": "320:1:320:39",
"text": "ICAgaW4gdGhlIHNjb3BlIG9mIHRoZSBnaXZlbiBsb2NhdGlvbg=="
},
{
"location": "322:57:322:90",
"text": "IHJlZ2FsIGlnbm9yZTpleHRlcm5hbC1yZWZlcmVuY2U="
},
{
"location": "326:1:327:41",
"text": "IE1FVEFEQVRB"
},
{
"location": "327:1:327:41",
"text": "IGRlc2NyaXB0aW9uOiBhbGwgZXhwcmVzc2lvbnMgaW4gbW9kdWxl"
}
],
"regal": {
"file": {
"name": "bundle/regal/ast/search.rego",
"lines": [
"package regal.ast",
"",
"import rego.v1",
"",
"import data.regal.util",
"",
"_find_nested_vars(obj) := [value |",
"\twalk(obj, [_, value])",
"\tvalue.type == \"var\"",
"\tindexof(value.value, \"$\") == -1",
"]",
"",
"# simple assignment, i.e. `x := 100` returns `x`",
"# always returns a single var, but wrapped in an",
"# array for consistency",
"_find_assign_vars(value) := var if {",
"\tvalue[1].type == \"var\"",
"\tvar := [value[1]]",
"}",
"",
"# 'destructuring' array assignment, i.e.",
"# [a, b, c] := [1, 2, 3]",
"# or",
"# {a: b} := {\"foo\": \"bar\"}",
"_find_assign_vars(value) := vars if {",
"\tvalue[1].type in {\"array\", \"object\"}",
"\tvars := _find_nested_vars(value[1])",
"}",
"",
"# var declared via `some`, i.e. `some x` or `some x, y`",
"_find_some_decl_vars(value) := [v |",
"\tsome v in value",
"\tv.type == \"var\"",
"]",
"",
"# single var declared via `some in`, i.e. `some x in y`",
"_find_some_in_decl_vars(value) := vars if {",
"\tarr := value[0].value",
"\tcount(arr) == 3",
"",
"\tvars := _find_nested_vars(arr[1])",
"}",
"",
"# two vars declared via `some in`, i.e. `some x, y in z`",
"_find_some_in_decl_vars(value) := vars if {",
"\tarr := value[0].value",
"\tcount(arr) == 4",
"",
"\tvars := [v |",
"\t\tsome i in [1, 2]",
"\t\tsome v in _find_nested_vars(arr[i])",
"\t]",
"}",
"",
"# METADATA",
"# description: |",
"# find vars like input[x].foo[y] where x and y are vars",
"# note: value.type == \"ref\" check must have been done before calling this function",
"find_ref_vars(value) := [var |",
"\tsome i, var in value.value",
"",
"\ti > 0",
"\tvar.type == \"var\"",
"]",
"",
"# one or two vars declared via `every`, i.e. `every x in y {}`",
"# or `every`, i.e. `every x, y in y {}`",
"_find_every_vars(value) := vars if {",
"\tkey_var := [value.key |",
"\t\tvalue.key.type == \"var\"",
"\t\tindexof(value.key.value, \"$\") == -1",
"\t]",
"\tval_var := [value.value |",
"\t\tvalue.value.type == \"var\"",
"\t\tindexof(value.value.value, \"$\") == -1",
"\t]",
"",
"\tvars := array.concat(key_var, val_var)",
"}",
"",
"# METADATA",
"# description: |",
"# traverses all nodes in provided terms (using `walk`), and returns an array with",
"# all variables declared in terms, i,e [x, y] or {x: y}, etc.",
"find_term_vars(terms) := [term |",
"\twalk(terms, [_, term])",
"",
"\tterm.type == \"var\"",
"]",
"",
"# METADATA",
"# description: |",
"# traverses all nodes in provided terms (using `walk`), and returns true if any variable",
"# is found in terms, with early exit (as opposed to find_term_vars)",
"has_term_var(terms) if {",
"\twalk(terms, [_, term])",
"",
"\tterm.type == \"var\"",
"}",
"",
"_find_vars(value, last) := {\"term\": find_term_vars(function_ret_args(fn_name, value))} if {",
"\tlast == \"terms\"",
"\tvalue[0].type == \"ref\"",
"\tvalue[0].value[0].type == \"var\"",
"\tvalue[0].value[0].value != \"assign\"",
"",
"\tfn_name := ref_to_string(value[0].value)",
"",
"\tnot contains(fn_name, \"$\")",
"\tfn_name in all_function_names # regal ignore:external-reference",
"\tfunction_ret_in_args(fn_name, value)",
"}",
"",
"_find_vars(value, last) := {\"assign\": _find_assign_vars(value)} if {",
"\tlast == \"terms\"",
"\tvalue[0].type == \"ref\"",
"\tvalue[0].value[0].type == \"var\"",
"\tvalue[0].value[0].value == \"assign\"",
"}",
"",
"# `=` isn't necessarily assignment, and only considering the variable on the",
"# left-hand side is equally dubious, but we'll treat `x = 1` as `x := 1` for",
"# the purpose of this function until we have a more robust way of dealing with",
"# unification",
"_find_vars(value, last) := {\"assign\": _find_assign_vars(value)} if {",
"\tlast == \"terms\"",
"\tvalue[0].type == \"ref\"",
"\tvalue[0].value[0].type == \"var\"",
"\tvalue[0].value[0].value == \"eq\"",
"}",
"",
"_find_vars(value, _) := {\"ref\": find_ref_vars(value)} if value.type == \"ref\"",
"",
"_find_vars(value, last) := {\"somein\": _find_some_in_decl_vars(value)} if {",
"\tlast == \"symbols\"",
"\tvalue[0].type == \"call\"",
"}",
"",
"_find_vars(value, last) := {\"some\": _find_some_decl_vars(value)} if {",
"\tlast == \"symbols\"",
"\tvalue[0].type != \"call\"",
"}",
"",
"_find_vars(value, last) := {\"every\": _find_every_vars(value)} if {",
"\tlast == \"terms\"",
"\tvalue.domain",
"}",
"",
"_find_vars(value, last) := {\"args\": arg_vars} if {",
"\tlast == \"args\"",
"",
"\targ_vars := [arg |",
"\t\tsome arg in value",
"\t\targ.type == \"var\"",
"\t]",
"",
"\tcount(arg_vars) > 0",
"}",
"",
"_rule_index(rule) := sprintf(\"%d\", [i]) if {",
"\tsome i, r in _rules # regal ignore:external-reference",
"\tr == rule",
"}",
"",
"# METADATA",
"# description: |",
"# traverses all nodes under provided node (using `walk`), and returns an array with",
"# all variables declared via assignment (:=), `some`, `every` and in comprehensions",
"# DEPRECATED: uses ast.found.vars instead",
"find_vars(node) := [var |",
"\twalk(node, [path, value])",
"",
"\tvar := _find_vars(value, regal.last(path))[_][_]",
"]",
"",
"# hack to work around the different input models of linting vs. the lsp package.. we",
"# should probably consider something more robust",
"_rules := input.rules",
"",
"_rules := data.workspace.parsed[input.regal.file.uri].rules if not input.rules",
"",
"# METADATA:",
"# description: |",
"# object containing all variables found in the input AST, keyed first by the index of",
"# the rule where the variables were found (as a numeric string), and then the context",
"# of the variable, which will be one of:",
"# - term",
"# - assign",
"# - every",
"# - some",
"# - somein",
"# - ref",
"found.vars[rule_index][context] contains var if {",
"\tsome i, rule in _rules",
"",
"\t# converting to string until https://github.com/open-policy-agent/opa/issues/6736 is fixed",
"\trule_index := sprintf(\"%d\", [i])",
"",
"\twalk(rule, [path, value])",
"",
"\tsome context, vars in _find_vars(value, regal.last(path))",
"\tsome var in vars",
"}",
"",
"# METADATA",
"# description: all refs foundd in module",
"found.refs[rule_index] contains value if {",
"\tsome i, rule in _rules",
"",
"\t# converting to string until https://github.com/open-policy-agent/opa/issues/6736 is fixed",
"\trule_index := sprintf(\"%d\", [i])",
"",
"\twalk(rule, [_, value])",
"",
"\tis_ref(value)",
"}",
"",
"# METADATA",
"# description: all symbols foundd in module",
"found.symbols[rule_index] contains value.symbols if {",
"\tsome i, rule in _rules",
"",
"\t# converting to string until https://github.com/open-policy-agent/opa/issues/6736 is fixed",
"\trule_index := sprintf(\"%d\", [i])",
"",
"\twalk(rule, [_, value])",
"}",
"",
"# METADATA",
"# description: all comprehensions found in module",
"found.comprehensions[rule_index] contains value if {",
"\tsome i, rule in _rules",
"",
"\t# converting to string until https://github.com/open-policy-agent/opa/issues/6736 is fixed",
"\trule_index := sprintf(\"%d\", [i])",
"",
"\twalk(rule, [_, value])",
"",
"\tvalue.type in {\"arraycomprehension\", \"objectcomprehension\", \"setcomprehension\"}",
"}",
"",
"# METADATA",
"# description: |",
"# finds all vars declared in `rule` *before* the `location` provided",
"# note: this isn't 100% accurate, as it doesn't take into account `=`",
"# assignments / unification, but it's likely good enough since other rules",
"# recommend against those",
"find_vars_in_local_scope(rule, location) := [var |",
"\tvar := found.vars[_rule_index(rule)][_][_] # regal ignore:external-reference",
"",
"\tnot is_wildcard(var)",
"\t_before_location(rule, var, util.to_location_object(location))",
"]",
"",
"_end_location(location) := end if {",
"\tloc := util.to_location_object(location)",
"\tlines := split(loc.text, \"\\n\")",
"\tend := {",
"\t\t\"row\": (loc.row + count(lines)) - 1,",
"\t\t\"col\": loc.col + count(regal.last(lines)),",
"\t}",
"}",
"",
"# special case — the value location of the rule head \"sees\"",
"# all local variables declared in the rule body",
"_before_location(rule, _, location) if {",
"\tloc := util.to_location_object(location)",
"",
"\tvalue_start := util.to_location_object(rule.head.value.location)",
"",
"\tloc.row >= value_start.row",
"\tloc.col >= value_start.col",
"",
"\tvalue_end := _end_location(util.to_location_object(rule.head.value.location))",
"",
"\tloc.row <= value_end.row",
"\tloc.col <= value_end.col",
"}",
"",
"_before_location(_, var, location) if {",
"\tutil.to_location_object(var.location).row < util.to_location_object(location).row",
"}",
"",
"_before_location(_, var, location) if {",
"\tvar_loc := util.to_location_object(var.location)",
"\tloc := util.to_location_object(location)",
"",
"\tvar_loc.row == loc.row",
"\tvar_loc.col < loc.col",
"}",
"",
"# METADATA",
"# description: find *only* names in the local scope, and not e.g. rule names",
"find_names_in_local_scope(rule, location) := names if {",
"\tfn_arg_names := _function_arg_names(rule)",
"\tvar_names := {var.value | some var in find_vars_in_local_scope(rule, util.to_location_object(location))}",
"",
"\tnames := fn_arg_names | var_names",
"}",
"",
"_function_arg_names(rule) := {arg.value |",
"\tsome arg in rule.head.args",
"\targ.type == \"var\"",
"}",
"",
"# METADATA",
"# description: |",
"# similar to `find_vars_in_local_scope`, but returns all variable names in scope",
"# of the given location *and* the rule names present in the scope (i.e. module)",
"find_names_in_scope(rule, location) := names if {",
"\tlocals := find_names_in_local_scope(rule, util.to_location_object(location))",
"",
"\t# parens below added by opa-fmt :)",
"\tnames := (rule_names | imported_identifiers) | locals",
"}",
"",
"# METADATA",
"# description: |",
"# find all variables declared via `some` declarations (and *not* `some .. in`)",
"# in the scope of the given location",
"find_some_decl_names_in_scope(rule, location) := {some_var.value |",
"\tsome some_var in found.vars[_rule_index(rule)][\"some\"] # regal ignore:external-reference",
"\t_before_location(rule, some_var, location)",
"}",
"",
"# METADATA",
"# description: all expressions in module",
"exprs[rule_index][expr_index] := expr if {",
"\tsome rule_index, rule in input.rules",
"\tsome expr_index, expr in rule.body",
"}",
""
],
"abs": "/Users/anderseknert/git/styra/regal/bundle/regal/ast/search.rego"
},
"environment": {
"path_separator": "/"
}
}
}
package p
import rego.v1
r := count(refs)
refs contains value if {
walk(input, [_, value])
value.type == "ref"
}
refs contains value if {
walk(input, [_, value])
value[0].type == "ref"
}
# refs contains value if {
# walk(input, [_, value])
# is_ref(value)
# }
is_ref(value) if value.type == "ref"
is_ref(value) if value[0].type == "ref"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment