Use array for infos
This commit is contained in:
parent
5276a7d3be
commit
15af7ad36c
@ -40,28 +40,20 @@ impl Grammar {
|
||||
).unwrap();
|
||||
}
|
||||
acc.push_str("\n");
|
||||
write!(acc, "static INFOS: [SyntaxInfo; {}] = [\n", self.syntax_kinds.len()).unwrap();
|
||||
for kind in self.syntax_kinds.iter() {
|
||||
let sname = scream(kind);
|
||||
write!(
|
||||
acc,
|
||||
"static {sname}_INFO: SyntaxInfo = SyntaxInfo {{\n name: \"{sname}\",\n}};\n",
|
||||
" SyntaxInfo {{ name: \"{sname}\" }},\n",
|
||||
sname = sname
|
||||
).unwrap();
|
||||
}
|
||||
acc.push_str("];\n");
|
||||
acc.push_str("\n");
|
||||
|
||||
acc.push_str("pub(crate) fn syntax_info(kind: SyntaxKind) -> &'static SyntaxInfo {\n");
|
||||
acc.push_str(" match kind {\n");
|
||||
for kind in self.syntax_kinds.iter() {
|
||||
let sname = scream(kind);
|
||||
write!(
|
||||
acc,
|
||||
" {sname} => &{sname}_INFO,\n",
|
||||
sname = sname
|
||||
).unwrap();
|
||||
}
|
||||
acc.push_str(" _ => unreachable!()\n");
|
||||
acc.push_str(" }\n");
|
||||
acc.push_str(" &INFOS[kind.0 as usize]\n");
|
||||
acc.push_str("}\n");
|
||||
acc
|
||||
}
|
||||
|
@ -4,17 +4,11 @@ use tree::{SyntaxKind, SyntaxInfo};
|
||||
pub const IDENT: SyntaxKind = SyntaxKind(0);
|
||||
pub const WHITESPACE: SyntaxKind = SyntaxKind(1);
|
||||
|
||||
static IDENT_INFO: SyntaxInfo = SyntaxInfo {
|
||||
name: "IDENT",
|
||||
};
|
||||
static WHITESPACE_INFO: SyntaxInfo = SyntaxInfo {
|
||||
name: "WHITESPACE",
|
||||
};
|
||||
static INFOS: [SyntaxInfo; 2] = [
|
||||
SyntaxInfo { name: "IDENT" },
|
||||
SyntaxInfo { name: "WHITESPACE" },
|
||||
];
|
||||
|
||||
pub(crate) fn syntax_info(kind: SyntaxKind) -> &'static SyntaxInfo {
|
||||
match kind {
|
||||
IDENT => &IDENT_INFO,
|
||||
WHITESPACE => &WHITESPACE_INFO,
|
||||
_ => unreachable!()
|
||||
}
|
||||
&INFOS[kind.0 as usize]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user