Fix unlabeled constant record argument bug

pull/204/head
Jonathan Arnett 2022-01-01 20:21:52 +07:00
parent 0802930958
commit d22ce5f6ae
5 changed files with 12011 additions and 11724 deletions

@ -16,7 +16,8 @@ const a = <<52:size(4)-unit(4)>>
const a = <<"Hello Gleam 💫":utf8>>
const a = Node
const a = Node()
const a = Node(name: "Billy", age: 52)
const a = Cat("Ginny", 1950)
const a = Person(name: "Billy", age: 52)
const a = uri.Uri(host: "github.com")
---
@ -104,16 +105,34 @@ const a = uri.Uri(host: "github.com")
value: (record))
(constant
name: (identifier)
value: (record))
value: (record
(arguments)))
(constant
name: (identifier)
value: (record
(record_arg (string))
(record_arg (integer))))
(arguments
(argument
value: (string))
(argument
value: (integer)))))
(constant
name: (identifier)
value: (record
(arguments
(argument
label: (identifier)
value: (string))
(argument
label: (identifier)
value: (integer)))))
(constant
name: (identifier)
value: (remote_record
(record_arg (string)))))
module: (identifier)
(arguments
(argument
label: (identifier)
value: (string))))))
=================
Public constants
@ -133,7 +152,8 @@ pub const a = <<52:size(4)-unit(4)>>
pub const a = <<"Hello Gleam 💫":utf8>>
pub const a = Node
pub const a = Node()
pub const a = Node(name: "Billy", age: 52)
pub const a = Cat("Ginny", 1950)
pub const a = Person(name: "Billy", age: 52)
pub const a = uri.Uri(host: "github.com")
---
@ -221,13 +241,31 @@ pub const a = uri.Uri(host: "github.com")
value: (record))
(public_constant
name: (identifier)
value: (record))
value: (record
(arguments)))
(public_constant
name: (identifier)
value: (record
(record_arg (string))
(record_arg (integer))))
(arguments
(argument
value: (string))
(argument
value: (integer)))))
(public_constant
name: (identifier)
value: (record
(arguments
(argument
label: (identifier)
value: (string))
(argument
label: (identifier)
value: (integer)))))
(public_constant
name: (identifier)
value: (remote_record
(record_arg (string)))))
module: (identifier)
(arguments
(argument
label: (identifier)
value: (string))))))

@ -108,19 +108,27 @@ module.exports = grammar({
_constant_record: ($) =>
seq(
$._upname,
optional(
optional(alias($._constant_record_arguments, $.arguments))
),
_constant_record_arguments: ($) =>
seq(
"(",
optional(
series_of(alias($._constant_record_arg, $.record_arg), ",")
series_of(alias($._constant_record_argument, $.argument), ",")
),
")"
)
)
),
_constant_record_arg: ($) =>
seq($._name, optional(seq(":", $._constant_value))),
_constant_remote_record: ($) => seq($._name, ".", $._constant_record),
_constant_record_argument: ($) =>
seq(
optional(seq(field("label", $.identifier), ":")),
field("value", $._constant_value)
),
_constant_remote_record: ($) =>
seq(
field("module", alias($._name, $.identifier)),
".",
$._constant_record
),
/* Special constant types */
// Versions of $._type, $._type_annotation, etc, that have constraints

@ -828,6 +828,22 @@
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_constant_record_arguments"
},
"named": true,
"value": "arguments"
},
{
"type": "BLANK"
}
]
}
]
},
"_constant_record_arguments": {
"type": "SEQ",
"members": [
{
@ -844,10 +860,10 @@
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_constant_record_arg"
"name": "_constant_record_argument"
},
"named": true,
"value": "record_arg"
"value": "argument"
},
{
"type": "REPEAT",
@ -862,10 +878,10 @@
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_constant_record_arg"
"name": "_constant_record_argument"
},
"named": true,
"value": "record_arg"
"value": "argument"
}
]
}
@ -883,20 +899,9 @@
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"_constant_record_arg": {
"_constant_record_argument": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "CHOICE",
"members": [
@ -904,12 +909,16 @@
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
"type": "FIELD",
"name": "label",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "_constant_value"
"type": "STRING",
"value": ":"
}
]
},
@ -917,6 +926,14 @@
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_constant_value"
}
}
]
},
@ -924,9 +941,18 @@
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "module",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_name"
},
"named": true,
"value": "identifier"
}
},
{
"type": "STRING",
"value": "."

@ -172,7 +172,7 @@
"fields": {},
"children": {
"multiple": true,
"required": true,
"required": false,
"types": [
{
"type": "argument",
@ -2799,59 +2799,12 @@
"type": "record",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "arguments",
"named": true
},
{
"type": "record_arg",
"named": true
}
]
}
},
{
"type": "record_arg",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "bit_string",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "integer",
"named": true
},
{
"type": "list",
"named": true
},
{
"type": "record",
"named": true
},
{
"type": "remote_record",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "tuple",
"type": "arguments",
"named": true
}
]
@ -3111,7 +3064,7 @@
"fields": {
"module": {
"multiple": false,
"required": false,
"required": true,
"types": [
{
"type": "identifier",
@ -3121,15 +3074,15 @@
}
},
"children": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
"type": "record",
"type": "arguments",
"named": true
},
{
"type": "record_arg",
"type": "record",
"named": true
}
]

File diff suppressed because it is too large Load Diff