@@ -10,16 +10,31 @@ let
10 isGitGrammar = (grammar:
10 isGitGrammar = (grammar:
11 builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source
11 builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source
12 && builtins.hasAttr "rev" grammar.source);
12 && builtins.hasAttr "rev" grammar.source);
13+ isGitHubGrammar = grammar: lib.hasPrefix "https://github.com" grammar.source.git;
14+ toGitHubFetcher = url: let
15+ match = builtins.match "https://github\.com/([^/]*)/([^/]*)/?" url;
17+ owner = builtins.elemAt match 0;
18+ repo = builtins.elemAt match 1;
13 gitGrammars = builtins.filter isGitGrammar languagesConfig.grammar;
20 gitGrammars = builtins.filter isGitGrammar languagesConfig.grammar;
14 buildGrammar = grammar:
21 buildGrammar = grammar:
23+ gh = toGitHubFetcher grammar.source.git;
16− source = builtins.fetchTree {
24+ sourceGit = builtins.fetchTree {
17 type = "git";
25 type = "git";
18 url = grammar.source.git;
26 url = grammar.source.git;
19 rev = grammar.source.rev;
27 rev = grammar.source.rev;
20 ref = grammar.source.ref or "HEAD";
28 ref = grammar.source.ref or "HEAD";
21 shallow = true;
29 shallow = true;
31+ sourceGitHub = builtins.fetchTree {
35+ inherit (grammar.source) rev;
37+ source = if isGitHubGrammar grammar then sourceGitHub else sourceGit;
23 in stdenv.mkDerivation rec {
38 in stdenv.mkDerivation rec {
24 # see https://github.com/NixOS/nixpkgs/blob/fbdd1a7c0bc29af5325e0d7dd70e804a972eb465/pkgs/development/tools/parsing/tree-sitter/grammar.nix
39 # see https://github.com/NixOS/nixpkgs/blob/fbdd1a7c0bc29af5325e0d7dd70e804a972eb465/pkgs/development/tools/parsing/tree-sitter/grammar.nix