feat: add literal aliases (#11)

This commit is contained in:
Ika 2020-09-28 22:07:27 +08:00 committed by GitHub
parent b26d567070
commit f75b1f93cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 10997 additions and 10302 deletions

View file

@ -1105,8 +1105,9 @@ block: ># comment
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(ERROR (ERROR
(flow_node (block_mapping_pair
(plain_scalar))) key: (flow_node
(plain_scalar))))
================================================================================ ================================================================================
Comment without whitespace after doublequoted scalar [INVALID] Comment without whitespace after doublequoted scalar [INVALID]
@ -2129,8 +2130,9 @@ a:
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(ERROR (ERROR
(flow_node (block_mapping_pair
(plain_scalar))) key: (flow_node
(plain_scalar))))
================================================================================ ================================================================================
Invalid tag [INVALID] Invalid tag [INVALID]
@ -2310,9 +2312,11 @@ Mapping starting at --- line [INVALID]
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(ERROR (stream
(flow_node (document
(plain_scalar))) (flow_node
(plain_scalar)))
(MISSING _eof))
================================================================================ ================================================================================
Mapping with anchor on document start line [INVALID] Mapping with anchor on document start line [INVALID]
@ -3581,8 +3585,9 @@ key: - a
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(ERROR (ERROR
(flow_node (block_mapping_pair
(plain_scalar))) key: (flow_node
(plain_scalar))))
================================================================================ ================================================================================
Sequence With Same Indentation as Parent Mapping Sequence With Same Indentation as Parent Mapping
@ -8576,10 +8581,8 @@ c"
key: (flow_node key: (flow_node
(plain_scalar))) (plain_scalar)))
(ERROR (ERROR
(flow_node (plain_scalar)
(plain_scalar)) (plain_scalar))))))
(flow_node
(plain_scalar)))))))
================================================================================ ================================================================================
Wrong indented sequence item [INVALID] Wrong indented sequence item [INVALID]

View file

@ -18,7 +18,8 @@ module.exports = grammar({
$._r_blk_key_bgn, $._br_blk_key_bgn, $._b_blk_key_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_val_bgn, $._br_blk_val_bgn, $._b_blk_val_bgn, // :
$._r_blk_imp_bgn, // : (implicit) $._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 $._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, // ]
@ -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))), _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))), _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), _r_blk_str: $ => seq(choice($._r_blk_lit_bgn, $._r_blk_fld_bgn), repeat($._br_blk_str_ctn), $._bl),
_br_blk_str: $ => seq($._br_blk_str_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 // 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_directive", "_s_dir_yml"),
..._("yaml_version", "_r_dir_yml_ver"), ..._("yaml_version", "_r_dir_yml_ver"),
..._("tag_directive", "_s_dir_tag"), ..._("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", ..._("escape_sequence", "_r_dqt_esc_nwl", "_br_dqt_esc_nwl",
"_r_dqt_esc_seq", "_br_dqt_esc_seq", "_r_dqt_esc_seq", "_br_dqt_esc_seq",
"_r_sqt_esc_sqt", "_br_sqt_esc_sqt"), "_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) { function _(alias_value, ...rule_names) {
@ -529,9 +551,11 @@ function recursive_alias(rule, alias_map, checklist) {
case "SYMBOL": case "SYMBOL":
if (rule.name in alias_map) { if (rule.name in alias_map) {
checklist[rule.name]++; 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 "BLANK":
case "ALIAS":
return rule; return rule;
default: default:
throw new Error(`Unexpected rule type ${JSON.stringify(rule.type)}`); throw new Error(`Unexpected rule type ${JSON.stringify(rule.type)}`);

769
src/grammar.json generated

File diff suppressed because it is too large Load diff

56
src/node-types.json generated
View file

@ -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", "type": "alias",
"named": true "named": true
@ -393,5 +437,17 @@
{ {
"type": "yaml_version", "type": "yaml_version",
"named": true "named": true
},
{
"type": "{",
"named": false
},
{
"type": "|",
"named": false
},
{
"type": "}",
"named": false
} }
] ]

20399
src/parser.c generated

File diff suppressed because it is too large Load diff

View file

@ -17,7 +17,8 @@ enum TokenType {
R_BLK_KEY_BGN, BR_BLK_KEY_BGN, B_BLK_KEY_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_VAL_BGN, BR_BLK_VAL_BGN, B_BLK_VAL_BGN,
R_BLK_IMP_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, 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,
@ -848,9 +849,12 @@ struct Scanner {
if (is_br_dqt_esc_seq) return scn_dqt_esc_seq(lexer, BR_DQT_ESC_SEQ); if (is_br_dqt_esc_seq) return scn_dqt_esc_seq(lexer, BR_DQT_ESC_SEQ);
return false; return false;
} }
} else if (LKA == '|' || LKA == '>') { } else if (LKA == '|') {
if (VLD[R_BLK_STR_BGN] && is_r) return scn_blk_str_bgn(lexer, R_BLK_STR_BGN); if (VLD[R_BLK_LIT_BGN] && is_r) return scn_blk_str_bgn(lexer, R_BLK_LIT_BGN);
if (VLD[BR_BLK_STR_BGN] && is_br) return scn_blk_str_bgn(lexer, BR_BLK_STR_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); 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);