toml: support checking and decoding quoted keys (#12552)
parent
0779b5fd8e
commit
1be6aed16e
|
@ -366,7 +366,7 @@ fn (c Checker) check_time(t ast.Time) ? {
|
|||
}
|
||||
|
||||
// check_quoted returns an error if `q` is not a valid quoted TOML string.
|
||||
fn (c Checker) check_quoted(q ast.Quoted) ? {
|
||||
pub fn (c Checker) check_quoted(q ast.Quoted) ? {
|
||||
lit := q.text
|
||||
quote := q.quote.ascii_str()
|
||||
triple_quote := quote + quote + quote
|
||||
|
|
|
@ -1061,16 +1061,25 @@ pub fn (mut p Parser) key() ?ast.Key {
|
|||
' key expected .bare, .underscore, .number, .quoted or .boolean but got "$p.tok.kind"')
|
||||
}
|
||||
|
||||
// A small exception that can't easily be done via `checker`
|
||||
// since the `is_multiline` information is lost when using the key.text as a
|
||||
// A few small exceptions that can't easily be done via `checker` or `decoder` *after* the
|
||||
// main table has been build since information like `is_multiline` is lost when using the key.text as a
|
||||
// V `map` key directly.
|
||||
if p.config.run_checks {
|
||||
if key is ast.Quoted {
|
||||
if key is ast.Quoted {
|
||||
if p.config.run_checks {
|
||||
quoted := key as ast.Quoted
|
||||
if quoted.is_multiline {
|
||||
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
||||
' multiline string as key is not allowed. (excerpt): "...${p.excerpt()}..."')
|
||||
}
|
||||
chckr := checker.Checker{
|
||||
scanner: p.scanner
|
||||
}
|
||||
chckr.check_quoted(quoted) ?
|
||||
}
|
||||
if p.config.decode_values {
|
||||
mut quoted := key as ast.Quoted
|
||||
decoder.decode_quoted_escapes(mut quoted) ?
|
||||
key = ast.Key(quoted)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,8 +19,6 @@ const (
|
|||
'integer/long.toml', // TODO awaits BUG fix with strconv.parse_int('-9223372036854775808')
|
||||
// Date-time
|
||||
'datetime/milliseconds.toml',
|
||||
// Key
|
||||
'key/escapes.toml',
|
||||
]
|
||||
|
||||
jq = os.find_abs_path_of_executable('jq') or { '' }
|
||||
|
|
Loading…
Reference in New Issue