Add unknown ranges and open object values

This commit is contained in:
2026-08-14 08:00:22 +09:00
parent 8c50dd202d
commit 848c7f169f
53 changed files with 9047 additions and 6572 deletions
@@ -210,3 +210,29 @@ Map constraint and ascription
(field_definition
path: (field_path (identifier))
value: (identifier))))))))
==================
Unknown object rest constraint
==================
{
value = {
hoge = Int;
fuga = String;
...Unknown
};
}
---
(source_file
(object
(field_definition
path: (field_path (identifier))
value: (object
(field_definition
path: (field_path (identifier))
value: (identifier))
(field_definition
path: (field_path (identifier))
value: (identifier))
(object_rest
value: (identifier))))))
+11 -1
View File
@@ -99,10 +99,20 @@ module.exports = grammar({
object: $ => seq(
'{',
semiSep($.field_definition),
optional(seq(
$.field_definition,
repeat(seq(';', $.field_definition)),
optional(seq(';', $.object_rest)),
optional(';'),
)),
'}',
),
object_rest: $ => seq(
'...',
field('value', $._expression),
),
map_constraint: $ => seq(
'{',
'...',
@@ -54,7 +54,7 @@
] @punctuation.delimiter
((identifier) @type.builtin
(#match? @type.builtin "^(String|Int|Float|Bool)$"))
(#match? @type.builtin "^(String|Int|Float|Bool|Unknown)$"))
(field_definition
path: (field_path (identifier) @property))
+38
View File
@@ -302,6 +302,27 @@
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "SYMBOL",
"name": "object_rest"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
@@ -327,6 +348,23 @@
}
]
},
"object_rest": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "..."
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"map_constraint": {
"type": "SEQ",
"members": [
+92
View File
@@ -1758,10 +1758,102 @@
{
"type": "field_definition",
"named": true
},
{
"type": "object_rest",
"named": true
}
]
}
},
{
"type": "object_rest",
"named": true,
"fields": {
"value": {
"multiple": false,
"required": true,
"types": [
{
"type": "array",
"named": true
},
{
"type": "array_constraint",
"named": true
},
{
"type": "as_expression",
"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": "map_constraint",
"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": "parameter",
"named": true,
+7222 -6054
View File
File diff suppressed because it is too large Load Diff