ryo_executor/engine/impls/
visibility.rs1use ryo_mutations::basic::ChangeVisibilityMutation;
4use ryo_mutations::MutationResult;
5use ryo_source::pure::PureItem;
6
7use crate::engine::{ASTMutationContext, ASTRegApply, ModificationType, MutationEvent};
8
9impl ASTRegApply for ChangeVisibilityMutation {
10 fn apply_to_registry(&self, ctx: &mut ASTMutationContext) -> MutationResult {
11 let target_id = self.symbol_id;
12
13 let item = match ctx.ast_registry.get(target_id) {
15 Some(item) => item.clone(),
16 None => {
17 return MutationResult {
18 mutation_type: "ChangeVisibility".to_string(),
19 changes: 0,
20 description: format!("AST not found for SymbolId({:?})", target_id),
21 };
22 }
23 };
24
25 let new_item = match item {
27 PureItem::Fn(mut f) => {
28 f.vis = self.to.clone();
29 PureItem::Fn(f)
30 }
31 PureItem::Struct(mut s) => {
32 s.vis = self.to.clone();
33 PureItem::Struct(s)
34 }
35 PureItem::Enum(mut e) => {
36 e.vis = self.to.clone();
37 PureItem::Enum(e)
38 }
39 PureItem::Const(mut c) => {
40 c.vis = self.to.clone();
41 PureItem::Const(c)
42 }
43 PureItem::Static(mut s) => {
44 s.vis = self.to.clone();
45 PureItem::Static(s)
46 }
47 PureItem::Type(mut t) => {
48 t.vis = self.to.clone();
49 PureItem::Type(t)
50 }
51 PureItem::Trait(mut t) => {
52 t.vis = self.to.clone();
53 PureItem::Trait(t)
54 }
55 _ => {
56 return MutationResult {
57 mutation_type: "ChangeVisibility".to_string(),
58 changes: 0,
59 description: format!("Cannot change visibility of SymbolId({:?})", target_id),
60 };
61 }
62 };
63
64 ctx.set_ast(target_id, new_item);
65 ctx.emit(MutationEvent::SymbolModified {
66 id: target_id,
67 modification: ModificationType::VisibilityChanged,
68 });
69
70 MutationResult {
71 mutation_type: "ChangeVisibility".to_string(),
72 changes: 1,
73 description: format!("Changed SymbolId({:?}) to {:?}", target_id, self.to),
74 }
75 }
76}