diff --git a/crates/artifacts/solc/src/ast/mod.rs b/crates/artifacts/solc/src/ast/mod.rs index c5ca84921..92e995934 100644 --- a/crates/artifacts/solc/src/ast/mod.rs +++ b/crates/artifacts/solc/src/ast/mod.rs @@ -57,6 +57,7 @@ node_group! { VariableDeclaration, EnumDefinition, ErrorDefinition, + EventDefinition, FunctionDefinition, StructDefinition, UserDefinedValueTypeDefinition, diff --git a/crates/artifacts/solc/src/ast/visitor.rs b/crates/artifacts/solc/src/ast/visitor.rs index d8064ff0b..1cb22862e 100644 --- a/crates/artifacts/solc/src/ast/visitor.rs +++ b/crates/artifacts/solc/src/ast/visitor.rs @@ -99,6 +99,9 @@ impl_walk!(SourceUnitPart, |part, visitor| { SourceUnitPart::ErrorDefinition(error) => { error.walk(visitor); } + SourceUnitPart::EventDefinition(event) => { + event.walk(visitor); + } SourceUnitPart::StructDefinition(struct_) => { struct_.walk(visitor); } diff --git a/crates/compilers/src/flatten.rs b/crates/compilers/src/flatten.rs index 336e6178a..b86ee40df 100644 --- a/crates/compilers/src/flatten.rs +++ b/crates/compilers/src/flatten.rs @@ -320,7 +320,7 @@ impl Flattener { let mut ids = ids.clone().into_iter().collect::>(); if needs_rename { // `loc.path` is expected to be different for each id because there can't be 2 - // top-level eclarations with the same name in the same file. + // top-level declarations with the same name in the same file. // // Sorting by index loc.path in sorted files to make the renaming process // deterministic. diff --git a/crates/compilers/tests/project.rs b/crates/compilers/tests/project.rs index 90ac3a681..ef84d65ad 100644 --- a/crates/compilers/tests/project.rs +++ b/crates/compilers/tests/project.rs @@ -4113,3 +4113,44 @@ contract SimpleContract {} ] ); } + +// +#[test] +fn can_flatten_top_level_event_declaration() { + let project = TempProject::::dapptools().unwrap(); + + let target = project + .add_source( + "A", + r#"pragma solidity ^0.8.10; +import "./B.sol"; +contract A { } +"#, + ) + .unwrap(); + + project + .add_source( + "B", + r#" +event TestEvent(); +"#, + ) + .unwrap(); + + test_flatteners(&project, &target, |result| { + assert_eq!( + result, + r"pragma solidity ^0.8.10; + +// src/B.sol + +event TestEvent(); + +// src/A.sol + +contract A { } +" + ); + }); +}