Skip to content

Commit 8dae85e

Browse files
committed
Ruby: avoid repeated construction of table name strings
1 parent 0a8ecd3 commit 8dae85e

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

ruby/extractor/src/extractor.rs

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,17 +136,15 @@ pub fn extract(
136136
let tree = parser.parse(&source, None).expect("Failed to parse file");
137137
trap_writer.comment(format!("Auto-generated TRAP file for {}", path_str));
138138
let file_label = populate_file(trap_writer, path);
139-
let mut visitor = Visitor {
139+
let mut visitor = Visitor::new(
140140
source,
141141
trap_writer,
142142
// TODO: should we handle path strings that are not valid UTF8 better?
143-
path: &path_str,
143+
&path_str,
144144
file_label,
145-
toplevel_child_counter: 0,
146-
stack: Vec::new(),
147145
language_prefix,
148146
schema,
149-
};
147+
);
150148
traverse(&tree, &mut visitor);
151149

152150
parser.reset();
@@ -210,8 +208,10 @@ struct Visitor<'a> {
210208
trap_writer: &'a mut trap::Writer,
211209
/// A counter for top-level child nodes
212210
toplevel_child_counter: usize,
213-
/// Language prefix
214-
language_prefix: &'a str,
211+
/// Language-specific name of the AST info table
212+
ast_node_info_table_name: String,
213+
/// Language-specific name of the tokeninfo table
214+
tokeninfo_table_name: String,
215215
/// A lookup table from type name to node types
216216
schema: &'a NodeTypeMap,
217217
/// A stack for gathering information from child nodes. Whenever a node is
@@ -223,7 +223,28 @@ struct Visitor<'a> {
223223
stack: Vec<(trap::Label, usize, Vec<ChildNode>)>,
224224
}
225225

226-
impl Visitor<'_> {
226+
impl<'a> Visitor<'a> {
227+
fn new(
228+
source: &'a [u8],
229+
trap_writer: &'a mut trap::Writer,
230+
path: &'a str,
231+
file_label: trap::Label,
232+
language_prefix: &str,
233+
schema: &'a NodeTypeMap,
234+
) -> Visitor<'a> {
235+
Visitor {
236+
path,
237+
file_label,
238+
source,
239+
trap_writer,
240+
toplevel_child_counter: 0,
241+
ast_node_info_table_name: format!("{}_ast_node_info", language_prefix),
242+
tokeninfo_table_name: format!("{}_tokeninfo", language_prefix),
243+
schema,
244+
stack: Vec::new(),
245+
}
246+
}
247+
227248
fn record_parse_error(
228249
&mut self,
229250
error_message: String,
@@ -321,7 +342,7 @@ impl Visitor<'_> {
321342
match &table.kind {
322343
EntryKind::Token { kind_id, .. } => {
323344
self.trap_writer.add_tuple(
324-
&format!("{}_ast_node_info", self.language_prefix),
345+
&self.ast_node_info_table_name,
325346
vec![
326347
trap::Arg::Label(id),
327348
trap::Arg::Label(parent_id),
@@ -330,12 +351,11 @@ impl Visitor<'_> {
330351
],
331352
);
332353
self.trap_writer.add_tuple(
333-
&format!("{}_tokeninfo", self.language_prefix),
354+
&self.tokeninfo_table_name,
334355
vec![
335356
trap::Arg::Label(id),
336357
trap::Arg::Int(*kind_id),
337358
sliced_source_arg(self.source, node),
338-
trap::Arg::Label(loc),
339359
],
340360
);
341361
}
@@ -345,7 +365,7 @@ impl Visitor<'_> {
345365
} => {
346366
if let Some(args) = self.complex_node(&node, fields, &child_nodes, id) {
347367
self.trap_writer.add_tuple(
348-
&format!("{}_ast_node_info", self.language_prefix),
368+
&self.ast_node_info_table_name,
349369
vec![
350370
trap::Arg::Label(id),
351371
trap::Arg::Label(parent_id),

0 commit comments

Comments
 (0)