tree-sitter-bp/flake.nix
Bruno BELANYI 6bd28f2b6b Add NeoVim test runner
For the queries that can't be tested with `tree-sitter` itself.
2024-04-13 17:07:16 +01:00

173 lines
4.6 KiB
Nix

{
description = "A tree-sitter grammar for Blueprint";
inputs = {
flake-utils = {
type = "github";
owner = "numtide";
repo = "flake-utils";
ref = "main";
};
nixpkgs = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "nixpkgs-unstable";
};
pre-commit-hooks = {
type = "github";
owner = "cachix";
repo = "pre-commit-hooks.nix";
ref = "master";
inputs = {
flake-utils.follows = "flake-utils";
nixpkgs.follows = "nixpkgs";
nixpkgs-stable.follows = "nixpkgs";
};
};
};
outputs =
{ self
, flake-utils
, nixpkgs
, pre-commit-hooks
}:
let
inherit (flake-utils.lib) eachDefaultSystem;
inherit (nixpkgs) lib;
in
eachDefaultSystem
(system:
let
pkgs = import nixpkgs {
inherit system;
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
NEW_VERSION="''${1}"
${pkgs.jq}/bin/jq ".version = \"''${NEW_VERSION}\"" package.json > package.json.tmp
mv package.json.tmp package.json
${pkgs.gnused}/bin/sed -i -e "s/version = \"[0-9.]\\+\"/version = \"''${NEW_VERSION}\"/" Cargo.toml
git add Cargo.toml package.json
echo "Release ''${NEW_VERSION}" | git commit -eF -
git tag -a "v''${NEW_VERSION}" -m "Release ''${NEW_VERSION}"
'';
tree-sitter-env = pkgs.stdenv.mkDerivation {
name = "tree-sitter-env";
nativeBuildInputs = with pkgs; [
makeWrapper
];
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
makeWrapper \
${pkgs.tree-sitter}/bin/tree-sitter \
$out/bin/tree-sitter \
--prefix PATH : "${with pkgs; lib.makeBinPath [stdenv.cc nodejs]}"
'';
};
in
rec {
checks = {
pre-commit = pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = {
nixpkgs-fmt = {
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";
entry = "${tree-sitter-env}/bin/tree-sitter test --apply-all-captures";
pass_filenames = false;
};
tree-sitter-files = {
enable = true;
name = "tree-sitter generated files";
entry = "${tree-sitter-env}/bin/tree-sitter generate";
pass_filenames = false;
};
};
};
};
devShells = {
default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
bump-version
nodejs
nvim-test-runner
# FIXME: waiting on #301336
# (tree-sitter.override { webUISupport = true; })
tree-sitter
];
inherit (checks.pre-commit) shellHook;
};
};
packages = {
default = packages.tree-sitter-bp;
inherit (pkgs.tree-sitter.passthru.builtGrammars) tree-sitter-bp;
inherit (pkgs) tree-sitter;
};
}) // {
overlays = {
default = final: prev: {
tree-sitter = prev.tree-sitter.override {
extraGrammars = {
tree-sitter-bp = {
src = ./.;
};
};
};
};
};
};
}