#parser #incremental #just #query

tree-sitter-just

tree-sitter 解析库的 just 语法

1 个不稳定版本

0.0.1 2024年3月12日

#250#parsing

MIT 许可证

280KB
12K SLoC

C 11K SLoC // 0.0% comments JavaScript 333 SLoC // 0.0% comments Scheme 184 SLoC // 0.2% comments Rust 37 SLoC // 0.1% comments

tree-sitter-just

WIP:Justfiles 的 tree-sitter 语法(casey/just

要使用基于 treesitter 的语法高亮、折叠等,需要将查询添加到运行时路径,直到我将 PR 提交到 nvim-treesitter/nvim-treesitter,您可以使用 Plug/packer 手动克隆等方法将此仓库作为插件安装。此插件还添加了一个简单的 ftdetect 插件用于检测 justfiles。

Packer

use "IndianBoy42/tree-sitter-just"

Plug

Plug 'IndianBoy42/tree-sitter-just'

手动

git clone https://github.com/IndianBoy42/tree-sitter-just ~/.local/share/nvim/site/pack/tree-sitter-queries/start/tree-sitter-just

然后,您可以执行 require('tree-sitter-just').setup({}) 以将解析器注册到 tree-sitter。然后您可以根据常规执行 TSInstall/TSUpdate 来安装解析器

您还可以手动添加解析器(这与在 require"tree-sitter-just".setup({}) 中执行的操作类似)

require("nvim-treesitter.parsers").get_parser_configs().just = {
  install_info = {
    url = "https://github.com/IndianBoy42/tree-sitter-just", -- local path or git repo
    files = { "src/parser.c", "src/scanner.c" },
    branch = "main",
    -- use_makefile = true -- this may be necessary on MacOS (try if you see compiler errors)
  },
  maintainers = { "@IndianBoy42" },
}

添加后不要忘记执行 :TSInstall。使用此方法,您无需将此仓库作为插件添加。

如果遇到与 C++ 11 功能相关的问题,请尝试在您的设置中包含此内容(您可能需要 brew install gcc@11

require"nvim-treesitter.install".compilers = {"gcc-11"}

贡献

开始的最简单方法就是,合适地,使用 just

# Make sure dependencies are available
just setup

# Create autogenerated files and run tests
just test

# Create autogenerated files without testing
just gen

# Check linting rules
just lint

# Apply formatting
just fmt

请注意,所有更改都必须通过 just lintjust fmt。在提交之前,您可以通过运行 just pre-commit-install 自动验证这些内容。

我们所有的查询都在 queries-src。此目录由 tree-sitter 测试,应该可用于 helix。要为 NeoVim 生成查询,请运行 ./build-flavored-queries.py(这是在 npm run gen 的部分中运行的)。

您可以使用 :InspectTree 命令来探索生成的解析树,以及 :Inspect 来查看高亮组。

Just 的怪癖

目前 Just 似乎不支持在属性之间或 if 语句内部添加注释,因此我们也不支持。

[private]
# hello!
[no-cd]
foo:
foo := if true {
  # nope!
  "abcd"
}

测试信息

测试目录包含 "corpus" 测试,用于检查语法,以及 "highlight" 测试,用于检查结果。"highlight" 测试目录包括一些由 fuzzer 生成的测试文件,这些文件并不总是易于阅读。

待办事项

  • 实现一个基本的解析器,能够理解 Justfiles 的所有功能
  • 实现使用 nvim-treesitter 的代码高亮支持(参考highlights.scm
    • 编写查询
    • 实现局部查询
  • 实现与 nvim-treesitter/nvim-treesitter-textobjects 兼容的文本对象查询
    • 编写查询
      • @block.inner|outer (配方)
      • @function.inner|outer (配方)
      • @call.inner|outer (依赖)
      • @comment.outer
      • @parameter.inner|outer
      • @conditional.inner|outer
      • @statement.outer (配方行或一个变量)
    • 定义和引用
    • 作用域名称
  • 实现使用 nvim-treesitter 的缩进支持
    • 编写查询
  • 实现使用 nvim-treesitter 的代码折叠支持(folds.scm
    • 编写查询
  • 编写测试
  • 在配方中突出显示 fish/bash 等(使用 tree-sitter 注入)
  • 修复尾部空白的问题(在配方标题后不要留下尾部空白)

依赖

~2.7–4MB
~71K SLoC