neo_solidity/cli/
mod.rs

1//! Neo Solidity CLI Module
2//!
3//! Command-line interface for the Neo Solidity compiler. This module provides
4//! the main entry point for compiling Solidity contracts to NeoVM bytecode.
5//!
6//! # Features
7//!
8//! - Single file and multi-file compilation
9//! - Standard JSON input/output (Solidity compiler compatible)
10//! - NEF (Neo Executable Format) generation
11//! - Manifest generation for Neo N3 deployment
12//! - Multiple optimization levels (0-3)
13//! - Verbose output
14//!
15//! # Submodules
16//!
17//! - [`bytecode`] - NeoVM bytecode generation from IR
18//! - [`standard_json`] - Standard JSON compilation interface
19//!
20//! # Usage
21//!
22//! ```bash
23//! neo-solc input.sol -o build/
24//! neo-solc --standard-json < input.json > output.json
25//! neo-solc --standard-json --input input.json --output output.json
26//! ```
27
28use clap::{Arg, ArgAction, Command};
29use neo_solidity::frontend::VisibilityKind;
30use neo_solidity::ir;
31use neo_solidity::neo::{build_nef_with_tokens, clamp_nef_source_with_flag, NEF_SOURCE_MAX_BYTES};
32use neo_solidity::semantic_model::build_semantic_model;
33use neo_solidity::solidity::{
34    analyse_all_sources, validate_contract, ContractMetadata, DiagnosticSeverity, EventMetadata,
35    FunctionKind, FunctionMetadata, NatspecDoc, ParameterMetadata, StateMutability,
36};
37use neo_solidity::type_system::NeoType;
38use serde_json::{json, Value};
39use sha3::{Digest, Keccak256};
40use std::collections::{HashMap, HashSet};
41use std::fs;
42use std::path::Path;
43
44mod bytecode;
45#[cfg(test)]
46pub(crate) use crate::codegen::interop_id_bytes;
47pub(crate) use bytecode::generate_contract_bytecode;
48mod ir_optimize;
49pub(crate) use ir_optimize::optimize_ir;
50mod standard_json;
51pub(crate) use standard_json::*;
52
53include!("cli_parts/cli_defs.rs");
54include!("cli_parts/cli_run.rs");
55include!("cli_parts/cli_compile.rs");
56include!("cli_parts/cli_output.rs");
57include!("cli_parts/cli_manifest.rs");
58include!("cli_parts/cli_deploy.rs");
59include!("cli_parts/cli_diagnostics.rs");
60
61#[cfg(test)]
62mod tests;