partially working

This commit is contained in:
2026-03-05 22:14:17 -08:00
parent bb510fea4a
commit 7518c95769
9 changed files with 25288 additions and 10048 deletions

889
src/grammar.json generated

File diff suppressed because it is too large Load Diff

511
src/node-types.json generated
View File

@@ -1,31 +1,4 @@
[
{
"type": "appExpr",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "operator",
"named": true
},
{
"type": "strLit",
"named": true
},
{
"type": "typeExpr",
"named": true
},
{
"type": "varname",
"named": true
}
]
}
},
{
"type": "binder",
"named": true,
@@ -60,10 +33,6 @@
{
"type": "typeExpr",
"named": true
},
{
"type": "varname",
"named": true
}
]
}
@@ -84,17 +53,53 @@
}
},
{
"type": "conDef",
"type": "classDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "character",
"named": true
},
{
"type": "className",
"named": true
},
{
"type": "end",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "recUpdate",
"named": true
},
{
"type": "semi",
"named": true
},
{
"type": "sigDecl",
"named": true
},
{
"type": "start",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "typeExpr",
"named": true
@@ -110,20 +115,16 @@
"multiple": true,
"required": true,
"types": [
{
"type": "conDef",
"named": true
},
{
"type": "end",
"named": true
},
{
"type": "identifier",
"type": "semi",
"named": true
},
{
"type": "semi",
"type": "sigDecl",
"named": true
},
{
@@ -146,12 +147,31 @@
"required": true,
"types": [
{
"type": "appExpr",
"type": "lhs",
"named": true
},
{
"type": "typeExpr",
"named": true
},
{
"type": "whereClause",
"named": true
}
]
}
},
{
"type": "deriveDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
@@ -165,19 +185,7 @@
"required": true,
"types": [
{
"type": "caseAlt",
"named": true
},
{
"type": "end",
"named": true
},
{
"type": "semi",
"named": true
},
{
"type": "start",
"type": "orAlt",
"named": true
},
{
@@ -235,19 +243,7 @@
"required": true,
"types": [
{
"type": "caseAlt",
"named": true
},
{
"type": "end",
"named": true
},
{
"type": "semi",
"named": true
},
{
"type": "start",
"type": "orAlt",
"named": true
},
{
@@ -280,6 +276,21 @@
]
}
},
{
"type": "dollar",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "term",
"named": true
}
]
}
},
{
"type": "forall",
"named": true,
@@ -329,6 +340,41 @@
]
}
},
{
"type": "instanceDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "defDecl",
"named": true
},
{
"type": "end",
"named": true
},
{
"type": "semi",
"named": true
},
{
"type": "sigDecl",
"named": true
},
{
"type": "start",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
},
{
"type": "lamExpr",
"named": true,
@@ -348,6 +394,60 @@
]
}
},
{
"type": "lhs",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "character",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "recUpdate",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
},
{
"type": "mixfixDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "name",
"named": true
},
{
"type": "number",
"named": true
}
]
}
},
{
"type": "module",
"named": true,
@@ -356,6 +456,10 @@
"multiple": true,
"required": true,
"types": [
{
"type": "classDecl",
"named": true
},
{
"type": "dataDecl",
"named": true
@@ -364,6 +468,10 @@
"type": "defDecl",
"named": true
},
{
"type": "deriveDecl",
"named": true
},
{
"type": "identifier",
"named": true
@@ -372,10 +480,30 @@
"type": "importDef",
"named": true
},
{
"type": "instanceDecl",
"named": true
},
{
"type": "mixfixDecl",
"named": true
},
{
"type": "pfuncDecl",
"named": true
},
{
"type": "ptypeDecl",
"named": true
},
{
"type": "semi",
"named": true
},
{
"type": "shortDataDecl",
"named": true
},
{
"type": "sigDecl",
"named": true
@@ -383,6 +511,63 @@
]
}
},
{
"type": "orAlt",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "caseAlt",
"named": true
}
]
}
},
{
"type": "pfuncDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "jsLitString",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
},
{
"type": "ptypeDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "name",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
},
{
"type": "qname",
"named": true,
@@ -398,6 +583,60 @@
]
}
},
{
"type": "recUpdate",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "term",
"named": true
}
]
}
},
{
"type": "shortDataDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "character",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "recUpdate",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
},
{
"type": "sigDecl",
"named": true,
@@ -442,13 +681,21 @@
"required": true,
"types": [
{
"type": "appExpr",
"type": "character",
"named": true
},
{
"type": "doBlock",
"named": true
},
{
"type": "dollar",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "ifThen",
"named": true
@@ -456,6 +703,22 @@
{
"type": "lamExpr",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "recUpdate",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
@@ -465,7 +728,7 @@
"named": true,
"fields": {},
"children": {
"multiple": false,
"multiple": true,
"required": true,
"types": [
{
@@ -479,20 +742,40 @@
{
"type": "term",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
},
{
"type": "varname",
"type": "whereClause",
"named": true,
"fields": {},
"children": {
"multiple": false,
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"type": "defDecl",
"named": true
},
{
"type": "end",
"named": true
},
{
"type": "semi",
"named": true
},
{
"type": "sigDecl",
"named": true
},
{
"type": "start",
"named": true
}
]
@@ -502,6 +785,10 @@
"type": "$",
"named": false
},
{
"type": "$=",
"named": false
},
{
"type": "(",
"named": false
@@ -522,6 +809,14 @@
"type": ":",
"named": false
},
{
"type": ":=",
"named": false
},
{
"type": ";",
"named": false
},
{
"type": "<-",
"named": false
@@ -534,19 +829,47 @@
"type": "=>",
"named": false
},
{
"type": "[",
"named": false
},
{
"type": "\\",
"named": false
},
{
"type": "]",
"named": false
},
{
"type": "character",
"named": true
},
{
"type": "class",
"named": false
},
{
"type": "className",
"named": true
},
{
"type": "comment",
"named": true,
"extra": true
},
{
"type": "conName",
"named": false
},
{
"type": "data",
"named": false
},
{
"type": "derive",
"named": false
},
{
"type": "do",
"named": false
@@ -571,6 +894,22 @@
"type": "import",
"named": false
},
{
"type": "infixl",
"named": false
},
{
"type": "infixr",
"named": false
},
{
"type": "instance",
"named": false
},
{
"type": "jsLitString",
"named": true
},
{
"type": "let",
"named": false
@@ -580,9 +919,29 @@
"named": false
},
{
"type": "operator",
"type": "name",
"named": true
},
{
"type": "name",
"named": false
},
{
"type": "number",
"named": true
},
{
"type": "pfunc",
"named": false
},
{
"type": "ptype",
"named": false
},
{
"type": "quantity",
"named": false
},
{
"type": "semi",
"named": true
@@ -592,13 +951,21 @@
"named": true
},
{
"type": "strLit",
"type": "string",
"named": true
},
{
"type": "then",
"named": false
},
{
"type": "typeName",
"named": false
},
{
"type": "uses",
"named": false
},
{
"type": "where",
"named": false

33765
src/parser.c generated

File diff suppressed because it is too large Load Diff

View File

@@ -82,7 +82,9 @@ bool tree_sitter_newt_external_scanner_scan(State *state, TSLexer *lexer,
int32_t cur = peek(state);
uint32_t col = lexer->get_column(lexer);
if (ws && syms[VIRT_START]) {
// START must indent more
// We have `ws` so we make forward progress
if (ws && syms[VIRT_START] && cur < col) {
fprintf(stderr, "start [%d %d %d %d] %d %d\n", syms[0], syms[1], syms[2],
syms[3], col, cur);
push(state, col);
@@ -90,7 +92,10 @@ bool tree_sitter_newt_external_scanner_scan(State *state, TSLexer *lexer,
return true;
}
// if we are in a smaller column, we force virt_end
if (syms[VIRT_END]) {
// even if it's not expected (I think this is important)
// on the editor side there is a `then` expected vs outdented `then`, but
// maybe GLR can detect a "stray" END token?
if (syms[VIRT_END] || true) {
if (col < cur) {
fprintf(stderr, "end [%d %d %d %d] %d %d\n", syms[0], syms[1], syms[2],