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:
Ika 2019-08-21 09:13:14 +08:00 committed by GitHub
parent 9bdd88e854
commit 752419c33d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 2145 additions and 2430 deletions

View file

@ -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

View file

@ -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)
) )
) )

View file

@ -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
View file

@ -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
View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -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);