Add NeoVim test runner
For the queries that can't be tested with `tree-sitter` itself.
This commit is contained in:
parent
9e9fde6c77
commit
6bd28f2b6b
2
Makefile
2
Makefile
|
@ -5,10 +5,12 @@ all:
|
|||
.PHONY: test
|
||||
test: all
|
||||
tree-sitter test --apply-all-captures
|
||||
nvim-test-runner
|
||||
|
||||
.PHONY: update-tests
|
||||
update-tests: all
|
||||
tree-sitter test -u --apply-all-captures
|
||||
nvim-test-runner
|
||||
|
||||
.PHONY: playground
|
||||
playground:
|
||||
|
|
28
flake.nix
28
flake.nix
|
@ -37,6 +37,7 @@
|
|||
}:
|
||||
let
|
||||
inherit (flake-utils.lib) eachDefaultSystem;
|
||||
inherit (nixpkgs) lib;
|
||||
in
|
||||
eachDefaultSystem
|
||||
(system:
|
||||
|
@ -46,6 +47,25 @@
|
|||
overlays = [ self.overlays.default ];
|
||||
};
|
||||
|
||||
nvim-test-runner = pkgs.writeShellApplication {
|
||||
name = "nvim-test-runner";
|
||||
|
||||
runtimeInputs = with pkgs; [
|
||||
highlight-assertions
|
||||
neovim
|
||||
];
|
||||
|
||||
text = ''
|
||||
export NVIM_PLENARY='${pkgs.vimPlugins.plenary-nvim}'
|
||||
export NVIM_TREESITTER='${pkgs.vimPlugins.nvim-treesitter}'
|
||||
export NVIM_TREESITTER_TEXTOBJECTS='${pkgs.vimPlugins.nvim-treesitter-textobjects}'
|
||||
export NVIM_TREESITTER_PARSER='${pkgs.vimPlugins.nvim-treesitter.grammarToPlugin self.packages.${system}.tree-sitter-bp}'
|
||||
|
||||
nvim --headless --noplugin -u ${scripts/minimal_init.lua} \
|
||||
-c "PlenaryBustedDirectory test/ { minimal_init = '${./scripts/minimal_init.lua}' }"
|
||||
'';
|
||||
};
|
||||
|
||||
bump-version = pkgs.writeShellScriptBin "bump-version" ''
|
||||
set -eu
|
||||
|
||||
|
@ -90,6 +110,13 @@
|
|||
enable = true;
|
||||
};
|
||||
|
||||
nvim-test-runner = {
|
||||
enable = true;
|
||||
name = "nvim tests";
|
||||
entry = "${lib.getExe nvim-test-runner}";
|
||||
pass_filenames = false;
|
||||
};
|
||||
|
||||
tree-sitter = {
|
||||
enable = true;
|
||||
name = "tree-sitter tests";
|
||||
|
@ -112,6 +139,7 @@
|
|||
nativeBuildInputs = with pkgs; [
|
||||
bump-version
|
||||
nodejs
|
||||
nvim-test-runner
|
||||
# FIXME: waiting on #301336
|
||||
# (tree-sitter.override { webUISupport = true; })
|
||||
tree-sitter
|
||||
|
|
1
scripts/dummy_plugin/queries/bp
Symbolic link
1
scripts/dummy_plugin/queries/bp
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../queries
|
40
scripts/minimal_init.lua
Normal file
40
scripts/minimal_init.lua
Normal file
|
@ -0,0 +1,40 @@
|
|||
vim.opt.runtimepath:append(vim.env.NVIM_PLENARY)
|
||||
vim.opt.runtimepath:append(vim.env.NVIM_TREESITTER)
|
||||
vim.opt.runtimepath:append(vim.env.NVIM_TREESITTER_TEXTOBJECTS)
|
||||
vim.opt.runtimepath:append(vim.env.NVIM_TREESITTER_PARSER)
|
||||
|
||||
vim.cmd.runtime({ "plugin/plenary.vim", bang = true })
|
||||
vim.cmd.runtime({ "plugin/nvim-treesitter.lua", bang = true })
|
||||
vim.cmd.runtime({ "plugin/nvim-treesitter-textobjects.lua", bang = true })
|
||||
|
||||
local Path = require("plenary.path")
|
||||
|
||||
local project_root = Path:new(".") -- FIXME: relies on current working directory
|
||||
|
||||
vim.filetype.add({
|
||||
extension = {
|
||||
bp = "bp",
|
||||
},
|
||||
})
|
||||
|
||||
vim.o.swapfile = false
|
||||
vim.bo.swapfile = false
|
||||
|
||||
local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
|
||||
parser_config.bp = {
|
||||
install_info = {
|
||||
url = project_root.filename,
|
||||
files = {"src/parser.c"},
|
||||
},
|
||||
}
|
||||
|
||||
require("nvim-treesitter.configs").setup({
|
||||
indent = { enable = true },
|
||||
highlight = { enable = true },
|
||||
})
|
||||
|
||||
-- We need a hierarchy of `queries/bp/*.scm` in the runtimepath, otherwise
|
||||
-- `nvim-treesitter` doesn't enable some of its features (e.g: folding).
|
||||
-- The dummy plugin has a symlink following that format for our queries.
|
||||
local dummy_plugin_path = project_root / "scripts" / "dummy_plugin"
|
||||
vim.opt.runtimepath:append(dummy_plugin_path.filename)
|
Loading…
Reference in a new issue