diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-09-27T19·43-0400 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-09-27T19·49-0400 |
commit | 95c74eae269b2b9e4bc514581b5caa1d80b54acc (patch) | |
tree | f8f36185fa71202a79ed320e2a413433f957ff63 | |
parent | f46612be96a70a188cd48462ac94089d3e95a36b (diff) |
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.
-rw-r--r-- | doc/manual/release-notes.xml | 5 | ||||
-rw-r--r-- | misc/emacs/nix-mode.el | 2 | ||||
-rw-r--r-- | src/libexpr/lexer.l | 2 | ||||
-rw-r--r-- | 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 0a69f43b1fc2..6fbd7c269c46 100644 --- a/doc/manual/release-notes.xml +++ b/doc/manual/release-notes.xml @@ -15,6 +15,11 @@ <itemizedlist> <listitem> + <para>Dashes are now valid as part of identifiers and attribute + names.</para> + </listitem> + + <listitem> <para>Nix no longer sets the immutable bit on files in the Nix store. Instead, the recommended way to guard the Nix store against accidental modification on Linux is to make it a read-only diff --git a/misc/emacs/nix-mode.el b/misc/emacs/nix-mode.el index 121a9172b633..986edcf6e321 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. ("\\<isNull\\>" . 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 d46b66d9ff7c..b61d5ea7713c 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 e77ee7a1c22b..0a98b8fdffa6 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. |