record syntax
This commit is contained in:
14
grammar.js
14
grammar.js
@@ -126,7 +126,7 @@ module.exports = grammar({
|
||||
// optional doesn't seem to help, so we have an error at void
|
||||
optional(seq("where", optional(layout($, $.sigDecl)))),
|
||||
),
|
||||
jsLitString: $ => seq("`",alias(/[^`]+/,$.jsStringFragment),"`"),
|
||||
jsLitString: $ => seq("`", alias(/[^`]+/, $.jsStringFragment), "`"),
|
||||
deriveDecl: $ => seq("derive", repeat1($.identifier)),
|
||||
pfuncDecl: ($) => seq(
|
||||
"pfunc",
|
||||
@@ -148,10 +148,18 @@ module.exports = grammar({
|
||||
$.number,
|
||||
repeat1(alias($.identifier, $.name))
|
||||
),
|
||||
_telescope: $ => choice($.identifier, $.binder),
|
||||
recordDecl: $ =>
|
||||
seq(
|
||||
"record",
|
||||
seq(alias($.identifier, $.recordName), optional($._telescope)),
|
||||
"where",
|
||||
layout($, choice(seq("constructor", $.identifier), $.sigDecl)),
|
||||
),
|
||||
classDecl: $ =>
|
||||
seq(
|
||||
"class",
|
||||
seq(alias($.identifier, $.className), repeat($._atom)),
|
||||
seq(alias($.identifier, $.className), optional($._telescope)),
|
||||
"where",
|
||||
layout($, $.sigDecl)
|
||||
),
|
||||
@@ -170,7 +178,7 @@ module.exports = grammar({
|
||||
$.shortDataDecl,
|
||||
$.classDecl,
|
||||
$.instanceDecl,
|
||||
// $.recordDecl,
|
||||
$.recordDecl,
|
||||
// $.exportDecl,
|
||||
$.deriveDecl,
|
||||
$.sigDecl,
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"∀" ; "forall"
|
||||
"import"
|
||||
"uses" "derive"
|
||||
"class" "instance" ;"record" "constructor"
|
||||
"class" "instance" "record" "constructor"
|
||||
"if" "then" "else"
|
||||
"|" "<-" "=>" "$" ":"
|
||||
] @keyword
|
||||
|
||||
114
src/grammar.json
generated
114
src/grammar.json
generated
@@ -1251,6 +1251,105 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"_telescope": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "binder"
|
||||
}
|
||||
]
|
||||
},
|
||||
"recordDecl": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "record"
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "ALIAS",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
},
|
||||
"named": true,
|
||||
"value": "recordName"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_telescope"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "where"
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "start"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "semi"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "constructor"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "sigDecl"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "end"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"classDecl": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
@@ -1271,11 +1370,16 @@
|
||||
"value": "className"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_atom"
|
||||
"name": "_telescope"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1400,6 +1504,10 @@
|
||||
"type": "SYMBOL",
|
||||
"name": "instanceDecl"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "recordDecl"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "deriveDecl"
|
||||
|
||||
73
src/node-types.json
generated
73
src/node-types.json
generated
@@ -61,7 +61,7 @@
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "character",
|
||||
"type": "binder",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
@@ -76,14 +76,6 @@
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "recUpdate",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "semi",
|
||||
"named": true
|
||||
@@ -95,14 +87,6 @@
|
||||
{
|
||||
"type": "start",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "typeExpr",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -511,6 +495,10 @@
|
||||
"type": "ptypeDecl",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "recordDecl",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "semi",
|
||||
"named": true
|
||||
@@ -617,6 +605,45 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "recordDecl",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "binder",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "end",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "recordName",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "semi",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "sigDecl",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "start",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "shortDataDecl",
|
||||
"named": true,
|
||||
@@ -881,6 +908,10 @@
|
||||
"type": "conName",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "constructor",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "data",
|
||||
"named": false
|
||||
@@ -961,6 +992,14 @@
|
||||
"type": "quantity",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "record",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "recordName",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "semi",
|
||||
"named": true
|
||||
|
||||
36959
src/parser.c
generated
36959
src/parser.c
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user