From 95c74eae269b2b9e4bc514581b5caa1d80b54acc Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 27 Sep 2012 15:43:08 -0400 Subject: [PATCH] Allow dashes in identifiers In Nixpkgs, the attribute in all-packages.nix corresponding to a package is usually equal to the package name. However, this doesn't work if the package contains a dash, which is fairly common. The convention is to replace the dash with an underscore (e.g. "dbus-lib" becomes "dbus_glib"), but that's annoying. So now dashes are valid in variable / attribute names, allowing you to write: dbus-glib = callPackage ../development/libraries/dbus-glib { }; and buildInputs = [ dbus-glib ]; Since we don't have a negation or subtraction operation in Nix, this is unambiguous. --- doc/manual/release-notes.xml | 5 +++++ misc/emacs/nix-mode.el | 2 +- src/libexpr/lexer.l | 2 +- tests/lang/eval-okay-attrs5.nix | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/doc/manual/release-notes.xml b/doc/manual/release-notes.xml index 0a69f43b1..6fbd7c269 100644 --- a/doc/manual/release-notes.xml +++ b/doc/manual/release-notes.xml @@ -14,6 +14,11 @@ + + Dashes are now valid as part of identifiers and attribute + names. + + Nix no longer sets the immutable bit on files in the Nix store. Instead, the recommended way to guard the Nix store diff --git a/misc/emacs/nix-mode.el b/misc/emacs/nix-mode.el index 121a9172b..986edcf6e 100644 --- a/misc/emacs/nix-mode.el +++ b/misc/emacs/nix-mode.el @@ -78,7 +78,7 @@ The hook `nix-mode-hook' is run when Nix mode is started. ("\\" . font-lock-builtin-face) ("[a-zA-Z][a-zA-Z0-9\\+-\\.]*:[a-zA-Z0-9%/\\?:@&=\\+\\$,_\\.!~\\*'-]+" . font-lock-constant-face) - ("\\<\\([a-zA-Z_][a-zA-Z0-9_'\.]*\\)[ \t]*=" + ("\\<\\([a-zA-Z_][a-zA-Z0-9_'\-\.]*\\)[ \t]*=" (1 font-lock-variable-name-face nil nil)) ("<[a-zA-Z0-9._\\+-]+\\(/[a-zA-Z0-9._\\+-]+\\)*>" . font-lock-constant-face) diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l index d46b66d9f..b61d5ea77 100644 --- a/src/libexpr/lexer.l +++ b/src/libexpr/lexer.l @@ -78,7 +78,7 @@ static Expr * unescapeStr(SymbolTable & symbols, const char * s) %} -ID [a-zA-Z\_][a-zA-Z0-9\_\']* +ID [a-zA-Z\_][a-zA-Z0-9\_\'\-]* INT [0-9]+ PATH [a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+ SPATH \<[a-zA-Z0-9\.\_\-\+]+(\/[a-zA-Z0-9\.\_\-\+]+)*\> diff --git a/tests/lang/eval-okay-attrs5.nix b/tests/lang/eval-okay-attrs5.nix index e77ee7a1c..0a98b8fdf 100644 --- a/tests/lang/eval-okay-attrs5.nix +++ b/tests/lang/eval-okay-attrs5.nix @@ -4,7 +4,7 @@ let as = { x.y.z = 123; a.b.c = 456; }; - bs = { foo.bar = "foo"; }; + bs = { f-o-o.bar = "foo"; }; or = x: y: x || y; @@ -13,7 +13,7 @@ in as.foo or "foo" as.x.y.bla or as.a.b.c as.a.b.c or as.x.y.z - as.x.y.bla or bs.foo.bar or "xyzzy" + as.x.y.bla or bs.f-o-o.bar or "xyzzy" as.x.y.bla or bs.bar.foo or "xyzzy" 123.bla or null.foo or "xyzzy" # Backwards compatibility test.