charon_lib/transform/simplify_output/
remove_adt_clauses.rs

1use crate::ast::*;
2use crate::transform::{TransformCtx, ctx::TransformPass};
3
4#[derive(Visitor)]
5struct RemoveAdtClausesVisitor;
6
7impl VisitAstMut for RemoveAdtClausesVisitor {
8    fn enter_type_decl(&mut self, decl: &mut TypeDecl) {
9        decl.generics.trait_clauses.clear();
10        decl.generics.trait_type_constraints.clear();
11    }
12
13    fn enter_type_decl_ref(&mut self, tref: &mut TypeDeclRef) {
14        if matches!(tref.id, TypeId::Adt(_)) {
15            tref.generics.trait_refs.clear();
16        }
17    }
18}
19
20pub struct Transform;
21impl TransformPass for Transform {
22    fn transform_ctx(&self, ctx: &mut TransformCtx) {
23        if !ctx.options.remove_adt_clauses {
24            return;
25        }
26        let _ = ctx.translated.drive_mut(&mut RemoveAdtClausesVisitor);
27    }
28}