feat: add literal aliases (#11)
This commit is contained in:
parent
b26d567070
commit
f75b1f93cb
|
@ -1105,8 +1105,9 @@ block: ># comment
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
(ERROR
|
||||
(flow_node
|
||||
(plain_scalar)))
|
||||
(block_mapping_pair
|
||||
key: (flow_node
|
||||
(plain_scalar))))
|
||||
|
||||
================================================================================
|
||||
Comment without whitespace after doublequoted scalar [INVALID]
|
||||
|
@ -2129,8 +2130,9 @@ a:
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
(ERROR
|
||||
(flow_node
|
||||
(plain_scalar)))
|
||||
(block_mapping_pair
|
||||
key: (flow_node
|
||||
(plain_scalar))))
|
||||
|
||||
================================================================================
|
||||
Invalid tag [INVALID]
|
||||
|
@ -2310,9 +2312,11 @@ Mapping starting at --- line [INVALID]
|
|||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(ERROR
|
||||
(flow_node
|
||||
(plain_scalar)))
|
||||
(stream
|
||||
(document
|
||||
(flow_node
|
||||
(plain_scalar)))
|
||||
(MISSING _eof))
|
||||
|
||||
================================================================================
|
||||
Mapping with anchor on document start line [INVALID]
|
||||
|
@ -3581,8 +3585,9 @@ key: - a
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
(ERROR
|
||||
(flow_node
|
||||
(plain_scalar)))
|
||||
(block_mapping_pair
|
||||
key: (flow_node
|
||||
(plain_scalar))))
|
||||
|
||||
================================================================================
|
||||
Sequence With Same Indentation as Parent Mapping
|
||||
|
@ -8576,10 +8581,8 @@ c"
|
|||
key: (flow_node
|
||||
(plain_scalar)))
|
||||
(ERROR
|
||||
(flow_node
|
||||
(plain_scalar))
|
||||
(flow_node
|
||||
(plain_scalar)))))))
|
||||
(plain_scalar)
|
||||
(plain_scalar))))))
|
||||
|
||||
================================================================================
|
||||
Wrong indented sequence item [INVALID]
|
||||
|
|
34
grammar.js
34
grammar.js
|
@ -18,7 +18,8 @@ module.exports = grammar({
|
|||
$._r_blk_key_bgn, $._br_blk_key_bgn, $._b_blk_key_bgn, // ?
|
||||
$._r_blk_val_bgn, $._br_blk_val_bgn, $._b_blk_val_bgn, // :
|
||||
$._r_blk_imp_bgn, // : (implicit)
|
||||
$._r_blk_str_bgn, $._br_blk_str_bgn, // | >
|
||||
$._r_blk_lit_bgn, $._br_blk_lit_bgn, // |
|
||||
$._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, // ]
|
||||
|
@ -229,8 +230,8 @@ module.exports = grammar({
|
|||
_r_blk_str_val: $ => choice($._r_blk_str, seq($._r_prp, choice($._r_blk_str, $._br_blk_str))),
|
||||
_br_blk_str_val: $ => choice($._br_blk_str, seq($._br_prp, choice($._r_blk_str, $._br_blk_str))),
|
||||
|
||||
_r_blk_str: $ => seq($._r_blk_str_bgn, repeat($._br_blk_str_ctn), $._bl),
|
||||
_br_blk_str: $ => seq($._br_blk_str_bgn, repeat($._br_blk_str_ctn), $._bl),
|
||||
_r_blk_str: $ => seq(choice($._r_blk_lit_bgn, $._r_blk_fld_bgn), repeat($._br_blk_str_ctn), $._bl),
|
||||
_br_blk_str: $ => seq(choice($._br_blk_lit_bgn, $._br_blk_fld_bgn), repeat($._br_blk_str_ctn), $._bl),
|
||||
|
||||
// flow value in block
|
||||
|
||||
|
@ -435,7 +436,7 @@ module.exports = grammar({
|
|||
},
|
||||
});
|
||||
|
||||
module.exports = global_alias(module.exports, {
|
||||
module.exports = global_alias(global_alias(module.exports, {
|
||||
..._("yaml_directive", "_s_dir_yml"),
|
||||
..._("yaml_version", "_r_dir_yml_ver"),
|
||||
..._("tag_directive", "_s_dir_tag"),
|
||||
|
@ -479,6 +480,27 @@ module.exports = global_alias(module.exports, {
|
|||
..._("escape_sequence", "_r_dqt_esc_nwl", "_br_dqt_esc_nwl",
|
||||
"_r_dqt_esc_seq", "_br_dqt_esc_seq",
|
||||
"_r_sqt_esc_sqt", "_br_sqt_esc_sqt"),
|
||||
}), {
|
||||
..._("---", "_s_drs_end"),
|
||||
..._("...", "_s_doc_end"),
|
||||
..._("-", "_r_blk_seq_bgn", "_br_blk_seq_bgn", "_b_blk_seq_bgn"),
|
||||
..._("?", "_r_blk_key_bgn", "_br_blk_key_bgn", "_b_blk_key_bgn"),
|
||||
..._(":", "_r_blk_val_bgn", "_br_blk_val_bgn", "_b_blk_val_bgn"),
|
||||
..._(":", "_r_blk_imp_bgn"),
|
||||
..._("|", "_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_map_bgn", "_br_flw_map_bgn", "_b_flw_map_bgn"),
|
||||
..._("}", "_r_flw_map_end", "_br_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"),
|
||||
..._(":", "_r_flw_njv_bgn", "_br_flw_njv_bgn"),
|
||||
..._("\"", "_r_dqt_str_bgn", "_br_dqt_str_bgn", "_b_dqt_str_bgn"),
|
||||
..._("\"", "_r_dqt_str_end", "_br_dqt_str_end"),
|
||||
..._("'", "_r_sqt_str_bgn", "_br_sqt_str_bgn", "_b_sqt_str_bgn"),
|
||||
..._("'", "_r_sqt_str_end", "_br_sqt_str_end"),
|
||||
});
|
||||
|
||||
function _(alias_value, ...rule_names) {
|
||||
|
@ -529,9 +551,11 @@ function recursive_alias(rule, alias_map, checklist) {
|
|||
case "SYMBOL":
|
||||
if (rule.name in alias_map) {
|
||||
checklist[rule.name]++;
|
||||
return { type: "ALIAS", content: rule, named: true, value: alias_map[rule.name].name };
|
||||
const alias = alias_map[rule.name].name;
|
||||
return { type: "ALIAS", content: rule, named: /[a-z]/i.test(alias), value: alias };
|
||||
}
|
||||
case "BLANK":
|
||||
case "ALIAS":
|
||||
return rule;
|
||||
default:
|
||||
throw new Error(`Unexpected rule type ${JSON.stringify(rule.type)}`);
|
||||
|
|
769
src/grammar.json
generated
769
src/grammar.json
generated
File diff suppressed because it is too large
Load diff
56
src/node-types.json
generated
56
src/node-types.json
generated
|
@ -354,6 +354,50 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "\"",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "'",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ",",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "-",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "---",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "...",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ":",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ">",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "?",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "[",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "]",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "alias",
|
||||
"named": true
|
||||
|
@ -393,5 +437,17 @@
|
|||
{
|
||||
"type": "yaml_version",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "{",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "|",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "}",
|
||||
"named": false
|
||||
}
|
||||
]
|
20399
src/parser.c
generated
20399
src/parser.c
generated
File diff suppressed because it is too large
Load diff
|
@ -17,7 +17,8 @@ enum TokenType {
|
|||
R_BLK_KEY_BGN, BR_BLK_KEY_BGN, B_BLK_KEY_BGN,
|
||||
R_BLK_VAL_BGN, BR_BLK_VAL_BGN, B_BLK_VAL_BGN,
|
||||
R_BLK_IMP_BGN,
|
||||
R_BLK_STR_BGN, BR_BLK_STR_BGN,
|
||||
R_BLK_LIT_BGN, BR_BLK_LIT_BGN,
|
||||
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,
|
||||
|
@ -848,9 +849,12 @@ struct Scanner {
|
|||
if (is_br_dqt_esc_seq) return scn_dqt_esc_seq(lexer, BR_DQT_ESC_SEQ);
|
||||
return false;
|
||||
}
|
||||
} else if (LKA == '|' || LKA == '>') {
|
||||
if (VLD[R_BLK_STR_BGN] && is_r) return scn_blk_str_bgn(lexer, R_BLK_STR_BGN);
|
||||
if (VLD[BR_BLK_STR_BGN] && is_br) return scn_blk_str_bgn(lexer, BR_BLK_STR_BGN);
|
||||
} else if (LKA == '|') {
|
||||
if (VLD[R_BLK_LIT_BGN] && is_r) return scn_blk_str_bgn(lexer, R_BLK_LIT_BGN);
|
||||
if (VLD[BR_BLK_LIT_BGN] && is_br) return scn_blk_str_bgn(lexer, BR_BLK_LIT_BGN);
|
||||
} else if (LKA == '>') {
|
||||
if (VLD[R_BLK_FLD_BGN] && is_r) return scn_blk_str_bgn(lexer, R_BLK_FLD_BGN);
|
||||
if (VLD[BR_BLK_FLD_BGN] && is_br) return scn_blk_str_bgn(lexer, BR_BLK_FLD_BGN);
|
||||
}
|
||||
|
||||
bool maybe_sgl_pln_blk = (VLD[R_SGL_PLN_BLK] && is_r) || (VLD[BR_SGL_PLN_BLK] && is_br) || (VLD[B_SGL_PLN_BLK] && is_b);
|
||||
|
|
Loading…
Reference in a new issue