aboutsummaryrefslogtreecommitdiff
path: root/grammars.nix
diff options
context:
space:
mode:
Diffstat (limited to 'grammars.nix')
-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