neo_solidity/solidity.rs
1//! Solidity Metadata Extraction Module
2//!
3//! This module provides functionality for extracting metadata from Solidity source code,
4//! including contract definitions, function signatures, state variables, events, and
5//! Natspec documentation.
6//!
7//! # Key Components
8//!
9//! - [`ContractMetadata`] - Complete metadata for a Solidity contract
10//! - [`FunctionMetadata`] - Function signature and body information
11//! - [`NatspecDoc`] - Extracted Natspec documentation (@title, @notice, @dev, etc.)
12//! - [`analyse_all_sources`] - Main entry point for multi-file analysis
13//!
14//! # Example
15//!
16//! ```ignore
17//! use neo_solidity::solidity::{analyse_all_sources, ContractMetadata};
18//!
19//! let sources = vec![("Contract.sol".to_string(), source_code)];
20//! let contracts = analyse_all_sources(&sources)?;
21//! ```
22
23use crate::frontend::{
24 parse_source, ContractIR, ContractKind, EnumIR, EventIR, FunctionIR, MutabilityKind,
25 NatspecDocIR, ParameterIR, StateVariableIR, StructIR, VisibilityKind,
26};
27use crate::type_system::{
28 EnumTypeMetadata, NeoType, StructFieldMetadata as NeoStructFieldMetadata, StructTypeMetadata,
29};
30use sha3::{Digest, Keccak256};
31use solang_parser::pt::{
32 Base, CatchClause, Expression, FunctionTy, Identifier, Loc, NamedArgument, Parameter, Statement,
33};
34use thiserror::Error;
35
36include!("solidity/solidity_errors.rs");
37include!("solidity/solidity_docs.rs");
38include!("solidity/solidity_metadata.rs");
39include!("solidity/analyse/inheritance.rs");
40include!("solidity/analyse/modifiers.rs");
41include!("solidity/solidity_analyse.rs");
42include!("solidity/solidity_convert.rs");
43include!("solidity/solidity_validate.rs");