Source code for binflakes.sexpr.symbol

import re

from attr import attrs, attrib


[docs]@attrs(slots=True, frozen=True) class Symbol: """Represents an S-expression symbol.""" name = attrib() NAME_PATTERN = re.compile( r'[a-zA-Z*+=<>!?/$%_][0-9a-zA-Z*+=<>!?/$%_-]*|-') @name.validator def _validate_name(self, attribute, value): if not isinstance(value, str): raise TypeError('symbol name must be a string') if not self.NAME_PATTERN.fullmatch(value): raise ValueError(f'symbol name {value} is not valid') def __str__(self): return self.name