Skip to content

Commit

Permalink
feat: better error recovery
Browse files Browse the repository at this point in the history
  • Loading branch information
ribru17 committed Feb 23, 2024
1 parent 3cb6827 commit e436eae
Show file tree
Hide file tree
Showing 5 changed files with 5,414 additions and 4,915 deletions.
48 changes: 48 additions & 0 deletions corpus/main.txt
Original file line number Diff line number Diff line change
Expand Up @@ -455,3 +455,51 @@ $enDIF
(variable_setting
(number_variable)
(number_value)))))

================================================================================
fail fast
================================================================================

set editing-mode ema
set input-meta on
$If bell-style == visib
$if Bash
set keyseq-timeout 69
$else
set keyseq-timeout 129
$endif
$ELSE
set KEYSEQ-TIMEOUT 56
$enDIF

--------------------------------------------------------------------------------

(source
(variable_setting
(edit_mode_variable)
(edit_mode_value
(ERROR)))
(variable_setting
(bool_variable)
(bool_value))
(conditional_construct
(test
(bell_variable)
(bell_value
(ERROR)))
(consequence
(conditional_construct
(test
(application_name))
(consequence
(variable_setting
(number_variable)
(number_value)))
(alternative
(variable_setting
(number_variable)
(number_value)))))
(alternative
(variable_setting
(number_variable)
(number_value)))))
15 changes: 10 additions & 5 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ const NEWLINE = /\r?\n/;
const WHITE_SPACE = /[ \t\f\v]/;
const ANYTHING = /[^\r\n]+/;
const ANYTHING_STARTING_NON_WHITESPACE = /\S[^\r\n]*/;
const ERROR_ALIAS = ($) =>
alias(token(prec(-1, ANYTHING_STARTING_NON_WHITESPACE)), $.ERROR);

module.exports = grammar({
name: 'readline',
Expand Down Expand Up @@ -212,13 +214,16 @@ module.exports = grammar({
),
),

bool_value: ($) => choice('1', /on/i, /off/i),
bell_value: ($) => choice(/none/i, /visible/i, /audible/i),
bool_value: ($) => choice('1', /on/i, /off/i, ERROR_ALIAS($)),
bell_value: ($) => choice(/none/i, /visible/i, /audible/i, ERROR_ALIAS($)),
string_value: ($) => ANYTHING_STARTING_NON_WHITESPACE,
number_value: ($) => /[-+]?\d+/,
edit_mode_value: ($) => choice(/emacs/i, /vi/i),
number_value: ($) => choice(/[-+]?\d+/, ERROR_ALIAS($)),
edit_mode_value: ($) => choice(/emacs/i, /vi/i, ERROR_ALIAS($)),
keymap_value: ($) =>
/(emacs(-standard|-meta|-ctlx)?|vi(-move|-command|-insert)?)/i,
choice(
/(emacs(-standard|-meta|-ctlx)?|vi(-move|-command|-insert)?)/i,
ERROR_ALIAS($),
),

bool_variable: ($) =>
choice(
Expand Down
100 changes: 95 additions & 5 deletions src/grammar.json
Original file line number Diff line number Diff line change
Expand Up @@ -1088,6 +1088,22 @@
"type": "PATTERN",
"value": "off",
"flags": "i"
},
{
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "PATTERN",
"value": "\\S[^\\r\\n]*"
}
}
},
"named": true,
"value": "ERROR"
}
]
},
Expand All @@ -1108,6 +1124,22 @@
"type": "PATTERN",
"value": "audible",
"flags": "i"
},
{
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "PATTERN",
"value": "\\S[^\\r\\n]*"
}
}
},
"named": true,
"value": "ERROR"
}
]
},
Expand All @@ -1116,8 +1148,29 @@
"value": "\\S[^\\r\\n]*"
},
"number_value": {
"type": "PATTERN",
"value": "[-+]?\\d+"
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[-+]?\\d+"
},
{
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "PATTERN",
"value": "\\S[^\\r\\n]*"
}
}
},
"named": true,
"value": "ERROR"
}
]
},
"edit_mode_value": {
"type": "CHOICE",
Expand All @@ -1131,13 +1184,50 @@
"type": "PATTERN",
"value": "vi",
"flags": "i"
},
{
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "PATTERN",
"value": "\\S[^\\r\\n]*"
}
}
},
"named": true,
"value": "ERROR"
}
]
},
"keymap_value": {
"type": "PATTERN",
"value": "(emacs(-standard|-meta|-ctlx)?|vi(-move|-command|-insert)?)",
"flags": "i"
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "(emacs(-standard|-meta|-ctlx)?|vi(-move|-command|-insert)?)",
"flags": "i"
},
{
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "PATTERN",
"value": "\\S[^\\r\\n]*"
}
}
},
"named": true,
"value": "ERROR"
}
]
},
"bool_variable": {
"type": "CHOICE",
Expand Down
78 changes: 67 additions & 11 deletions src/node-types.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,32 @@
{
"type": "bell_value",
"named": true,
"fields": {}
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "ERROR",
"named": true
}
]
}
},
{
"type": "bool_value",
"named": true,
"fields": {}
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "ERROR",
"named": true
}
]
}
},
{
"type": "bool_variable",
Expand Down Expand Up @@ -107,7 +127,17 @@
{
"type": "edit_mode_value",
"named": true,
"fields": {}
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "ERROR",
"named": true
}
]
}
},
{
"type": "include_directive",
Expand Down Expand Up @@ -151,6 +181,21 @@
]
}
},
{
"type": "keymap_value",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "ERROR",
"named": true
}
]
}
},
{
"type": "keyname",
"named": true,
Expand Down Expand Up @@ -200,6 +245,21 @@
]
}
},
{
"type": "number_value",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "ERROR",
"named": true
}
]
}
},
{
"type": "number_variable",
"named": true,
Expand Down Expand Up @@ -441,6 +501,10 @@
"type": ">=",
"named": false
},
{
"type": "ERROR",
"named": true
},
{
"type": "application_name",
"named": true
Expand Down Expand Up @@ -469,10 +533,6 @@
"type": "key_literal",
"named": true
},
{
"type": "keymap_value",
"named": true
},
{
"type": "keymap_variable",
"named": true
Expand All @@ -481,10 +541,6 @@
"type": "mode",
"named": false
},
{
"type": "number_value",
"named": true
},
{
"type": "set",
"named": false
Expand Down

0 comments on commit e436eae

Please sign in to comment.