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

MIT/Apache

330KB
7.5K SLoC

ink! Analyzer IR

ink!中间表示(IR)和ink!分析器的抽象。

此库实现了ink!所有实体的类型和抽象(例如合约、存储、事件、主题、实现、构造函数、消息、选择器、测试、特质定义、链扩展、存储项等)。

它使用rust-analyzerra_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