Parse 'use' expressions (#42)

pull/844/head
Michael Davis 2022-11-23 13:03:22 +07:00 committed by GitHub
parent daa89f67d1
commit 8df06b69b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 28832 additions and 23674 deletions

@ -326,6 +326,7 @@ module.exports = grammar({
$.expression_group,
$.case,
$.let,
$.use,
$.assert,
$.negation,
$.record_update,
@ -440,6 +441,13 @@ module.exports = grammar({
_case_clause_tuple_access: ($) =>
seq(field("tuple", $.identifier), ".", field("index", $.integer)),
let: ($) => seq("let", $._assignment),
use: ($) =>
seq(
"use",
optional(series_of($.identifier, ",")),
"<-",
field("value", $._expression)
),
assert: ($) => seq("assert", $._assignment),
negation: ($) => seq("!", $._expression_unit),
_assignment: ($) =>

@ -81,6 +81,7 @@
"todo"
"try"
"type"
"use"
] @keyword
; Punctuation
@ -104,4 +105,5 @@
"->"
".."
"-"
"<-"
] @punctuation.delimiter

70
src/grammar.json generated

@ -2678,6 +2678,10 @@
"type": "SYMBOL",
"name": "let"
},
{
"type": "SYMBOL",
"name": "use"
},
{
"type": "SYMBOL",
"name": "assert"
@ -4031,6 +4035,72 @@
}
]
},
"use": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "use"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "<-"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"assert": {
"type": "SEQ",
"members": [

190
src/node-types.json generated

@ -152,6 +152,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -349,6 +353,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -462,6 +470,10 @@
"type": "tuple_pattern",
"named": true
},
{
"type": "use",
"named": true
},
{
"type": "{",
"named": false
@ -674,6 +686,10 @@
"type": "tuple_pattern",
"named": true
},
{
"type": "use",
"named": true
},
{
"type": "{",
"named": false
@ -855,6 +871,10 @@
{
"type": "tuple_pattern",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -947,6 +967,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -1103,6 +1127,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -1346,6 +1374,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -1639,6 +1671,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -1966,6 +2002,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -2397,6 +2437,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -2489,6 +2533,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -2576,6 +2624,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -2757,6 +2809,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -3036,6 +3092,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -3138,6 +3198,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -3333,6 +3397,10 @@
{
"type": "type_definition",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -3604,6 +3672,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -3696,6 +3768,10 @@
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
@ -4107,6 +4183,112 @@
]
}
},
{
"type": "use",
"named": true,
"fields": {
"value": {
"multiple": false,
"required": true,
"types": [
{
"type": "anonymous_function",
"named": true
},
{
"type": "assert",
"named": true
},
{
"type": "binary_expression",
"named": true
},
{
"type": "bit_string",
"named": true
},
{
"type": "case",
"named": true
},
{
"type": "expression_group",
"named": true
},
{
"type": "field_access",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "integer",
"named": true
},
{
"type": "let",
"named": true
},
{
"type": "list",
"named": true
},
{
"type": "negation",
"named": true
},
{
"type": "record",
"named": true
},
{
"type": "record_update",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "todo",
"named": true
},
{
"type": "tuple",
"named": true
},
{
"type": "tuple_access",
"named": true
},
{
"type": "use",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
{
"type": "!",
"named": false
@ -4195,6 +4377,10 @@
"type": "<",
"named": false
},
{
"type": "<-",
"named": false
},
{
"type": "<.",
"named": false
@ -4387,6 +4573,10 @@
"type": "unsigned",
"named": false
},
{
"type": "use",
"named": false
},
{
"type": "utf16",
"named": false

52204
src/parser.c generated

File diff suppressed because it is too large Load Diff

@ -94,3 +94,35 @@ case "12345" {
(case_clause_pattern
(discard)))
(string)))))
================================================================================
Use
================================================================================
use <- f()
use a <- f()
use a, b, c, d, e <- f()
--------------------------------------------------------------------------------
(source_file
(use
(function_call
(identifier)
(arguments)))
(use
(identifier)
(function_call
(identifier)
(arguments)))
(use
(identifier)
(identifier)
(identifier)
(identifier)
(identifier)
(function_call
(identifier)
(arguments))))