tree-sitter-batch 0.4.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/grammar.js +13 -11
- package/package.json +4 -2
- package/prebuilds/darwin-arm64/tree-sitter-batch.node +0 -0
- package/prebuilds/darwin-x64/tree-sitter-batch.node +0 -0
- package/prebuilds/linux-arm64/tree-sitter-batch.node +0 -0
- package/prebuilds/linux-x64/tree-sitter-batch.node +0 -0
- package/prebuilds/win32-arm64/tree-sitter-batch.node +0 -0
- package/prebuilds/win32-x64/tree-sitter-batch.node +0 -0
- package/queries/highlights.scm +5 -0
- package/src/grammar.json +129 -61
- package/src/node-types.json +40 -0
- package/src/parser.c +2080 -1896
- package/src/tree_sitter/array.h +110 -71
- package/src/tree_sitter/parser.h +27 -7
- package/tree-sitter-batch.wasm +0 -0
- package/tree-sitter.json +1 -1
package/README.md
CHANGED
|
@@ -100,6 +100,17 @@ pip install tree-sitter-batch
|
|
|
100
100
|
import tree_sitter_batch "github.com/wharflab/tree-sitter-batch/bindings/go"
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
+
The root package also exports the bundled `queries/highlights.scm` via `go:embed`:
|
|
104
|
+
|
|
105
|
+
```go
|
|
106
|
+
import batch "github.com/wharflab/tree-sitter-batch"
|
|
107
|
+
|
|
108
|
+
lang := batch.GetLanguage()
|
|
109
|
+
query, _ := batch.GetHighlightsQuery()
|
|
110
|
+
// or access the raw .scm source:
|
|
111
|
+
// raw := batch.HighlightsQuery
|
|
112
|
+
```
|
|
113
|
+
|
|
103
114
|
## Usage
|
|
104
115
|
|
|
105
116
|
### Node.js
|
package/grammar.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const ci = (word) => new RegExp(word.split('').map((c) => /[a-zA-Z]/.test(c) ? `[${c.toLowerCase()}${c.toUpperCase()}]` : c).join(''));
|
|
2
2
|
const kw = (word) => token(prec(10, ci(word)));
|
|
3
|
-
const operand = ($) => [$.cond_exec, $.pipe_stmt, $.cmd, $.parenthesized];
|
|
3
|
+
const operand = ($) => [$.cond_exec, $.pipe_stmt, $.redirect_stmt, $.call_stmt, $.cmd, $.parenthesized];
|
|
4
4
|
|
|
5
5
|
export default grammar({
|
|
6
6
|
name: 'batch',
|
|
@@ -83,21 +83,23 @@ export default grammar({
|
|
|
83
83
|
kw('in'), '(', optional($.for_set), ')', kw('do'),
|
|
84
84
|
choice($.parenthesized, $.cmd),
|
|
85
85
|
)),
|
|
86
|
-
for_options: () => token(prec(10, choice(ci('/d'), seq(ci('/r'), optional(seq(/[ \t]+/, /[^\s]
|
|
86
|
+
for_options: () => token(prec(10, choice(ci('/d'), seq(ci('/r'), optional(seq(/[ \t]+/, /(%[^\s%]|[^\s%])+%?/))), ci('/l'), seq(ci('/f'), optional(seq(/[ \t]+/, '"', /[^"]*/, '"')))))),
|
|
87
87
|
for_variable: () => token(seq('%%', optional('~'), /[a-zA-Z]/)),
|
|
88
88
|
for_set: () => /[^)\r\n]+/,
|
|
89
89
|
parenthesized: ($) => seq('(', repeat(choice(seq($._stmt, /\r?\n/), /\r?\n/)), optional($._stmt), ')'),
|
|
90
|
-
redirect_stmt: ($) => prec.right(4, seq(choice($.cmd, $.parenthesized), $.redirection)),
|
|
91
|
-
redirection: ($) =>
|
|
92
|
-
optional(/[0-2]/), $.redirect_op, $.redirect_target
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
redirect_stmt: ($) => prec.right(4, seq(choice($.call_stmt, $.cmd, $.parenthesized), $.redirection)),
|
|
91
|
+
redirection: ($) => {
|
|
92
|
+
const file_redir = seq(optional(/[0-2]/), $.redirect_op, $.redirect_target);
|
|
93
|
+
const one_redir = choice(file_redir, $.fd_redirect);
|
|
94
|
+
return prec.right(repeat1(one_redir));
|
|
95
|
+
},
|
|
96
|
+
fd_redirect: () => token(choice('2>&1', '>&1')),
|
|
97
|
+
redirect_op: () => token(choice('2>>', '2>', '>>', '>', '<')),
|
|
96
98
|
redirect_target: () => token(choice(ci('nul'), ci('con'), /[^\s|&><\r\n]+/)),
|
|
97
|
-
pipe_stmt: ($) => prec.left(3, seq(choice($.cmd, $.parenthesized), '|', choice($.cmd, $.parenthesized))),
|
|
99
|
+
pipe_stmt: ($) => prec.left(3, seq(choice($.pipe_stmt, $.redirect_stmt, $.call_stmt, $.cmd, $.parenthesized), '|', choice($.redirect_stmt, $.call_stmt, $.cmd, $.parenthesized))),
|
|
98
100
|
cond_exec: ($) => choice(
|
|
99
|
-
prec.left(1, seq(choice(...operand($)), '&&', choice($.cmd, $.parenthesized))),
|
|
100
|
-
prec.left(1, seq(choice(...operand($)), '||', choice($.cmd, $.parenthesized))),
|
|
101
|
+
prec.left(1, seq(choice(...operand($)), '&&', choice($.pipe_stmt, $.redirect_stmt, $.call_stmt, $.cmd, $.parenthesized))),
|
|
102
|
+
prec.left(1, seq(choice(...operand($)), '||', choice($.pipe_stmt, $.redirect_stmt, $.call_stmt, $.cmd, $.parenthesized))),
|
|
101
103
|
),
|
|
102
104
|
command_sep: ($) => prec.left(0, seq(
|
|
103
105
|
choice($.command_sep, ...operand($)),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tree-sitter-batch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "A Windows Batch/CMD grammar for tree-sitter",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"eslint": "^9.15.0",
|
|
38
38
|
"eslint-config-treesitter": "^1.0.2",
|
|
39
39
|
"prebuildify": "^6.0.1",
|
|
40
|
-
"tree-sitter-cli": "0.24.7"
|
|
40
|
+
"tree-sitter-cli": "0.24.7",
|
|
41
|
+
"tree-sitter-go-types": "^0.1.0"
|
|
41
42
|
},
|
|
42
43
|
"peerDependencies": {
|
|
43
44
|
"tree-sitter": ">=0.25.0"
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
"install": "node-gyp-build",
|
|
52
53
|
"prestart": "tree-sitter build --wasm",
|
|
53
54
|
"start": "tree-sitter playground",
|
|
55
|
+
"generate": "tree-sitter generate && tree-sitter-go-types",
|
|
54
56
|
"lint": "eslint grammar.js",
|
|
55
57
|
"test": "node --test bindings/node/*_test.js"
|
|
56
58
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/queries/highlights.scm
CHANGED
|
@@ -25,10 +25,15 @@
|
|
|
25
25
|
; Operators
|
|
26
26
|
(comparison_op) @operator
|
|
27
27
|
(redirect_op) @operator
|
|
28
|
+
(fd_redirect) @operator
|
|
28
29
|
|
|
29
30
|
; Commands
|
|
30
31
|
(command_name) @function
|
|
31
32
|
|
|
33
|
+
; CMD pseudo/dynamic environment variables
|
|
34
|
+
((variable_reference) @variable.builtin
|
|
35
|
+
(#match? @variable.builtin "(?i)^[%!](CD|ERRORLEVEL|DATE|TIME|RANDOM|CMDCMDLINE|CMDEXTVERSION|HIGHESTNUMANODENUMBER|__APPDIR__|__CD__)[%!]$"))
|
|
36
|
+
|
|
32
37
|
; Variables
|
|
33
38
|
(variable_reference) @variable
|
|
34
39
|
|
package/src/grammar.json
CHANGED
|
@@ -1141,7 +1141,7 @@
|
|
|
1141
1141
|
},
|
|
1142
1142
|
{
|
|
1143
1143
|
"type": "PATTERN",
|
|
1144
|
-
"value": "[^\\s]
|
|
1144
|
+
"value": "(%[^\\s%]|[^\\s%])+%?"
|
|
1145
1145
|
}
|
|
1146
1146
|
]
|
|
1147
1147
|
},
|
|
@@ -1289,6 +1289,10 @@
|
|
|
1289
1289
|
{
|
|
1290
1290
|
"type": "CHOICE",
|
|
1291
1291
|
"members": [
|
|
1292
|
+
{
|
|
1293
|
+
"type": "SYMBOL",
|
|
1294
|
+
"name": "call_stmt"
|
|
1295
|
+
},
|
|
1292
1296
|
{
|
|
1293
1297
|
"type": "SYMBOL",
|
|
1294
1298
|
"name": "cmd"
|
|
@@ -1310,65 +1314,44 @@
|
|
|
1310
1314
|
"type": "PREC_RIGHT",
|
|
1311
1315
|
"value": 0,
|
|
1312
1316
|
"content": {
|
|
1313
|
-
"type": "
|
|
1314
|
-
"
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
{
|
|
1349
|
-
"type": "BLANK"
|
|
1350
|
-
}
|
|
1351
|
-
]
|
|
1352
|
-
},
|
|
1353
|
-
{
|
|
1354
|
-
"type": "SYMBOL",
|
|
1355
|
-
"name": "redirect_op"
|
|
1356
|
-
},
|
|
1357
|
-
{
|
|
1358
|
-
"type": "SYMBOL",
|
|
1359
|
-
"name": "redirect_target"
|
|
1360
|
-
}
|
|
1361
|
-
]
|
|
1362
|
-
},
|
|
1363
|
-
{
|
|
1364
|
-
"type": "BLANK"
|
|
1365
|
-
}
|
|
1366
|
-
]
|
|
1367
|
-
}
|
|
1368
|
-
]
|
|
1317
|
+
"type": "REPEAT1",
|
|
1318
|
+
"content": {
|
|
1319
|
+
"type": "CHOICE",
|
|
1320
|
+
"members": [
|
|
1321
|
+
{
|
|
1322
|
+
"type": "SEQ",
|
|
1323
|
+
"members": [
|
|
1324
|
+
{
|
|
1325
|
+
"type": "CHOICE",
|
|
1326
|
+
"members": [
|
|
1327
|
+
{
|
|
1328
|
+
"type": "PATTERN",
|
|
1329
|
+
"value": "[0-2]"
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"type": "BLANK"
|
|
1333
|
+
}
|
|
1334
|
+
]
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"type": "SYMBOL",
|
|
1338
|
+
"name": "redirect_op"
|
|
1339
|
+
},
|
|
1340
|
+
{
|
|
1341
|
+
"type": "SYMBOL",
|
|
1342
|
+
"name": "redirect_target"
|
|
1343
|
+
}
|
|
1344
|
+
]
|
|
1345
|
+
},
|
|
1346
|
+
{
|
|
1347
|
+
"type": "SYMBOL",
|
|
1348
|
+
"name": "fd_redirect"
|
|
1349
|
+
}
|
|
1350
|
+
]
|
|
1351
|
+
}
|
|
1369
1352
|
}
|
|
1370
1353
|
},
|
|
1371
|
-
"
|
|
1354
|
+
"fd_redirect": {
|
|
1372
1355
|
"type": "TOKEN",
|
|
1373
1356
|
"content": {
|
|
1374
1357
|
"type": "CHOICE",
|
|
@@ -1380,7 +1363,15 @@
|
|
|
1380
1363
|
{
|
|
1381
1364
|
"type": "STRING",
|
|
1382
1365
|
"value": ">&1"
|
|
1383
|
-
}
|
|
1366
|
+
}
|
|
1367
|
+
]
|
|
1368
|
+
}
|
|
1369
|
+
},
|
|
1370
|
+
"redirect_op": {
|
|
1371
|
+
"type": "TOKEN",
|
|
1372
|
+
"content": {
|
|
1373
|
+
"type": "CHOICE",
|
|
1374
|
+
"members": [
|
|
1384
1375
|
{
|
|
1385
1376
|
"type": "STRING",
|
|
1386
1377
|
"value": "2>>"
|
|
@@ -1433,6 +1424,18 @@
|
|
|
1433
1424
|
{
|
|
1434
1425
|
"type": "CHOICE",
|
|
1435
1426
|
"members": [
|
|
1427
|
+
{
|
|
1428
|
+
"type": "SYMBOL",
|
|
1429
|
+
"name": "pipe_stmt"
|
|
1430
|
+
},
|
|
1431
|
+
{
|
|
1432
|
+
"type": "SYMBOL",
|
|
1433
|
+
"name": "redirect_stmt"
|
|
1434
|
+
},
|
|
1435
|
+
{
|
|
1436
|
+
"type": "SYMBOL",
|
|
1437
|
+
"name": "call_stmt"
|
|
1438
|
+
},
|
|
1436
1439
|
{
|
|
1437
1440
|
"type": "SYMBOL",
|
|
1438
1441
|
"name": "cmd"
|
|
@@ -1450,6 +1453,14 @@
|
|
|
1450
1453
|
{
|
|
1451
1454
|
"type": "CHOICE",
|
|
1452
1455
|
"members": [
|
|
1456
|
+
{
|
|
1457
|
+
"type": "SYMBOL",
|
|
1458
|
+
"name": "redirect_stmt"
|
|
1459
|
+
},
|
|
1460
|
+
{
|
|
1461
|
+
"type": "SYMBOL",
|
|
1462
|
+
"name": "call_stmt"
|
|
1463
|
+
},
|
|
1453
1464
|
{
|
|
1454
1465
|
"type": "SYMBOL",
|
|
1455
1466
|
"name": "cmd"
|
|
@@ -1483,6 +1494,14 @@
|
|
|
1483
1494
|
"type": "SYMBOL",
|
|
1484
1495
|
"name": "pipe_stmt"
|
|
1485
1496
|
},
|
|
1497
|
+
{
|
|
1498
|
+
"type": "SYMBOL",
|
|
1499
|
+
"name": "redirect_stmt"
|
|
1500
|
+
},
|
|
1501
|
+
{
|
|
1502
|
+
"type": "SYMBOL",
|
|
1503
|
+
"name": "call_stmt"
|
|
1504
|
+
},
|
|
1486
1505
|
{
|
|
1487
1506
|
"type": "SYMBOL",
|
|
1488
1507
|
"name": "cmd"
|
|
@@ -1500,6 +1519,18 @@
|
|
|
1500
1519
|
{
|
|
1501
1520
|
"type": "CHOICE",
|
|
1502
1521
|
"members": [
|
|
1522
|
+
{
|
|
1523
|
+
"type": "SYMBOL",
|
|
1524
|
+
"name": "pipe_stmt"
|
|
1525
|
+
},
|
|
1526
|
+
{
|
|
1527
|
+
"type": "SYMBOL",
|
|
1528
|
+
"name": "redirect_stmt"
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
"type": "SYMBOL",
|
|
1532
|
+
"name": "call_stmt"
|
|
1533
|
+
},
|
|
1503
1534
|
{
|
|
1504
1535
|
"type": "SYMBOL",
|
|
1505
1536
|
"name": "cmd"
|
|
@@ -1530,6 +1561,14 @@
|
|
|
1530
1561
|
"type": "SYMBOL",
|
|
1531
1562
|
"name": "pipe_stmt"
|
|
1532
1563
|
},
|
|
1564
|
+
{
|
|
1565
|
+
"type": "SYMBOL",
|
|
1566
|
+
"name": "redirect_stmt"
|
|
1567
|
+
},
|
|
1568
|
+
{
|
|
1569
|
+
"type": "SYMBOL",
|
|
1570
|
+
"name": "call_stmt"
|
|
1571
|
+
},
|
|
1533
1572
|
{
|
|
1534
1573
|
"type": "SYMBOL",
|
|
1535
1574
|
"name": "cmd"
|
|
@@ -1547,6 +1586,18 @@
|
|
|
1547
1586
|
{
|
|
1548
1587
|
"type": "CHOICE",
|
|
1549
1588
|
"members": [
|
|
1589
|
+
{
|
|
1590
|
+
"type": "SYMBOL",
|
|
1591
|
+
"name": "pipe_stmt"
|
|
1592
|
+
},
|
|
1593
|
+
{
|
|
1594
|
+
"type": "SYMBOL",
|
|
1595
|
+
"name": "redirect_stmt"
|
|
1596
|
+
},
|
|
1597
|
+
{
|
|
1598
|
+
"type": "SYMBOL",
|
|
1599
|
+
"name": "call_stmt"
|
|
1600
|
+
},
|
|
1550
1601
|
{
|
|
1551
1602
|
"type": "SYMBOL",
|
|
1552
1603
|
"name": "cmd"
|
|
@@ -1583,6 +1634,14 @@
|
|
|
1583
1634
|
"type": "SYMBOL",
|
|
1584
1635
|
"name": "pipe_stmt"
|
|
1585
1636
|
},
|
|
1637
|
+
{
|
|
1638
|
+
"type": "SYMBOL",
|
|
1639
|
+
"name": "redirect_stmt"
|
|
1640
|
+
},
|
|
1641
|
+
{
|
|
1642
|
+
"type": "SYMBOL",
|
|
1643
|
+
"name": "call_stmt"
|
|
1644
|
+
},
|
|
1586
1645
|
{
|
|
1587
1646
|
"type": "SYMBOL",
|
|
1588
1647
|
"name": "cmd"
|
|
@@ -1608,6 +1667,14 @@
|
|
|
1608
1667
|
"type": "SYMBOL",
|
|
1609
1668
|
"name": "pipe_stmt"
|
|
1610
1669
|
},
|
|
1670
|
+
{
|
|
1671
|
+
"type": "SYMBOL",
|
|
1672
|
+
"name": "redirect_stmt"
|
|
1673
|
+
},
|
|
1674
|
+
{
|
|
1675
|
+
"type": "SYMBOL",
|
|
1676
|
+
"name": "call_stmt"
|
|
1677
|
+
},
|
|
1611
1678
|
{
|
|
1612
1679
|
"type": "SYMBOL",
|
|
1613
1680
|
"name": "cmd"
|
|
@@ -1895,5 +1962,6 @@
|
|
|
1895
1962
|
"precedences": [],
|
|
1896
1963
|
"externals": [],
|
|
1897
1964
|
"inline": [],
|
|
1898
|
-
"supertypes": []
|
|
1899
|
-
}
|
|
1965
|
+
"supertypes": [],
|
|
1966
|
+
"reserved": {}
|
|
1967
|
+
}
|
package/src/node-types.json
CHANGED
|
@@ -76,6 +76,10 @@
|
|
|
76
76
|
"multiple": true,
|
|
77
77
|
"required": true,
|
|
78
78
|
"types": [
|
|
79
|
+
{
|
|
80
|
+
"type": "call_stmt",
|
|
81
|
+
"named": true
|
|
82
|
+
},
|
|
79
83
|
{
|
|
80
84
|
"type": "cmd",
|
|
81
85
|
"named": true
|
|
@@ -95,6 +99,10 @@
|
|
|
95
99
|
{
|
|
96
100
|
"type": "pipe_stmt",
|
|
97
101
|
"named": true
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"type": "redirect_stmt",
|
|
105
|
+
"named": true
|
|
98
106
|
}
|
|
99
107
|
]
|
|
100
108
|
}
|
|
@@ -107,6 +115,10 @@
|
|
|
107
115
|
"multiple": true,
|
|
108
116
|
"required": true,
|
|
109
117
|
"types": [
|
|
118
|
+
{
|
|
119
|
+
"type": "call_stmt",
|
|
120
|
+
"named": true
|
|
121
|
+
},
|
|
110
122
|
{
|
|
111
123
|
"type": "cmd",
|
|
112
124
|
"named": true
|
|
@@ -122,6 +134,10 @@
|
|
|
122
134
|
{
|
|
123
135
|
"type": "pipe_stmt",
|
|
124
136
|
"named": true
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"type": "redirect_stmt",
|
|
140
|
+
"named": true
|
|
125
141
|
}
|
|
126
142
|
]
|
|
127
143
|
}
|
|
@@ -372,6 +388,10 @@
|
|
|
372
388
|
"multiple": true,
|
|
373
389
|
"required": true,
|
|
374
390
|
"types": [
|
|
391
|
+
{
|
|
392
|
+
"type": "call_stmt",
|
|
393
|
+
"named": true
|
|
394
|
+
},
|
|
375
395
|
{
|
|
376
396
|
"type": "cmd",
|
|
377
397
|
"named": true
|
|
@@ -379,6 +399,14 @@
|
|
|
379
399
|
{
|
|
380
400
|
"type": "parenthesized",
|
|
381
401
|
"named": true
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"type": "pipe_stmt",
|
|
405
|
+
"named": true
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"type": "redirect_stmt",
|
|
409
|
+
"named": true
|
|
382
410
|
}
|
|
383
411
|
]
|
|
384
412
|
}
|
|
@@ -471,6 +499,10 @@
|
|
|
471
499
|
"multiple": true,
|
|
472
500
|
"required": true,
|
|
473
501
|
"types": [
|
|
502
|
+
{
|
|
503
|
+
"type": "call_stmt",
|
|
504
|
+
"named": true
|
|
505
|
+
},
|
|
474
506
|
{
|
|
475
507
|
"type": "cmd",
|
|
476
508
|
"named": true
|
|
@@ -494,6 +526,10 @@
|
|
|
494
526
|
"multiple": true,
|
|
495
527
|
"required": true,
|
|
496
528
|
"types": [
|
|
529
|
+
{
|
|
530
|
+
"type": "fd_redirect",
|
|
531
|
+
"named": true
|
|
532
|
+
},
|
|
497
533
|
{
|
|
498
534
|
"type": "redirect_op",
|
|
499
535
|
"named": true
|
|
@@ -589,6 +625,10 @@
|
|
|
589
625
|
"type": "comparison_op",
|
|
590
626
|
"named": true
|
|
591
627
|
},
|
|
628
|
+
{
|
|
629
|
+
"type": "fd_redirect",
|
|
630
|
+
"named": true
|
|
631
|
+
},
|
|
592
632
|
{
|
|
593
633
|
"type": "for_options",
|
|
594
634
|
"named": true
|