A TokenId represents a unique value that is used to access a token.
A token ID cannot be created directly by the user. Instead, the value must be taken
from the AST.
Holds token information about an AST element.
Since the different pieces may be gathered in different locations,
the fields are gated behind accessor functions which also check some invariants every time they are called.
The formatter is the main entry point used for formatting a single
Design Unit from AST representation to string representation. In that sense,
the Formatter is the inverse to the Parser.
AST elements for which it is necessary to get the underlying tokens can implement the HasTokenSpan trait.
The trait provides getters for the start and end token.
A type that conforms to TokenAccess can be indexed using a TokenId.
Convenience methods exist to directly get the SrcPos for a given TokenId
or a span starting at a certain token and ending at another.