slang_solidity 1.3.5

A modular set of compiler APIs empowering the next generation of Solidity code analysis and developer tooling. Written in Rust and distributed in multiple languages.
Documentation
use super::{ContractDefinition, SourceUnitMember, SourceUnitStruct};

mod contracts;
pub use contracts::ContractBase;

mod definitions;
pub use definitions::Definition;

mod expressions;

mod identifiers;
pub(crate) use identifiers::{create_identifier, create_yul_identifier};
pub use identifiers::{
    Identifier, IdentifierStruct, Reference, YulIdentifier, YulIdentifierStruct,
};

mod types;
pub use types::Type;

impl SourceUnitStruct {
    pub fn file_id(&self) -> String {
        self.semantic
            .node_id_to_file_id(self.ir_node.node_id)
            .unwrap()
    }

    pub fn contracts(&self) -> Vec<ContractDefinition> {
        self.members()
            .iter()
            .filter_map(|member| {
                if let SourceUnitMember::ContractDefinition(contract) = member {
                    Some(contract)
                } else {
                    None
                }
            })
            .collect()
    }
}