fix: allow closing flow seq/map at same indentation
Resolves: https://github.com/ikatyang/tree-sitter-yaml/issues/29
This commit is contained in:
parent
10c6c7a69d
commit
c9ee63b15c
12
grammar.js
12
grammar.js
|
@ -22,9 +22,9 @@ module.exports = grammar({
|
|||
$._r_blk_fld_bgn, $._br_blk_fld_bgn, // >
|
||||
$._br_blk_str_ctn, // block scalar content
|
||||
$._r_flw_seq_bgn, $._br_flw_seq_bgn, $._b_flw_seq_bgn, // [
|
||||
$._r_flw_seq_end, $._br_flw_seq_end, // ]
|
||||
$._r_flw_seq_end, $._br_flw_seq_end, $._b_flw_seq_end, // ]
|
||||
$._r_flw_map_bgn, $._br_flw_map_bgn, $._b_flw_map_bgn, // {
|
||||
$._r_flw_map_end, $._br_flw_map_end, // }
|
||||
$._r_flw_map_end, $._br_flw_map_end, $._b_flw_map_end, // }
|
||||
$._r_flw_sep_bgn, $._br_flw_sep_bgn, // ,
|
||||
$._r_flw_key_bgn, $._br_flw_key_bgn, // ?
|
||||
$._r_flw_jsv_bgn, $._br_flw_jsv_bgn, // : (json key)
|
||||
|
@ -298,7 +298,7 @@ module.exports = grammar({
|
|||
_br_sgl_flw_seq: $ => seq($._br_flw_seq_bgn, $._sgl_flw_seq_tal),
|
||||
_b_sgl_flw_seq: $ => seq($._b_flw_seq_bgn, $._sgl_flw_seq_tal),
|
||||
|
||||
_flw_seq_tal: $ => seq(optional(choice($._r_flw_seq_dat, $._br_flw_seq_dat)), choice($._r_flw_seq_end, $._br_flw_seq_end)),
|
||||
_flw_seq_tal: $ => seq(optional(choice($._r_flw_seq_dat, $._br_flw_seq_dat)), choice($._r_flw_seq_end, $._br_flw_seq_end, $._b_flw_seq_end)),
|
||||
_sgl_flw_seq_tal: $ => seq(optional($._r_sgl_flw_col_dat), $._r_flw_seq_end),
|
||||
|
||||
// flow mapping
|
||||
|
@ -317,7 +317,7 @@ module.exports = grammar({
|
|||
_br_sgl_flw_map: $ => seq($._br_flw_map_bgn, $._sgl_flw_map_tal),
|
||||
_b_sgl_flw_map: $ => seq($._b_flw_map_bgn, $._sgl_flw_map_tal),
|
||||
|
||||
_flw_map_tal: $ => seq(optional(choice($._r_flw_map_dat, $._br_flw_map_dat)), choice($._r_flw_map_end, $._br_flw_map_end)),
|
||||
_flw_map_tal: $ => seq(optional(choice($._r_flw_map_dat, $._br_flw_map_dat)), choice($._r_flw_map_end, $._br_flw_map_end, $._b_flw_map_end)),
|
||||
_sgl_flw_map_tal: $ => seq(optional($._r_sgl_flw_col_dat), $._r_flw_map_end),
|
||||
|
||||
// flow collection data
|
||||
|
@ -529,9 +529,9 @@ module.exports.grammar = global_alias(global_alias(module.exports.grammar, {
|
|||
..._("|", "_r_blk_lit_bgn", "_br_blk_lit_bgn"),
|
||||
..._(">", "_r_blk_fld_bgn", "_br_blk_fld_bgn"),
|
||||
..._("[", "_r_flw_seq_bgn", "_br_flw_seq_bgn", "_b_flw_seq_bgn"),
|
||||
..._("]", "_r_flw_seq_end", "_br_flw_seq_end"),
|
||||
..._("]", "_r_flw_seq_end", "_br_flw_seq_end", "_b_flw_seq_end"),
|
||||
..._("{", "_r_flw_map_bgn", "_br_flw_map_bgn", "_b_flw_map_bgn"),
|
||||
..._("}", "_r_flw_map_end", "_br_flw_map_end"),
|
||||
..._("}", "_r_flw_map_end", "_br_flw_map_end", "_b_flw_map_end"),
|
||||
..._(",", "_r_flw_sep_bgn", "_br_flw_sep_bgn"),
|
||||
..._("?", "_r_flw_key_bgn", "_br_flw_key_bgn"),
|
||||
..._(":", "_r_flw_jsv_bgn", "_br_flw_jsv_bgn"),
|
||||
|
|
26
src/grammar.json
generated
26
src/grammar.json
generated
|
@ -3233,6 +3233,15 @@
|
|||
},
|
||||
"named": false,
|
||||
"value": "]"
|
||||
},
|
||||
{
|
||||
"type": "ALIAS",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_b_flw_seq_end"
|
||||
},
|
||||
"named": false,
|
||||
"value": "]"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -3586,6 +3595,15 @@
|
|||
},
|
||||
"named": false,
|
||||
"value": "}"
|
||||
},
|
||||
{
|
||||
"type": "ALIAS",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_b_flw_map_end"
|
||||
},
|
||||
"named": false,
|
||||
"value": "}"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -6625,6 +6643,10 @@
|
|||
"type": "SYMBOL",
|
||||
"name": "_br_flw_seq_end"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_b_flw_seq_end"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_r_flw_map_bgn"
|
||||
|
@ -6645,6 +6667,10 @@
|
|||
"type": "SYMBOL",
|
||||
"name": "_br_flw_map_end"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_b_flw_map_end"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_r_flw_sep_bgn"
|
||||
|
|
49960
src/parser.c
generated
49960
src/parser.c
generated
File diff suppressed because it is too large
Load diff
14
src/scanner.c
generated
14
src/scanner.c
generated
|
@ -22,9 +22,9 @@ typedef enum {
|
|||
R_BLK_FLD_BGN, BR_BLK_FLD_BGN,
|
||||
BR_BLK_STR_CTN,
|
||||
R_FLW_SEQ_BGN, BR_FLW_SEQ_BGN, B_FLW_SEQ_BGN,
|
||||
R_FLW_SEQ_END, BR_FLW_SEQ_END,
|
||||
R_FLW_SEQ_END, BR_FLW_SEQ_END, B_FLW_SEQ_END,
|
||||
R_FLW_MAP_BGN, BR_FLW_MAP_BGN, B_FLW_MAP_BGN,
|
||||
R_FLW_MAP_END, BR_FLW_MAP_END,
|
||||
R_FLW_MAP_END, BR_FLW_MAP_END, B_FLW_MAP_END,
|
||||
R_FLW_SEP_BGN, BR_FLW_SEP_BGN,
|
||||
R_FLW_KEY_BGN, BR_FLW_KEY_BGN,
|
||||
R_FLW_JSV_BGN, BR_FLW_JSV_BGN,
|
||||
|
@ -977,6 +977,11 @@ bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
|
|||
mrk_end(scanner, lexer);
|
||||
RET_SYM(BR_FLW_SEQ_END)
|
||||
}
|
||||
if (valid_symbols[B_FLW_SEQ_END] && is_b) {
|
||||
adv(scanner, lexer);
|
||||
mrk_end(scanner, lexer);
|
||||
RET_SYM(BR_FLW_SEQ_END)
|
||||
}
|
||||
} else if (lexer->lookahead == '{') {
|
||||
if (valid_symbols[R_FLW_MAP_BGN] && is_r) {
|
||||
MAY_UPD_IMP_COL();
|
||||
|
@ -1007,6 +1012,11 @@ bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
|
|||
mrk_end(scanner, lexer);
|
||||
RET_SYM(BR_FLW_MAP_END)
|
||||
}
|
||||
if (valid_symbols[B_FLW_MAP_END] && is_b) {
|
||||
adv(scanner, lexer);
|
||||
mrk_end(scanner, lexer);
|
||||
RET_SYM(BR_FLW_MAP_END)
|
||||
}
|
||||
} else if (lexer->lookahead == ',') {
|
||||
if (valid_symbols[R_FLW_SEP_BGN] && is_r) {
|
||||
adv(scanner, lexer);
|
||||
|
|
|
@ -1664,6 +1664,49 @@ Flow Mapping
|
|||
(plain_scalar
|
||||
(string_scalar))))))))
|
||||
|
||||
================================================================================
|
||||
Flow Mapping Closed at Original Indentation
|
||||
================================================================================
|
||||
first: {
|
||||
foo: you,
|
||||
bar: far
|
||||
}
|
||||
second: 2
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(stream
|
||||
(document
|
||||
(block_node
|
||||
(block_mapping
|
||||
(block_mapping_pair
|
||||
key: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
value: (flow_node
|
||||
(flow_mapping
|
||||
(flow_pair
|
||||
key: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
value: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar))))
|
||||
(flow_pair
|
||||
key: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
value: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))))))
|
||||
(block_mapping_pair
|
||||
key: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
value: (flow_node
|
||||
(plain_scalar
|
||||
(integer_scalar))))))))
|
||||
|
||||
================================================================================
|
||||
Flow mapping colon on line after key
|
||||
================================================================================
|
||||
|
@ -1761,6 +1804,45 @@ Flow Sequence
|
|||
(plain_scalar
|
||||
(integer_scalar)))))))
|
||||
|
||||
================================================================================
|
||||
Flow Sequence Closed at Original Indentation
|
||||
================================================================================
|
||||
first: [
|
||||
foo,
|
||||
b,
|
||||
42
|
||||
]
|
||||
second: 2
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(stream
|
||||
(document
|
||||
(block_node
|
||||
(block_mapping
|
||||
(block_mapping_pair
|
||||
key: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
value: (flow_node
|
||||
(flow_sequence
|
||||
(flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
(flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
(flow_node
|
||||
(plain_scalar
|
||||
(integer_scalar))))))
|
||||
(block_mapping_pair
|
||||
key: (flow_node
|
||||
(plain_scalar
|
||||
(string_scalar)))
|
||||
value: (flow_node
|
||||
(plain_scalar
|
||||
(integer_scalar))))))))
|
||||
|
||||
================================================================================
|
||||
Flow Sequence in Block Mapping
|
||||
================================================================================
|
||||
|
|
Loading…
Reference in a new issue