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
(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]

View file

@ -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

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",
"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

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_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);