aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax2022-03-28 21:50:18 +0000
committerGitHub2022-03-28 21:50:18 +0000
commitb63b37d5a09ffb7e9703a046fbf42f668303e262 (patch)
tree84929dc4d4195c6f5da51ed92d2eb1e0bfb06685
parent511f37c736f7c64fe1047c57e6bf87e61f60747b (diff)
grammars.nix: use github type for fetchTree where possible (#1872)
-rw-r--r--grammars.nix17
1 files changed, 16 insertions, 1 deletions
diff --git a/grammars.nix b/grammars.nix
index bd2c95cc..bcd2c2fa 100644
--- a/grammars.nix
+++ b/grammars.nix
@@ -10,16 +10,31 @@ let
isGitGrammar = (grammar:
builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source
&& builtins.hasAttr "rev" grammar.source);
+ isGitHubGrammar = grammar: lib.hasPrefix "https://github.com" grammar.source.git;
+ toGitHubFetcher = url: let
+ match = builtins.match "https://github\.com/([^/]*)/([^/]*)/?" url;
+ in {
+ owner = builtins.elemAt match 0;
+ repo = builtins.elemAt match 1;
+ };
gitGrammars = builtins.filter isGitGrammar languagesConfig.grammar;
buildGrammar = grammar:
let
- source = builtins.fetchTree {
+ gh = toGitHubFetcher grammar.source.git;
+ sourceGit = builtins.fetchTree {
type = "git";
url = grammar.source.git;
rev = grammar.source.rev;
ref = grammar.source.ref or "HEAD";
shallow = true;
};
+ sourceGitHub = builtins.fetchTree {
+ type = "github";
+ owner = gh.owner;
+ repo = gh.repo;
+ inherit (grammar.source) rev;
+ };
+ source = if isGitHubGrammar grammar then sourceGitHub else sourceGit;
in stdenv.mkDerivation rec {
# see https://github.com/NixOS/nixpkgs/blob/fbdd1a7c0bc29af5325e0d7dd70e804a972eb465/pkgs/development/tools/parsing/tree-sitter/grammar.nix