Forbid anonymous function parameter labels (#34)

Corresponds to gleam-lang/gleam#1629
pull/315/head
Jonathan Arnett 2022-06-20 13:13:52 +07:00 committed by GitHub
parent 7b7628230e
commit ed604993ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 19096 additions and 18676 deletions

@ -330,12 +330,31 @@ module.exports = grammar({
anonymous_function: ($) =>
seq(
"fn",
field("parameters", $.function_parameters),
field(
"parameters",
alias($.anonymous_function_parameters, $.function_parameters)
),
optional(seq("->", field("return_type", $._type))),
"{",
field("body", alias($._expression_seq, $.function_body)),
"}"
),
anonymous_function_parameters: ($) =>
seq(
"(",
optional(
series_of(
alias($.anonymous_function_parameter, $.function_parameter),
","
)
),
")"
),
anonymous_function_parameter: ($) =>
seq(
choice($._discard_param, $._name_param),
optional($._type_annotation)
),
expression_group: ($) => seq("{", $._expression_seq, "}"),
case: ($) =>
seq(

105
src/grammar.json generated

@ -2955,9 +2955,14 @@
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "function_parameters"
"name": "anonymous_function_parameters"
},
"named": true,
"value": "function_parameters"
}
},
{
@ -3008,6 +3013,104 @@
}
]
},
"anonymous_function_parameters": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "anonymous_function_parameter"
},
"named": true,
"value": "function_parameter"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "anonymous_function_parameter"
},
"named": true,
"value": "function_parameter"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"anonymous_function_parameter": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_discard_param"
},
{
"type": "SYMBOL",
"name": "_name_param"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type_annotation"
},
{
"type": "BLANK"
}
]
}
]
},
"expression_group": {
"type": "SEQ",
"members": [

37621
src/parser.c generated

File diff suppressed because it is too large Load Diff

@ -250,7 +250,7 @@ fn bit_string() {
<<0:4, 1:3, 1:1>>
}
fn return_fun(x) {
fn(foo y: Int) { x + y }
fn(y: Int) { x + y }
}
fn expression_group() {
{
@ -400,7 +400,6 @@ fn field_access(x) {
(anonymous_function
parameters: (function_parameters
(function_parameter
label: (label)
name: (identifier)
type: (type
name: (type_identifier))))

@ -0,0 +1,20 @@
================================================================================
Pipes
================================================================================
string
|> iodata.new
|> iodata.reverse
--------------------------------------------------------------------------------
(source_file
(binary_expression
(binary_expression
(identifier)
(field_access
(identifier)
(label)))
(field_access
(identifier)
(label))))