aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/src/language/values.md
diff options
context:
space:
mode:
authorValentin Gagarin <valentin.gagarin@tweag.io>2023-05-11 19:23:13 +0200
committerValentin Gagarin <valentin.gagarin@tweag.io>2023-05-17 13:41:34 +0200
commitd8bfeda1643f434ae015caa4f59d9f4b7f4270d7 (patch)
treef0c34951763211258ed1fc7ae2c57b59d52df519 /doc/manual/src/language/values.md
parentdfc393ffd3cb38c60146199c60f03b7e1d97aec8 (diff)
document identifier syntax for attribute sets
it's more likely for readers to find it right there. this also slightly rewords examples to make them stand out better. in the long run there probably needs to be a dedicated section on formal syntax, and better highlighting of examples.
Diffstat (limited to 'doc/manual/src/language/values.md')
-rw-r--r--doc/manual/src/language/values.md20
1 files changed, 16 insertions, 4 deletions
diff --git a/doc/manual/src/language/values.md b/doc/manual/src/language/values.md
index 9d0301753..2ae3e143a 100644
--- a/doc/manual/src/language/values.md
+++ b/doc/manual/src/language/values.md
@@ -164,9 +164,17 @@ Note that lists are only lazy in values, and they are strict in length.
An attribute set is a collection of name-value-pairs (called *attributes*) enclosed in curly brackets (`{ }`).
+An attribute name can be an identifier or a [string](#string).
+An identifier must start with a letter (`a-z`, `A-Z`) or underscore (`_`), and can otherwise contain letters (`a-z`, `A-Z`), numbers (`0-9`), underscores (`_`), apostrophes (`'`), or dashes (`-`).
+
+> *name* = *identifier* | *string* \
+> *identifier* ~ `[a-zA-Z_][a-zA-Z0-9_'-]*`
+
Names and values are separated by an equal sign (`=`).
Each value is an arbitrary expression terminated by a semicolon (`;`).
+> *attrset* = `{` [ *name* `=` *expr* `;` `]`... `}`
+
Attributes can appear in any order.
An attribute name may only occur once.
@@ -182,15 +190,19 @@ Example:
This defines a set with attributes named `x`, `text`, `y`.
-Attributes can be selected from a set using the `.` operator. For
-instance,
+Attributes can be accessed with the [`.` operator](./operators.md#attribute-selection).
+
+Example:
```nix
{ a = "Foo"; b = "Bar"; }.a
```
-evaluates to `"Foo"`. It is possible to provide a default value in an
-attribute selection using the `or` keyword:
+This evaluates to `"Foo"`.
+
+It is possible to provide a default value in an attribute selection using the `or` keyword.
+
+Example:
```nix
{ a = "Foo"; b = "Bar"; }.c or "Xyzzy"