mirror of
https://github.com/swc-project/swc.git
synced 2024-12-18 11:11:30 +03:00
e48263b2f3
swc_visit_macros: - Remove `&dyn Node` from `Visit`. - Implement `VisitWith<V>` for `[T]`.
45 lines
817 B
Rust
45 lines
817 B
Rust
use std::sync::Arc;
|
|
use swc_visit::define;
|
|
|
|
pub struct Item {
|
|
pub item: Option<Arc<Item>>,
|
|
pub ref_to_enum: Option<Arc<Enum>>,
|
|
}
|
|
pub enum Enum {
|
|
Item(Arc<Item>),
|
|
Items(Arc<Vec<Item>>),
|
|
Enum(Arc<Enum>),
|
|
Enums(Arc<Vec<Enum>>),
|
|
}
|
|
|
|
define!({
|
|
pub struct Item {
|
|
pub item: Option<Arc<Item>>,
|
|
pub ref_to_enum: Option<Arc<Enum>>,
|
|
}
|
|
pub enum Enum {
|
|
Item(Arc<Item>),
|
|
Items(Arc<Vec<Item>>),
|
|
Enum(Arc<Enum>),
|
|
Enums(Arc<Vec<Enum>>),
|
|
}
|
|
});
|
|
|
|
struct Panic;
|
|
|
|
impl Visit for Panic {
|
|
fn visit_item(&mut self, _: &Item) {
|
|
panic!("Success")
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic(expected = "Success")]
|
|
fn test_panic() {
|
|
Enum::Item(Arc::new(Item {
|
|
item: None,
|
|
ref_to_enum: None,
|
|
}))
|
|
.visit_children_with(&mut Panic)
|
|
}
|