fix: trailing whitespaces are allowed for local_time
(#3)
Input: (each `·` indicates a whitespace) ```toml valid·=·1979-05-27· ``` Output: ``` # before (file (ERROR (key))) # after (file (pair (key) (local_date))) ```
This commit is contained in:
parent
9bdd88e854
commit
752419c33d
|
@ -7,3 +7,6 @@ indent_size = 2
|
||||||
indent_style = space
|
indent_style = space
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[corpus/*]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
|
@ -64,7 +64,7 @@ invalid2 = 1979-05-27 T 07:32:00 Z
|
||||||
|
|
||||||
(file
|
(file
|
||||||
(ERROR
|
(ERROR
|
||||||
(key) (ERROR) (local_time) (local_time)
|
(key) (local_date) (local_time) (local_time)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -78,11 +78,22 @@ invalid2 = 1979-05-27 T 07:32:00
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
(file
|
(file
|
||||||
(pair
|
(ERROR
|
||||||
(key) (ERROR) (local_time)
|
(key) (local_date) (local_time) (local_time)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
VALID - local date - trailing whitespaces are allowed
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
valid = 1979-05-27
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(file
|
||||||
(pair
|
(pair
|
||||||
(key) (ERROR) (local_time)
|
(key) (local_date)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
14
grammar.js
14
grammar.js
|
@ -153,18 +153,14 @@ module.exports = grammar({
|
||||||
boolean: $ => /true|false/,
|
boolean: $ => /true|false/,
|
||||||
|
|
||||||
offset_date_time: $ =>
|
offset_date_time: $ =>
|
||||||
seq(
|
concatRegex(
|
||||||
rfc3339_date,
|
rfc3339_date,
|
||||||
token.immediate(rfc3339_delimiter),
|
rfc3339_delimiter,
|
||||||
token.immediate(rfc3339_time),
|
rfc3339_time,
|
||||||
token.immediate(rfc3339_offset)
|
rfc3339_offset
|
||||||
),
|
),
|
||||||
local_date_time: $ =>
|
local_date_time: $ =>
|
||||||
seq(
|
concatRegex(rfc3339_date, rfc3339_delimiter, rfc3339_time),
|
||||||
rfc3339_date,
|
|
||||||
token.immediate(rfc3339_delimiter),
|
|
||||||
token.immediate(rfc3339_time)
|
|
||||||
),
|
|
||||||
local_date: $ => rfc3339_date,
|
local_date: $ => rfc3339_date,
|
||||||
local_time: $ => rfc3339_time,
|
local_time: $ => rfc3339_time,
|
||||||
|
|
||||||
|
|
53
src/grammar.json
generated
53
src/grammar.json
generated
|
@ -563,57 +563,12 @@
|
||||||
"value": "true|false"
|
"value": "true|false"
|
||||||
},
|
},
|
||||||
"offset_date_time": {
|
"offset_date_time": {
|
||||||
"type": "SEQ",
|
"type": "PATTERN",
|
||||||
"members": [
|
"value": "(([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]))([ tT])(([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)([.][0-9]+)?)(([zZ])|([+-]([01][0-9]|2[0-3]):[0-5][0-9]))"
|
||||||
{
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "IMMEDIATE_TOKEN",
|
|
||||||
"content": {
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "[ tT]"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "IMMEDIATE_TOKEN",
|
|
||||||
"content": {
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)([.][0-9]+)?"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "IMMEDIATE_TOKEN",
|
|
||||||
"content": {
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "([zZ])|([+-]([01][0-9]|2[0-3]):[0-5][0-9])"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"local_date_time": {
|
"local_date_time": {
|
||||||
"type": "SEQ",
|
"type": "PATTERN",
|
||||||
"members": [
|
"value": "(([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]))([ tT])(([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)([.][0-9]+)?)"
|
||||||
{
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "IMMEDIATE_TOKEN",
|
|
||||||
"content": {
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "[ tT]"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "IMMEDIATE_TOKEN",
|
|
||||||
"content": {
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)([.][0-9]+)?"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"local_date": {
|
"local_date": {
|
||||||
"type": "PATTERN",
|
"type": "PATTERN",
|
||||||
|
|
27
src/node-types.json
generated
27
src/node-types.json
generated
|
@ -132,21 +132,6 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "local_date",
|
|
||||||
"named": true,
|
|
||||||
"fields": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "local_date_time",
|
|
||||||
"named": true,
|
|
||||||
"fields": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "offset_date_time",
|
|
||||||
"named": true,
|
|
||||||
"fields": {}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "pair",
|
"type": "pair",
|
||||||
"named": true,
|
"named": true,
|
||||||
|
@ -327,6 +312,18 @@
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "offset_date_time",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "local_date_time",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "local_date",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "local_time",
|
"type": "local_time",
|
||||||
"named": true
|
"named": true
|
||||||
|
|
4455
src/parser.c
generated
4455
src/parser.c
generated
File diff suppressed because it is too large
Load diff
|
@ -15,6 +15,10 @@ bool tree_sitter_toml_external_scanner_scan(
|
||||||
TSLexer *lexer,
|
TSLexer *lexer,
|
||||||
const bool *valid_symbols
|
const bool *valid_symbols
|
||||||
) {
|
) {
|
||||||
|
while (lexer->lookahead == ' ' || lexer->lookahead == '\t') {
|
||||||
|
lexer->advance(lexer, true);
|
||||||
|
}
|
||||||
|
|
||||||
if (lexer->lookahead == 0 || lexer->lookahead == '\n') {
|
if (lexer->lookahead == 0 || lexer->lookahead == '\n') {
|
||||||
lexer->result_symbol = LINE_ENDING_OR_EOF;
|
lexer->result_symbol = LINE_ENDING_OR_EOF;
|
||||||
lexer->mark_end(lexer);
|
lexer->mark_end(lexer);
|
||||||
|
|
Loading…
Reference in a new issue