feat(generate): add an extra field for extra nodes in node-types.json
This commit is contained in:
parent
f941277a9d
commit
b26adf4265
1 changed files with 48 additions and 0 deletions
|
|
@ -39,6 +39,8 @@ pub struct NodeInfoJSON {
|
||||||
named: bool,
|
named: bool,
|
||||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||||
root: bool,
|
root: bool,
|
||||||
|
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||||
|
extra: bool,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
fields: Option<BTreeMap<String, FieldInfoJSON>>,
|
fields: Option<BTreeMap<String, FieldInfoJSON>>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
|
@ -517,6 +519,7 @@ pub fn generate_node_types_json(
|
||||||
kind: variable.name.clone(),
|
kind: variable.name.clone(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
fields: None,
|
fields: None,
|
||||||
children: None,
|
children: None,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
|
|
@ -560,6 +563,7 @@ pub fn generate_node_types_json(
|
||||||
kind: kind.clone(),
|
kind: kind.clone(),
|
||||||
named: is_named,
|
named: is_named,
|
||||||
root: i == 0,
|
root: i == 0,
|
||||||
|
extra: false,
|
||||||
fields: Some(BTreeMap::new()),
|
fields: Some(BTreeMap::new()),
|
||||||
children: None,
|
children: None,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
|
|
@ -664,6 +668,29 @@ pub fn generate_node_types_json(
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
let extra_names = syntax_grammar
|
||||||
|
.extra_symbols
|
||||||
|
.iter()
|
||||||
|
.flat_map(|symbol| {
|
||||||
|
aliases_by_symbol
|
||||||
|
.get(symbol)
|
||||||
|
.unwrap_or(&empty)
|
||||||
|
.iter()
|
||||||
|
.map(|alias| {
|
||||||
|
alias.as_ref().map_or(
|
||||||
|
match symbol.kind {
|
||||||
|
SymbolType::NonTerminal => &syntax_grammar.variables[symbol.index].name,
|
||||||
|
SymbolType::Terminal => &lexical_grammar.variables[symbol.index].name,
|
||||||
|
SymbolType::External => {
|
||||||
|
&syntax_grammar.external_tokens[symbol.index].name
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
},
|
||||||
|
|alias| &alias.value,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.collect::<HashSet<_>>();
|
||||||
|
|
||||||
for (name, kind) in regular_tokens.chain(external_tokens) {
|
for (name, kind) in regular_tokens.chain(external_tokens) {
|
||||||
match kind {
|
match kind {
|
||||||
|
|
@ -675,6 +702,7 @@ pub fn generate_node_types_json(
|
||||||
kind: name.clone(),
|
kind: name.clone(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: extra_names.contains(&name),
|
||||||
fields: None,
|
fields: None,
|
||||||
children: None,
|
children: None,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
|
|
@ -692,6 +720,7 @@ pub fn generate_node_types_json(
|
||||||
kind: name.clone(),
|
kind: name.clone(),
|
||||||
named: false,
|
named: false,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: extra_names.contains(&name),
|
||||||
fields: None,
|
fields: None,
|
||||||
children: None,
|
children: None,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
|
|
@ -810,6 +839,7 @@ mod tests {
|
||||||
kind: "v1".to_string(),
|
kind: "v1".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: Some(
|
fields: Some(
|
||||||
|
|
@ -848,6 +878,7 @@ mod tests {
|
||||||
kind: ";".to_string(),
|
kind: ";".to_string(),
|
||||||
named: false,
|
named: false,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: None
|
fields: None
|
||||||
|
|
@ -859,6 +890,7 @@ mod tests {
|
||||||
kind: "v2".to_string(),
|
kind: "v2".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: None
|
fields: None
|
||||||
|
|
@ -904,6 +936,7 @@ mod tests {
|
||||||
kind: "v1".to_string(),
|
kind: "v1".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: Some(
|
fields: Some(
|
||||||
|
|
@ -942,6 +975,7 @@ mod tests {
|
||||||
kind: ";".to_string(),
|
kind: ";".to_string(),
|
||||||
named: false,
|
named: false,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: None
|
fields: None
|
||||||
|
|
@ -953,6 +987,7 @@ mod tests {
|
||||||
kind: "v2".to_string(),
|
kind: "v2".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: None
|
fields: None
|
||||||
|
|
@ -964,6 +999,7 @@ mod tests {
|
||||||
kind: "v3".to_string(),
|
kind: "v3".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: true,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: None
|
fields: None
|
||||||
|
|
@ -1010,6 +1046,7 @@ mod tests {
|
||||||
kind: "_v2".to_string(),
|
kind: "_v2".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
fields: None,
|
fields: None,
|
||||||
children: None,
|
children: None,
|
||||||
subtypes: Some(vec![
|
subtypes: Some(vec![
|
||||||
|
|
@ -1034,6 +1071,7 @@ mod tests {
|
||||||
kind: "v1".to_string(),
|
kind: "v1".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: Some(
|
fields: Some(
|
||||||
|
|
@ -1097,6 +1135,7 @@ mod tests {
|
||||||
kind: "v1".to_string(),
|
kind: "v1".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: Some(FieldInfoJSON {
|
children: Some(FieldInfoJSON {
|
||||||
multiple: true,
|
multiple: true,
|
||||||
|
|
@ -1135,6 +1174,7 @@ mod tests {
|
||||||
kind: "v2".to_string(),
|
kind: "v2".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: Some(FieldInfoJSON {
|
children: Some(FieldInfoJSON {
|
||||||
multiple: false,
|
multiple: false,
|
||||||
|
|
@ -1180,6 +1220,7 @@ mod tests {
|
||||||
kind: "v1".to_string(),
|
kind: "v1".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: Some(FieldInfoJSON {
|
children: Some(FieldInfoJSON {
|
||||||
multiple: true,
|
multiple: true,
|
||||||
|
|
@ -1254,6 +1295,7 @@ mod tests {
|
||||||
kind: "identifier".to_string(),
|
kind: "identifier".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: None,
|
fields: None,
|
||||||
|
|
@ -1265,6 +1307,7 @@ mod tests {
|
||||||
kind: "type_identifier".to_string(),
|
kind: "type_identifier".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: None,
|
fields: None,
|
||||||
|
|
@ -1307,6 +1350,7 @@ mod tests {
|
||||||
kind: "a".to_string(),
|
kind: "a".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: Some(FieldInfoJSON {
|
children: Some(FieldInfoJSON {
|
||||||
multiple: true,
|
multiple: true,
|
||||||
|
|
@ -1355,6 +1399,7 @@ mod tests {
|
||||||
kind: "script".to_string(),
|
kind: "script".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
fields: Some(BTreeMap::new()),
|
fields: Some(BTreeMap::new()),
|
||||||
children: None,
|
children: None,
|
||||||
subtypes: None
|
subtypes: None
|
||||||
|
|
@ -1412,6 +1457,7 @@ mod tests {
|
||||||
kind: "a".to_string(),
|
kind: "a".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: None,
|
children: None,
|
||||||
fields: Some(
|
fields: Some(
|
||||||
|
|
@ -1468,6 +1514,7 @@ mod tests {
|
||||||
kind: "script".to_string(),
|
kind: "script".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: true,
|
root: true,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
// Only one node
|
// Only one node
|
||||||
children: Some(FieldInfoJSON {
|
children: Some(FieldInfoJSON {
|
||||||
|
|
@ -1523,6 +1570,7 @@ mod tests {
|
||||||
kind: "b".to_string(),
|
kind: "b".to_string(),
|
||||||
named: true,
|
named: true,
|
||||||
root: false,
|
root: false,
|
||||||
|
extra: false,
|
||||||
subtypes: None,
|
subtypes: None,
|
||||||
children: Some(FieldInfoJSON {
|
children: Some(FieldInfoJSON {
|
||||||
multiple: true,
|
multiple: true,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue