diff --git a/crates/wac-graph/src/graph.rs b/crates/wac-graph/src/graph.rs index 3e72b98..7948e5b 100644 --- a/crates/wac-graph/src/graph.rs +++ b/crates/wac-graph/src/graph.rs @@ -1038,7 +1038,7 @@ impl CompositionGraph { if let NodeKind::Definition = node.kind { log::debug!( "removing type definition `{name}`", - name = node.name.as_ref().unwrap() + name = node.export.as_ref().unwrap() ); let removed = self.defined.remove(&node.item_kind.ty()); assert!(removed.is_some()); @@ -1969,6 +1969,23 @@ mod test { )); } + #[test] + fn it_can_remove_a_type_definition() { + let mut graph = CompositionGraph::new(); + let ty_id = graph + .types_mut() + .add_defined_type(DefinedType::Alias(ValueType::Primitive(PrimitiveType::S32))); + let node_id = graph + .define_type("foo", Type::Value(ValueType::Defined(ty_id))) + .unwrap(); + + // Definition nodes store their name in `export`, not `name`. + // Removing a definition node should not panic. + graph.remove_node(node_id); + + // Verify the definition and export were cleaned up + assert!(graph.get_export("foo").is_none()); + } #[test] fn it_cleans_up_exports_on_unregister_package() { let mut graph = CompositionGraph::new();