在 sqleibniz 中嵌入 Lua 并使用 Rust

主要观点:正在为 Sql 编写分析工具sqleibniz,特别是针对 sqlite 方言,目标是进行静态分析,包括语法检查等,还想为用户提供高质量错误消息等,完成静态分析后计划写 lsp 服务器;将sqleibniz的配置从leibniz.toml文件改为 Lua 脚本,通过提供 Lua 钩子数组来扩展sqleibniz,可配置禁用规则和自定义规则,Lua 配置在 Rust 应用中有用,创建了等价的数据结构Config,使用mlua包进行 Rust 类型和 Lua 类型的转换,实现了从 Lua 值到mlua::Function的转换及调用,展示了如何在 Rust 和 Lua 之间传递和处理数据结构,将 Lua 脚本中的字段用于实际操作等。

关键信息:

  • sqleibniz目标:静态分析 Sql 输入,包括语法等检查,结合运行时和断言条件提供良好开发体验,后续写 lsp 服务器。
  • 配置切换:从leibniz.toml到 Lua,Lua 可编写插件等,提供禁用规则和钩子数组。
  • Rust 与 Lua 转换:使用mlua包的FromLuaIntoLua traits 进行转换,处理各种类型的转换。
  • 调用 Lua 函数:在 Rust 中调用 Lua 函数并提供所需上下文,HookContext结构用于传递上下文。
  • 整合示例:展示配置读取、Lua 脚本执行、获取配置并处理钩子等的完整示例,处理配置无效等情况。

重要细节:

  • leibniz.toml示例文件内容及禁用规则说明。
  • Lua 钩子示例,如检查标识符大小写和长度。
  • Config结构体包含禁用规则和钩子。
  • mlua包的特性及使用方式。
  • Hook结构体及相关实现。
  • HookContext结构及实现IntoLua trait。
  • 完整示例代码的各步骤及处理情况。
阅读 8
0 条评论