Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'grammars.nix')
-rw-r--r--grammars.nix47
1 files changed, 27 insertions, 20 deletions
diff --git a/grammars.nix b/grammars.nix
index 1b4da224..5152b520 100644
--- a/grammars.nix
+++ b/grammars.nix
@@ -1,13 +1,22 @@
{
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
@@ -23,10 +32,10 @@
# 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)
+ 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;
@@ -57,10 +66,10 @@
version = grammar.source.rev;
src = source;
- sourceRoot =
- if builtins.hasAttr "subpath" grammar.source
- then "source/${grammar.source.subpath}"
- else "source";
+ sourceRoot = if builtins.hasAttr "subpath" grammar.source then
+ "source/${grammar.source.subpath}"
+ else
+ "source";
dontConfigure = true;
@@ -87,6 +96,8 @@
$CC -c src/parser.c -o parser.o $FLAGS
$CXX -shared -o $NAME.so *.o
+ ls -al
+
runHook postBuild
'';
@@ -105,21 +116,17 @@
'';
};
grammarsToBuild = builtins.filter includeGrammarIf gitGrammars;
- builtGrammars =
- builtins.map (grammar: {
- inherit (grammar) name;
- value = buildGrammar grammar;
- })
- grammarsToBuild;
+ builtGrammars = builtins.map (grammar: {
+ inherit (grammar) name;
+ value = buildGrammar grammar;
+ }) grammarsToBuild;
extensibleGrammars =
lib.makeExtensible (self: builtins.listToAttrs builtGrammars);
- overlaidGrammars =
- lib.pipe extensibleGrammars
+ overlayedGrammars = lib.pipe extensibleGrammars
(builtins.map (overlay: grammar: grammar.extend overlay) grammarOverlays);
- grammarLinks =
- lib.mapAttrsToList
+ grammarLinks = lib.mapAttrsToList
(name: artifact: "ln -s ${artifact}/${name}.so $out/${name}.so")
- (lib.filterAttrs (n: v: lib.isDerivation v) overlaidGrammars);
+ (lib.filterAttrs (n: v: lib.isDerivation v) overlayedGrammars);
in
runCommand "consolidated-helix-grammars" {} ''
mkdir -p $out