You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NeoVim 0.10:Rust代码中SQL语法高亮的Tree-sitter注入问题

解决Rust中带属性标注的SQL字符串Tree-sitter注入高亮问题

你的问题核心是string_literal包含首尾双引号,导致SQL解析器无法正确识别内部的SQL语法。虽然查询在Tree-sitter playground能匹配到目标字符串,但需要通过#offset!指令裁剪掉引号,才能让注入生效。

修正后的查询语句

把#offset!直接附加在@injection.content的定义行后,调整后的完整查询如下:

(
 (attribute_item
   (attribute
     (identifier) @ident (#any-of? @ident "select" "insert")
    )
 ) 
 .
 (function_item
   body: (block (string_literal) @injection.content (#offset! @injection.content 0 1 0 -1))
 )
 (#set! injection.language "sql")
)

关键说明

  • (#offset! @injection.content 0 1 0 -1):
    • 前两个参数0 1:从字符串的第0行第1列开始(跳过开头的双引号)
    • 后两个参数0 -1:到字符串的第0行倒数第1列结束(跳过结尾的双引号)
      这样就把字符串内部的纯SQL内容提取出来,交给SQL解析器处理语法高亮。

验证步骤

  1. 将上述查询保存到~/.config/nvim/after/queries/rust/injections.scm
  2. 确保Neovim已安装Tree-sitter的Rust和SQL解析器(可通过:TSInstall rust sql安装)
  3. 重启Neovim后,打开目标Rust文件,带#[select]/#[insert]标注的函数内的字符串就会正确应用SQL语法高亮。

内容的提问来源于stack exchange,提问作者Achim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:12:46