Flatten values into expression grammar

This commit is contained in:
2026-04-30 19:16:51 -06:00
parent a4844b5a59
commit 2093c1d2dd
6 changed files with 2005 additions and 2122 deletions

View File

@@ -107,14 +107,26 @@ export default grammar({
rule_body: $ => list(field("clause", $.expr)),
expr: $ => choice(
// variables
field("hole", "_"),
field("variable", $.variable),
// composites
field("atom", $.atom),
field("tuple", $.tuple),
field("value", $.value),
field("variable", $.variable),
field("aggregate", $.aggregate),
// value literals
field("true", "True"),
field("false", "False"),
field("symbol", $.symbol),
field("integer", $.integer),
// operations
field("unary", $.unary_expr),
field("binary", $.binary_expr),
// nested
seq('(', field("parens", $.expr), ')'),
),
@@ -123,13 +135,6 @@ export default grammar({
tuple: $ => parenListComma(field("el", $.expr)),
value: $ => choice(
field("true", "True"),
field("false", "False"),
field("symbol", $.symbol),
field("integer", $.integer),
),
aggregate: $ => seq(
field("op", $.aggregate_op),
optional(seq(list(field("witness", $.variable)), ":")),

View File

@@ -3,7 +3,7 @@
(comment) @comment.line
(integer) @constant.numeric
(variable) @variable
(value (symbol) @constant)
(expr (symbol) @constant)
(import (symbol) @module)
(type (symbol)) @type
(type_alias name: _ @type)

View File

@@ -535,6 +535,14 @@
"value": "_"
}
},
{
"type": "FIELD",
"name": "variable",
"content": {
"type": "SYMBOL",
"name": "variable"
}
},
{
"type": "FIELD",
"name": "atom",
@@ -551,22 +559,6 @@
"name": "tuple"
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "value"
}
},
{
"type": "FIELD",
"name": "variable",
"content": {
"type": "SYMBOL",
"name": "variable"
}
},
{
"type": "FIELD",
"name": "aggregate",
@@ -575,6 +567,38 @@
"name": "aggregate"
}
},
{
"type": "FIELD",
"name": "true",
"content": {
"type": "STRING",
"value": "True"
}
},
{
"type": "FIELD",
"name": "false",
"content": {
"type": "STRING",
"value": "False"
}
},
{
"type": "FIELD",
"name": "symbol",
"content": {
"type": "SYMBOL",
"name": "symbol"
}
},
{
"type": "FIELD",
"name": "integer",
"content": {
"type": "SYMBOL",
"name": "integer"
}
},
{
"type": "FIELD",
"name": "unary",
@@ -694,43 +718,6 @@
}
]
},
"value": {
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "true",
"content": {
"type": "STRING",
"value": "True"
}
},
{
"type": "FIELD",
"name": "false",
"content": {
"type": "STRING",
"value": "False"
}
},
{
"type": "FIELD",
"name": "symbol",
"content": {
"type": "SYMBOL",
"name": "symbol"
}
},
{
"type": "FIELD",
"name": "integer",
"content": {
"type": "SYMBOL",
"name": "integer"
}
}
]
},
"aggregate": {
"type": "SEQ",
"members": [

View File

@@ -287,6 +287,16 @@
}
]
},
"false": {
"multiple": false,
"required": false,
"types": [
{
"type": "False",
"named": false
}
]
},
"hole": {
"multiple": false,
"required": false,
@@ -297,6 +307,16 @@
}
]
},
"integer": {
"multiple": false,
"required": false,
"types": [
{
"type": "integer",
"named": true
}
]
},
"parens": {
"multiple": false,
"required": false,
@@ -307,6 +327,26 @@
}
]
},
"symbol": {
"multiple": false,
"required": false,
"types": [
{
"type": "symbol",
"named": true
}
]
},
"true": {
"multiple": false,
"required": false,
"types": [
{
"type": "True",
"named": false
}
]
},
"tuple": {
"multiple": false,
"required": false,
@@ -327,16 +367,6 @@
}
]
},
"value": {
"multiple": false,
"required": false,
"types": [
{
"type": "value",
"named": true
}
]
},
"variable": {
"multiple": false,
"required": false,
@@ -581,52 +611,6 @@
"named": true,
"fields": {}
},
{
"type": "value",
"named": true,
"fields": {
"false": {
"multiple": false,
"required": false,
"types": [
{
"type": "False",
"named": false
}
]
},
"integer": {
"multiple": false,
"required": false,
"types": [
{
"type": "integer",
"named": true
}
]
},
"symbol": {
"multiple": false,
"required": false,
"types": [
{
"type": "symbol",
"named": true
}
]
},
"true": {
"multiple": false,
"required": false,
"types": [
{
"type": "True",
"named": false
}
]
}
}
},
{
"type": "!",
"named": false

File diff suppressed because it is too large Load Diff