diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-09-27 15:43:08 -0400 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-09-27 15:49:20 -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 0a69f43b1..6fbd7c269 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 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. ("\\<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 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. |