| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- { lib, runCommand, fetchFromGitHub, tree-sitter }:
- let
- grammars = builtins.fromJSON (builtins.readFile ./grammars.json);
- buildTreesitterPlugin = name: spec:
- let
- nameParts = builtins.split "/" (spec.repo or "tree-sitter/tree-sitter-${name}");
- owner = builtins.head nameParts;
- repo = builtins.elemAt nameParts 2;
- filetypes = spec.filetypes or [name];
- grammar = tree-sitter.buildGrammar ({
- language = name;
- version = "0.0.0+rev=${spec.rev}";
- src = fetchFromGitHub {
- inherit owner repo;
- inherit (spec) rev sha256;
- };
- } // lib.optionalAttrs (builtins.hasAttr "path" spec) {
- location = spec.path;
- });
- initLua = ''
- vim.treesitter.language.register('${name}', { ${lib.concatMapStringsSep ", " (filetype: "'${filetype}'") filetypes} })
- '';
- in
- runCommand "tree-sitter-${name}" {
- passthru = {
- inherit grammar;
- };
- inherit initLua;
- passAsFile = [ "initLua" ];
- } ''
- mkdir -p $out/parser
- ln -s ${grammar}/parser $out/parser/${name}.so
- ${lib.optionalString (builtins.hasAttr "branch" spec) ''
- if [ -d ${grammar}/queries ]; then
- ln -s ${grammar}/queries $out/queries
- fi
- ''}
- mkdir -p $out/plugin
- cp "$initLuaPath" $out/plugin/init.lua
- mkdir -p $out/after/ftplugin
- ${lib.concatMapStringsSep "\n" (filetype: ''
- echo 'vim.treesitter.start()' > $out/after/ftplugin/${filetype}.lua
- '') filetypes}
- '';
- in
- builtins.mapAttrs buildTreesitterPlugin grammars
|