Skip to content

Commit 9de9a73

Browse files
committed
Shorten expression operator choice types
1 parent 92574e1 commit 9de9a73

8 files changed

Lines changed: 932 additions & 1041 deletions

File tree

crates/codegen-v2/semantic/src/ir/builder.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ pub fn build_v2_ir_model(language: &Language) -> ModelWithBuilder {
2929
simplify_parameters(&mut mutator);
3030
simplify_mapping_type_parameters(&mut mutator);
3131
rename_operator_fields(&mut mutator);
32+
rename_operator_choice_types(&mut mutator);
3233
remove_unused_types(&mut mutator);
3334
remove_unreferenced_terminals(&mut mutator);
3435

@@ -384,6 +385,28 @@ fn rename_operator_fields(mutator: &mut IrModelMutator) {
384385
}
385386
}
386387

388+
// Rename auto-generated operator choice types from `Expression_<X>_Operator`
389+
// down to the more idiomatic `<X>Operator`. The long names come from
390+
// `add_precedence_expression`'s multi-operator branch (see ir/model.rs), which
391+
// formats `<base>_<expression>_Operator`.
392+
fn rename_operator_choice_types(mutator: &mut IrModelMutator) {
393+
let renames: Vec<(String, String)> = mutator
394+
.choices
395+
.keys()
396+
.filter_map(|name| {
397+
let middle = name
398+
.as_str()
399+
.strip_prefix("Expression_")?
400+
.strip_suffix("_Operator")?;
401+
Some((name.as_str().to_owned(), format!("{middle}Operator")))
402+
})
403+
.collect();
404+
405+
for (old_name, new_name) in renames {
406+
mutator.rename_choice_type(&old_name, &new_name);
407+
}
408+
}
409+
387410
// Removes terminals that are no longer referenced by any sequence field,
388411
// choice variant, or collection item. Useful as a final cleanup after
389412
// mutations like `remove_redundant_terminal_nodes` strip otherwise-unique

0 commit comments

Comments
 (0)