43 个版本

0.9.4 2024 年 5 月 3 日
0.9.2 2024 年 3 月 18 日
0.8.16 2023 年 12 月 24 日
0.8.11 2023 年 11 月 2 日
0.3.0 2023 年 3 月 19 日

#3 in #smart-contract


用于 ink-lsp-server

MIT/Apache

2MB
41K SLoC

icon ink! Analyzer

ink! 智能合约语义分析的库。

它实现了对 ink! 智能合约代码进行语义分析的实用工具。因此,它以高级别实现了 ink! 分析器的核心功能。

它目前实现了一个 Analysis 入口,该入口接受 ink! 智能合约代码的字符串表示形式(&str)作为输入,并定义了相关的计算方法

  • 诊断 - 基于ink!语义规则的错误和警告。
  • 快速修复 - 对诊断错误和警告的建议编辑/代码操作。
  • 补全 - ink! 属性宏、参数和实体/项目的完成建议。
  • 代码/意图操作 - 为
    • 添加相关的 ink! 属性宏、参数和实体/项目提供上下文辅助
    • 将 ink! 项目迁移到 ink! 的较新版本(例如,ink! 4.x 到 5.0)
    • 将 ink! 实体(例如 ink! 5.0 事件)提取到独立的包中
    • 等等!
  • 悬停内容 - ink! 属性宏和参数的描述性/信息性文本。
  • 内联提示 - ink! 属性参数值的内联类型和信息(例如,ink! 消息选择器的 u32 | _ | @)。
  • 签名帮助 - 对于当前上下文/光标位置的有效 ink! 属性参数的弹出信息。

安装

在您的项目目录中运行以下 Cargo 命令

cargo add ink-analyzer

使用方法

示例

分析 ink! 智能合约代码。

use ink_analyzer::{Analysis, TextSize, TextRange, Version};

fn do_analysis() {
    // Smart contract code.
    let code = r#"
        #[ink::contract]
        mod my_contract {

            #[ink(storage)]
            pub struct MyContract {
                value: bool,
            }

            // --snip--
        }
    "#;

    // Creates analysis snapshot.
    let analysis = Analysis::new(code, Version::V4);

    // Computes diagnostics.
    let diagnostics = analysis.diagnostics();
    dbg!(&diagnostics);

    // Sets the cursor position.
    let position = TextSize::from(9);

    // Computes completions.
    let completions = analysis.completions(position);
    dbg!(&completions);

    // Sets the focus range.
    let range = TextRange::new(position, TextSize::from(25));

    // Computes code/intent actions.
    let actions = analysis.actions(range);
    dbg!(&actions);

    // Gets hover content.
    let hover = analysis.hover(range);
    dbg!(&hover);

    // Computes inlay hints.
    let inlay_hints = analysis.inlay_hints(None);
    dbg!(&inlay_hints);

    // Computes signature help.
    let signature_help = analysis.signature_help(TextSize::from(71));
    dbg!(&signature_help);
}

fn project_code_stubs() {
    // Generates ink! project code stubs/snippets.
    let project = ink_analyzer::new_project(String::from("hello_world"), Version::V5);
    dbg!(&project);
}

文档

https://docs.rs/ink-analyzer/latest/ink_analyzer/

或者您可以通过在项目根目录下运行以下命令来本地访问文档

cargo doc -p ink-analyzer --open

测试

您可以从项目根目录运行以下命令来运行所有核心功能的单元测试和集成测试

cargo test -p ink-analyzer

许可

根据您的选择,该项目受 MIT 许可或 Apache-2.0 许可协议的许可,具体请参阅 MIT 许可Apache-2.0 许可

贡献

除非您明确声明,否则根据 Apache-2.0 许可定义,您提交的任何有意包含在该作品中的贡献将按上述方式双许可,不附加任何额外条款或条件。

依赖

~7–19MB
~214K SLoC