Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'grammars.nix')
| -rw-r--r-- | grammars.nix | 60 |
1 files changed, 27 insertions, 33 deletions
diff --git a/grammars.nix b/grammars.nix index 1b4da224..9ca0cf3d 100644 --- a/grammars.nix +++ b/grammars.nix @@ -1,13 +1,21 @@ { stdenv, lib, + runCommandLocal, runCommand, + yj, includeGrammarIf ? _: true, - grammarOverlays ? [], ... }: let + # HACK: nix < 2.6 has a bug in the toml parser, so we convert to JSON + # before parsing + languages-json = runCommandLocal "languages-toml-to-json" {} '' + ${yj}/bin/yj -t < ${./languages.toml} > $out + ''; languagesConfig = - builtins.fromTOML (builtins.readFile ./languages.toml); + if lib.versionAtLeast builtins.nixVersion "2.6.0" + then builtins.fromTOML (builtins.readFile ./languages.toml) + else builtins.fromJSON (builtins.readFile (builtins.toPath languages-json)); isGitGrammar = grammar: builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source @@ -19,17 +27,7 @@ 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; + gitGrammars = builtins.filter isGitGrammar languagesConfig.grammar; buildGrammar = grammar: let gh = toGitHubFetcher grammar.source.git; sourceGit = builtins.fetchTree { @@ -50,22 +48,22 @@ then sourceGitHub else sourceGit; in - stdenv.mkDerivation { + stdenv.mkDerivation rec { # 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 = + src = if builtins.hasAttr "subpath" grammar.source - then "source/${grammar.source.subpath}" - else "source"; + then "${source}/${grammar.source.subpath}" + else source; + dontUnpack = true; dontConfigure = true; FLAGS = [ - "-Isrc" + "-I${src}/src" "-g" "-O3" "-fPIC" @@ -78,15 +76,17 @@ 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 + if [[ -e "$src/src/scanner.cc" ]]; then + $CXX -c "$src/src/scanner.cc" -o scanner.o $FLAGS + elif [[ -e "$src/src/scanner.c" ]]; then + $CC -c "$src/src/scanner.c" -o scanner.o $FLAGS fi - $CC -c src/parser.c -o parser.o $FLAGS + $CC -c "$src/src/parser.c" -o parser.o $FLAGS $CXX -shared -o $NAME.so *.o + ls -al + runHook postBuild ''; @@ -108,18 +108,12 @@ builtGrammars = builtins.map (grammar: { inherit (grammar) name; - value = buildGrammar grammar; + artifact = 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); + builtins.map (grammar: "ln -s ${grammar.artifact}/${grammar.name}.so $out/${grammar.name}.so") + builtGrammars; in runCommand "consolidated-helix-grammars" {} '' mkdir -p $out |