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, // >
|
$._r_blk_fld_bgn, $._br_blk_fld_bgn, // >
|
||||||
$._br_blk_str_ctn, // block scalar content
|
$._br_blk_str_ctn, // block scalar content
|
||||||
$._r_flw_seq_bgn, $._br_flw_seq_bgn, $._b_flw_seq_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_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_sep_bgn, $._br_flw_sep_bgn, // ,
|
||||||
$._r_flw_key_bgn, $._br_flw_key_bgn, // ?
|
$._r_flw_key_bgn, $._br_flw_key_bgn, // ?
|
||||||
$._r_flw_jsv_bgn, $._br_flw_jsv_bgn, // : (json key)
|
$._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),
|
_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),
|
_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),
|
_sgl_flw_seq_tal: $ => seq(optional($._r_sgl_flw_col_dat), $._r_flw_seq_end),
|
||||||
|
|
||||||
// flow mapping
|
// flow mapping
|
||||||
|
@ -317,7 +317,7 @@ module.exports = grammar({
|
||||||
_br_sgl_flw_map: $ => seq($._br_flw_map_bgn, $._sgl_flw_map_tal),
|
_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),
|
_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),
|
_sgl_flw_map_tal: $ => seq(optional($._r_sgl_flw_col_dat), $._r_flw_map_end),
|
||||||
|
|
||||||
// flow collection data
|
// 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_lit_bgn", "_br_blk_lit_bgn"),
|
||||||
..._(">", "_r_blk_fld_bgn", "_br_blk_fld_bgn"),
|
..._(">", "_r_blk_fld_bgn", "_br_blk_fld_bgn"),
|
||||||
..._("[", "_r_flw_seq_bgn", "_br_flw_seq_bgn", "_b_flw_seq_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_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_sep_bgn", "_br_flw_sep_bgn"),
|
||||||
..._("?", "_r_flw_key_bgn", "_br_flw_key_bgn"),
|
..._("?", "_r_flw_key_bgn", "_br_flw_key_bgn"),
|
||||||
..._(":", "_r_flw_jsv_bgn", "_br_flw_jsv_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,
|
"named": false,
|
||||||
"value": "]"
|
"value": "]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_flw_seq_end"
|
||||||
|
},
|
||||||
|
"named": false,
|
||||||
|
"value": "]"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -3586,6 +3595,15 @@
|
||||||
},
|
},
|
||||||
"named": false,
|
"named": false,
|
||||||
"value": "}"
|
"value": "}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_flw_map_end"
|
||||||
|
},
|
||||||
|
"named": false,
|
||||||
|
"value": "}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -6625,6 +6643,10 @@
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_br_flw_seq_end"
|
"name": "_br_flw_seq_end"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_flw_seq_end"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_r_flw_map_bgn"
|
"name": "_r_flw_map_bgn"
|
||||||
|
@ -6645,6 +6667,10 @@
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_br_flw_map_end"
|
"name": "_br_flw_map_end"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_flw_map_end"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_r_flw_sep_bgn"
|
"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,
|
R_BLK_FLD_BGN, BR_BLK_FLD_BGN,
|
||||||
BR_BLK_STR_CTN,
|
BR_BLK_STR_CTN,
|
||||||
R_FLW_SEQ_BGN, BR_FLW_SEQ_BGN, B_FLW_SEQ_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_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_SEP_BGN, BR_FLW_SEP_BGN,
|
||||||
R_FLW_KEY_BGN, BR_FLW_KEY_BGN,
|
R_FLW_KEY_BGN, BR_FLW_KEY_BGN,
|
||||||
R_FLW_JSV_BGN, BR_FLW_JSV_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);
|
mrk_end(scanner, lexer);
|
||||||
RET_SYM(BR_FLW_SEQ_END)
|
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 == '{') {
|
} else if (lexer->lookahead == '{') {
|
||||||
if (valid_symbols[R_FLW_MAP_BGN] && is_r) {
|
if (valid_symbols[R_FLW_MAP_BGN] && is_r) {
|
||||||
MAY_UPD_IMP_COL();
|
MAY_UPD_IMP_COL();
|
||||||
|
@ -1007,6 +1012,11 @@ bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
|
||||||
mrk_end(scanner, lexer);
|
mrk_end(scanner, lexer);
|
||||||
RET_SYM(BR_FLW_MAP_END)
|
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 == ',') {
|
} else if (lexer->lookahead == ',') {
|
||||||
if (valid_symbols[R_FLW_SEP_BGN] && is_r) {
|
if (valid_symbols[R_FLW_SEP_BGN] && is_r) {
|
||||||
adv(scanner, lexer);
|
adv(scanner, lexer);
|
||||||
|
|
|
@ -1664,6 +1664,49 @@ Flow Mapping
|
||||||
(plain_scalar
|
(plain_scalar
|
||||||
(string_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
|
Flow mapping colon on line after key
|
||||||
================================================================================
|
================================================================================
|
||||||
|
@ -1761,6 +1804,45 @@ Flow Sequence
|
||||||
(plain_scalar
|
(plain_scalar
|
||||||
(integer_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
|
Flow Sequence in Block Mapping
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
Loading…
Reference in a new issue