about summary refs log tree commit diff
path: root/maintainers
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2006-09-11 14:33:32 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2006-09-11 14:33:32 +0000
commit811910342a1a58ee36a89a8facf534efb9cdb1f1 (patch)
treec7589c05655a9c1cef736ae1a1a47d8c8030e75f /maintainers
parentc52bc2a64d87a90c3493b871c66e84436da9d3d4 (diff)
downloadnixlib-811910342a1a58ee36a89a8facf534efb9cdb1f1.tar
nixlib-811910342a1a58ee36a89a8facf534efb9cdb1f1.tar.gz
nixlib-811910342a1a58ee36a89a8facf534efb9cdb1f1.tar.bz2
nixlib-811910342a1a58ee36a89a8facf534efb9cdb1f1.tar.lz
nixlib-811910342a1a58ee36a89a8facf534efb9cdb1f1.tar.xz
nixlib-811910342a1a58ee36a89a8facf534efb9cdb1f1.tar.zst
nixlib-811910342a1a58ee36a89a8facf534efb9cdb1f1.zip
* Program to sort all-packages.nix, first attempt.
svn path=/nixpkgs/trunk/; revision=6492
Diffstat (limited to 'maintainers')
-rw-r--r--maintainers/scripts/sort-attrs.str68
1 files changed, 68 insertions, 0 deletions
diff --git a/maintainers/scripts/sort-attrs.str b/maintainers/scripts/sort-attrs.str
new file mode 100644
index 000000000000..611521b0b4a4
--- /dev/null
+++ b/maintainers/scripts/sort-attrs.str
@@ -0,0 +1,68 @@
+/* Tool to sort attribute sets.  Primarily useful for keeping
+   all-packages.nix tidy.
+
+   To compile:
+
+   $ strc -i ../../maintainers/scripts/sort-attrs.str -la stratego-lib
+
+   Typical invocation:
+   
+   $ sglr -m -p ~/Dev/nix/src/libexpr/nix.tbl -i all-packages.nix \
+     | implode-asfix --lex \
+     | ../../maintainers/scripts/sort-attrs \
+     | asfix-yield
+*/
+     
+module sort-attrs
+
+imports
+  libstratego-lib
+  libstratego-sglr
+
+
+strategies
+
+  no-wsp = !appl(prod([], cf(opt(layout())), no-attrs()), [])
+
+  
+rules
+
+  sort-attrs:
+    appl(p@prod(_, _, attrs([term(cons("Attrs"))])),
+      [ lit("{")
+      , ws1
+      , appl(p2@list(cf(iter-star(sort("Bind")))), attrs)
+      , ws2
+      , lit("}")
+      ]
+    ) ->
+    appl(p, [lit("{"), <no-wsp>, appl(p2, attrs'), ws2, lit("}")])
+    where
+      <debug> "found it";
+      <group> [ws1 | attrs] => groups;
+      <qsort(compare-attrs)> groups => attrs';
+      <debug> "did it"
+
+
+  group: [a, b | cs] -> [(a, b) | <group> cs]
+  group: [] -> []
+
+  
+  compare-attrs:
+    x@
+    ( (_, appl(p1@prod(_, _, attrs([term(cons("Bind"))])), [id1 | xs1]))
+    , (_, appl(p2@prod(_, _, attrs([term(cons("Bind"))])), [id2 | xs2]))
+    )
+    -> x
+    where
+      <debug> "foo";
+      <debug> id1;
+      <debug> id2;
+      <string-lt> (id1, id2)
+
+
+strategies
+
+  main = io-wrap(
+    topdown(try(sort-attrs))
+  )