@ commento di Huon
Hai provato cattura ItemKind :: Mod in github.com/llogiq/flamer/blob/... e l'iterazione di suo contenuto (ricorsivamente)?
era azzeccato - ho appena aggiunto un commit che gestisce gli elementi mod e tratto camminandoli. Probabilmente aggiungerò anche il codice per gestire le funzioni per gestire gli elementi interni e fns.
Il codice simile a questo:
fn flame_item(i: &Item) -> Item {
let base = i.clone();
Item {
node: match i.node {
ItemKind::Mod(ref m) =>
ItemKind::Mod(flame_mod(m)),
ItemKind::Trait(unsafety, ref generic, ref bounds, ref tis) =>
ItemKind::Trait(unsafety,
generic.clone(),
bounds.clone(),
flame_items(tis)),
.. // other item types as usual: items, traitimpls, implitems
_ => return base
},
..base
}
}
fn flame_mod(m: &Mod) -> Mod {
Mod {
inner: m.inner,
items: m.items.iter().map(|i| P(flame_item(i))).collect()
}
}
fn flame_items(items: &[TraitItem]) -> Vec<TraitItem> {
items.iter().map(flame_trait_item).collect()
}
Che cosa esattamente cosa si aspetta l'attributo cassa per fare? Inserisci la chiamata in ogni funzione della cassa? –
Hai provato a catturare 'ItemKind :: Mod' in https://github.com/llogiq/flamer/blob/f4828cc91768109fa66f8cbbe57a285c0477c436/src/lib.rs#L29 e iterando sul suo contenuto (in modo ricorsivo)? – huon
@Lukas Kalbertodt: esattamente. – llogiq