Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'grammars.nix')
-rw-r--r--grammars.nix127
1 files changed, 0 insertions, 127 deletions
diff --git a/grammars.nix b/grammars.nix
deleted file mode 100644
index 1b4da224..00000000
--- a/grammars.nix
+++ /dev/null
@@ -1,127 +0,0 @@
-{
- stdenv,
- lib,
- runCommand,
- includeGrammarIf ? _: true,
- grammarOverlays ? [],
- ...
-}: let
- languagesConfig =
- builtins.fromTOML (builtins.readFile ./languages.toml);
- 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;
- };
- # If `use-grammars.only` is set, use only those grammars.
- # If `use-grammars.except` is set, use all other grammars.
- # Otherwise use all grammars.
- useGrammar = grammar:
- if languagesConfig ? use-grammars.only
- then builtins.elem grammar.name languagesConfig.use-grammars.only
- else if languagesConfig ? use-grammars.except
- then !(builtins.elem grammar.name languagesConfig.use-grammars.except)
- else true;
- grammarsToUse = builtins.filter useGrammar languagesConfig.grammar;
- gitGrammars = builtins.filter isGitGrammar grammarsToUse;
- buildGrammar = grammar: let
- 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 {
- # see https://github.com/NixOS/nixpkgs/blob/fbdd1a7c0bc29af5325e0d7dd70e804a972eb465/pkgs/development/tools/parsing/tree-sitter/grammar.nix
-
- pname = "helix-tree-sitter-${grammar.name}";
- version = grammar.source.rev;
-
- src = source;
- sourceRoot =
- if builtins.hasAttr "subpath" grammar.source
- then "source/${grammar.source.subpath}"
- else "source";
-
- dontConfigure = true;
-
- FLAGS = [
- "-Isrc"
- "-g"
- "-O3"
- "-fPIC"
- "-fno-exceptions"
- "-Wl,-z,relro,-z,now"
- ];
-
- NAME = grammar.name;
-
- buildPhase = ''
- runHook preBuild
-
- if [[ -e src/scanner.cc ]]; then
- $CXX -c src/scanner.cc -o scanner.o $FLAGS
- elif [[ -e src/scanner.c ]]; then
- $CC -c src/scanner.c -o scanner.o $FLAGS
- fi
-
- $CC -c src/parser.c -o parser.o $FLAGS
- $CXX -shared -o $NAME.so *.o
-
- runHook postBuild
- '';
-
- installPhase = ''
- runHook preInstall
- mkdir $out
- mv $NAME.so $out/
- runHook postInstall
- '';
-
- # Strip failed on darwin: strip: error: symbols referenced by indirect symbol table entries that can't be stripped
- fixupPhase = lib.optionalString stdenv.isLinux ''
- runHook preFixup
- $STRIP $out/$NAME.so
- runHook postFixup
- '';
- };
- grammarsToBuild = builtins.filter includeGrammarIf gitGrammars;
- builtGrammars =
- builtins.map (grammar: {
- inherit (grammar) name;
- value = buildGrammar grammar;
- })
- grammarsToBuild;
- extensibleGrammars =
- lib.makeExtensible (self: builtins.listToAttrs builtGrammars);
- overlaidGrammars =
- lib.pipe extensibleGrammars
- (builtins.map (overlay: grammar: grammar.extend overlay) grammarOverlays);
- grammarLinks =
- lib.mapAttrsToList
- (name: artifact: "ln -s ${artifact}/${name}.so $out/${name}.so")
- (lib.filterAttrs (n: v: lib.isDerivation v) overlaidGrammars);
-in
- runCommand "consolidated-helix-grammars" {} ''
- mkdir -p $out
- ${builtins.concatStringsSep "\n" grammarLinks}
- ''