Add unknown ranges and open object values
This commit is contained in:
@@ -90,7 +90,12 @@ Literal { String | Integer | Float | True | False | Regex }
|
||||
CompareOperator { EqualEqual | BangEqual | Lt | Lte | Gt | Gte }
|
||||
ComparisonConstraint { (Lt | Lte | Gt | Gte) Expression }
|
||||
|
||||
Object { LBrace (FieldDefinition (Semicolon FieldDefinition)* Semicolon?)? RBrace }
|
||||
Object {
|
||||
LBrace
|
||||
(FieldDefinition (Semicolon FieldDefinition)* (Semicolon ObjectRest)? Semicolon?)?
|
||||
RBrace
|
||||
}
|
||||
ObjectRest { Ellipsis Expression }
|
||||
MapConstraint { LBrace Ellipsis Expression RBrace }
|
||||
FieldDefinition { FieldPath Equal Expression }
|
||||
FieldPath { Identifier !fieldPath (Dot Identifier)* }
|
||||
|
||||
@@ -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))))))
|
||||
|
||||
@@ -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
@@ -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
@@ -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,
|
||||
|
||||
Generated
+7222
-6054
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user