1 个不稳定版本
0.0.1 | 2024年3月12日 |
---|
#250 在 #parsing
280KB
12K SLoC
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 lint
和 just 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