nix-super/doc/manual/src/language/identifiers.md
Valentin Gagarin dba1142c01
docs: add identifiers (#11174)
* docs: add identifiers

* clarify attribute set notation and add examples

* add definition of names

Co-authored-by: Ryan Hendrickson <ryan.hendrickson@alum.mit.edu>
2024-07-25 03:45:34 +02:00

1.5 KiB

Identifiers

An identifier is an ASCII character sequence that:

  • Starts with a letter (a-z, A-Z) or underscore (_)
  • Can contain any number of:
    • Letters (a-z, A-Z)
    • Digits (0-9)
    • Underscores (_)
    • Apostrophes (')
    • Hyphens (-)
  • Is not one of the keywords

Syntax

identifier ~ [A-Za-z_][A-Za-z0-9_'-]*

Names

A name can be an identifier or a string literal.

Syntax

nameidentifier | string

Names are used in attribute sets, let bindings, and [inherit](./syntax.md#inheriting attributes).

Keywords

These keywords are reserved and cannot be used as identifiers:

Note

The Nix language evaluator currently allows or to be used as a name in some contexts, for backwards compatibility reasons. Users are advised not to rely on this.

There are long-standing issues with how or is parsed as a name, which can't be resolved without making a breaking change to the language.