Aderyn's Language Server通过实时安全诊断和最佳编码实践提升了Solidity开发者的体验。其最新版本0.3.0引入了基于Language Server Protocol (LSP)的功能,简化了代码检查流程,支持多种编辑器并提供实时反馈。文章详细介绍了LSP的工作原理、技术实现以及未来的扩展计划。
Aderyn 的语言服务器通过在任何代码编辑器中提供实时安全诊断和编码最佳实践,提升 Solidity 开发者的体验。
发布版本 v0.3.0
我们很高兴地宣布,Aderyn 在版本 0.3.0 发布中取得了重大里程碑,该版本推出了 Aderyn 的内置 LSP 服务器。这次更新让我们更接近我们的最终愿景:一个统一的 Aderyn,能够无缝整合 Aderyn 的 CLI 和 即将推出的 VS Code 扩展,以便在开发者编写 Solidity 代码时提供实时反馈。
到目前为止,使用 Aderyn 需要在 Solidity 项目的根目录手动运行该工具。这会生成一个 markdown 报告,类似于传统的安全审查格式。这种方法的最大缺点是重复性——每当代码更改时,你都需要重新运行命令并重新查看报告。这种工作流很快会变得繁琐和低效,尤其是在进行迭代更新时。
为了解决这个问题,我们最初在 Aderyn 中引入了 watch command,该命令监视项目变更并自动更新报告。然而,这种解决方案也有其自身的一系列局限性。
[语言服务器协议](https://microsoft.github.io/language-server-protocol/#:~:text=The%20Language%20Server%20Protocol%20(LSP,definition%2C%20find%20all%20references%20etc) (LSP),最初由微软提出,为 Watch Command 的挑战提供了强有力的解决方案。LSP 已成为行业标准,许多现代编辑器(如 VS Code)内置了 LSP 客户端,能够与 LSP 服务器进行通信以接收和显示诊断信息。
这种方法简化了一切:
要激活 Aderyn 的 LSP 服务器,只需运行 aderyn --lsp
。
Aderyn 的 LSP 服务器 基于强大且文档齐全的 tower_lsp crate,这是一个在 Rust 中实现 语言服务器协议 的流行选择。利用这个 crate,Aderyn 的 LSP 服务器遵循 LSP 规范,确保与已经具备原生 LSP 客户端支持的多种编辑器(如 VS Code、Sublime、Vim 等)兼容。
tower_lsp crate 通过提供一个处理客户端(编辑器)与服务器(Aderyn)之间的 JSON-RPC 通信等常见任务的框架,简化了 LSP 服务器的创建。它抽象出了 LSP 生命周期的复杂性,包括初始化、消息处理和方法注册。
Aderyn 的 LSP 服务器利用这个框架:
Aderyn 的 LSP 服务器建立在 Tokio 上,Tokio 是 Rust 最成熟和高性能的异步运行时之一,旨在构建快速和可靠的系统。这使得 Aderyn 能够处理多个文件、进行诊断请求,甚至处理未来的实时修复功能。
使用 Tokio 为 Aderyn 的 LSP 服务器带来的主要好处包括:
工作流程包括:
实时反馈:诊断会发送到编辑器的 LSP 客户端,作为警告或错误展示在开发者的编辑器中。这一切都是实时发生的,使开发者在编码时获得即时反馈。
使用 tower_lsp 还使 Aderyn 能够支持更多的 LSP 特性,超越诊断功能。在未来版本中,我们计划加入:
简而言之,这一与 tower_lsp 和 Tokio 的集成为 Aderyn 不仅在实现实时诊断方面奠定了基础,还让其演变为 Solidity 开发者的综合安全助手。
版本 0.3.0 的发布是 Aderyn 的一个转折点。原生 LSP 服务器的推出让 Aderyn 更接近一个真正统一的平台,并简化了编写基于 Solidity 的智能合约的开发者体验。
我们很期待社区对这一新功能的看法以及他们如何使用它。在我们继续扩展 Aderyn 功能的同时,我们的目标始终不变:让区块链开发对每个人来说更安全。
开始吧,访问 Aderyn 仓库 在 GitHub 上。
- 原文链接: cyfrin.io/blog/introduci...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!