Add required array element constraints

This commit is contained in:
2026-08-11 17:24:04 +09:00
parent 5a05da6fe4
commit 46b2b3b1b6
35 changed files with 6328 additions and 5042 deletions
@@ -158,3 +158,27 @@ Array concat
right: (literal (integer))))
right: (array
(literal (integer)))))))
==================
Array constraints
==================
{
tags = [...String];
ports = [...(Int & >= 1),];
}
---
(source_file
(object
(field_definition
path: (field_path (identifier))
value: (array_constraint
element: (identifier)))
(field_definition
path: (field_path (identifier))
value: (array_constraint
element: (parenthesized_expression
(binary_expression
left: (identifier)
right: (comparison_constraint
value: (integer))))))))
+9
View File
@@ -54,6 +54,7 @@ module.exports = grammar({
$.regex_literal,
$.comparison_constraint,
$.object,
$.array_constraint,
$.array,
$.let_expression,
$.function_expression,
@@ -116,6 +117,14 @@ module.exports = grammar({
']',
),
array_constraint: $ => seq(
'[',
'...',
field('element', $._expression),
optional(','),
']',
),
let_expression: $ => seq(
'let',
repeat(seq($.field_definition, ';')),
@@ -22,6 +22,7 @@
"*"
"/"
"++"
"..."
"&&"
"||"
"!"
+41
View File
@@ -95,6 +95,10 @@
"type": "SYMBOL",
"name": "object"
},
{
"type": "SYMBOL",
"name": "array_constraint"
},
{
"type": "SYMBOL",
"name": "array"
@@ -427,6 +431,43 @@
}
]
},
"array_constraint": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "..."
},
{
"type": "FIELD",
"name": "element",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"let_expression": {
"type": "SEQ",
"members": [
+160
View File
@@ -11,6 +11,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -74,6 +78,86 @@
]
}
},
{
"type": "array_constraint",
"named": true,
"fields": {
"element": {
"multiple": false,
"required": true,
"types": [
{
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
},
{
"type": "call_expression",
"named": true
},
{
"type": "comparison_constraint",
"named": true
},
{
"type": "default_expression",
"named": true
},
{
"type": "function_expression",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "import_expression",
"named": true
},
{
"type": "let_expression",
"named": true
},
{
"type": "literal",
"named": true
},
{
"type": "match_expression",
"named": true
},
{
"type": "object",
"named": true
},
{
"type": "parenthesized_expression",
"named": true
},
{
"type": "path_expression",
"named": true
},
{
"type": "regex_literal",
"named": true
},
{
"type": "unary_expression",
"named": true
}
]
}
}
},
{
"type": "binary_expression",
"named": true,
@@ -86,6 +170,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -222,6 +310,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -303,6 +395,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -374,6 +470,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -471,6 +571,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -547,6 +651,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -617,6 +725,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -703,6 +815,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -794,6 +910,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -896,6 +1016,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1009,6 +1133,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1083,6 +1211,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1159,6 +1291,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1260,6 +1396,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1346,6 +1486,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1431,6 +1575,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1507,6 +1655,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1586,6 +1738,10 @@
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "binary_expression",
"named": true
@@ -1712,6 +1868,10 @@
"type": ".",
"named": false
},
{
"type": "...",
"named": false
},
{
"type": "/",
"named": false
+5487 -4941
View File
File diff suppressed because it is too large Load Diff