27个版本 (13个破坏性版本)
0.14.0 | 2024年5月3日 |
---|---|
0.13.0 | 2024年3月16日 |
0.12.2 | 2024年2月19日 |
0.11.2 | 2023年12月24日 |
0.7.1 | 2023年7月8日 |
#24 in #ink
每月41次下载
在2个crate中使用(通过ink-analyzer)
330KB
7.5K SLoC
ink! Analyzer IR
此库实现了ink!所有实体的类型和抽象(例如合约、存储、事件、主题、实现、构造函数、消息、选择器、测试、特质定义、链扩展、存储项等)。
它使用rust-analyzer的ra_ap_syntax crate来生成ink!智能合约代码的语法树,然后将其转换为ink!实体中间表示和抽象。
它使用ra_ap_syntax而不是其他Rust解析和语法树库,因为ink!分析器具有类似设计目标,最重要的是解析应该是
- 健壮的(即使输入无效,解析器也会尝试查看尽可能多的输入中的语法树片段)。
- 无损的(即使输入无效,解析器产生的树也正好表示它)。
它是语义分析器crate的主要依赖。
安装
在您的项目目录中运行以下Cargo命令
cargo add ink-analyzer-ir
用法
示例
生成ink!智能合约代码的IR。
use ink_analyzer_ir::InkFile;
fn generate_ir() {
let file = InkFile::parse(r#"
#[ink::contract]
mod my_contract {
#[ink(storage)]
pub struct MyContract {
value: bool,
}
// --snip--
}
"#);
dbg!(&file);
let contracts = file.contracts();
dbg!(&contracts);
if let Some(contract) = contracts.first() {
let storage = contract.storage();
dbg!(&storage);
}
}
文档
https://docs.rs/ink-analyzer-ir/latest/ink_analyzer_ir/
或者您可以从项目根目录运行以下命令本地访问文档
cargo doc -p ink-analyzer-ir --open
测试
您可以从项目根目录运行以下命令以运行所有核心功能的单元测试
cargo test -p ink-analyzer-ir
许可协议
根据您的选择,许可协议为 MIT 或 Apache-2.0 许可。
贡献
除非您明确声明,否则根据 Apache-2.0 许可定义的,您有意提交的任何贡献,将按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~5–16MB
~161K SLoC