grammars.nix: use github type for fetchTree where possible (#1872)

This commit is contained in:
Max 2022-03-28 23:50:18 +02:00 committed by GitHub
parent 511f37c736
commit b63b37d5a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,16 +10,31 @@ let
isGitGrammar = (grammar: isGitGrammar = (grammar:
builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source
&& builtins.hasAttr "rev" 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; gitGrammars = builtins.filter isGitGrammar languagesConfig.grammar;
buildGrammar = grammar: buildGrammar = grammar:
let let
source = builtins.fetchTree { gh = toGitHubFetcher grammar.source.git;
sourceGit = builtins.fetchTree {
type = "git"; type = "git";
url = grammar.source.git; url = grammar.source.git;
rev = grammar.source.rev; rev = grammar.source.rev;
ref = grammar.source.ref or "HEAD"; ref = grammar.source.ref or "HEAD";
shallow = true; 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 { in stdenv.mkDerivation rec {
# see https://github.com/NixOS/nixpkgs/blob/fbdd1a7c0bc29af5325e0d7dd70e804a972eb465/pkgs/development/tools/parsing/tree-sitter/grammar.nix # see https://github.com/NixOS/nixpkgs/blob/fbdd1a7c0bc29af5325e0d7dd70e804a972eb465/pkgs/development/tools/parsing/tree-sitter/grammar.nix