src/basilisp/lang/reader.py
def _read_sym(ctx: ReaderContext) -> MaybeSymbol:
    """Return a symbol from the input stream.

    If a symbol appears in a syntax quoted form, the reader will attempt
    to resolve the symbol using the resolver in the ReaderContext `ctx`.
    The resolver will look into the current namespace for an alias or
    namespace matching the symbol's namespace."""
    ns, name = _read_namespaced(ctx, allowed_suffix="#")
    if not ctx.is_syntax_quoted and name.endswith("#"):
        raise SyntaxError("Gensym may not appear outside syntax quote")
    if ns is not None:
        if any(map(lambda s: len(s) == 0, ns.split("."))):
            raise SyntaxError(
                "All '.' separated segments of a namespace "
                "must contain at least one character."
            )
    if name.startswith(".") and ns is not None:
        raise SyntaxError("Symbols starting with '.' may not have a namespace")
    if ns is None:
        if name == "nil":
            return None
        elif name == "true":
            return True
        elif name == "false":
            return False
    if ctx.is_syntax_quoted and not name.endswith("#"):
        return ctx.resolve(symbol.symbol(name, ns))
    return symbol.symbol(name, ns=ns)
def _read_sym(ctx: ReaderContext) -> MaybeSymbol:
    ns, name = _read_namespaced(ctx, allowed_suffix="#")
    if not ctx.is_syntax_quoted and name.endswith("#"):
        raise SyntaxError("Gensym may not appear outside syntax quote")
    if ns is not None:
        if any(map(lambda s: len(s) == 0, ns.split("."))):
            raise SyntaxError(
                "All '.' separated segments of a namespace "
                "must contain at least one character."
            )
    if name.startswith(".") and ns is not None:
        raise SyntaxError("Symbols starting with '.' may not have a namespace")
    if ns is None:
        if name == "nil":
            return None
        elif name == "true":
            return True
        elif name == "false":
            return False
    if ctx.is_syntax_quoted and not name.endswith("#"):
        return ctx.resolve(symbol.symbol(name, ns))
    return symbol.symbol(name, ns=ns)
def _read_sym ( ctx : ReaderContext ) -> MaybeSymbol : ns , name = _read_namespaced ( ctx , allowed_suffix = "#" ) if not ctx . is_syntax_quoted and name . endswith ( "#" ) : raise SyntaxError ( "Gensym may not appear outside syntax quote" ) if ns is not None : if any ( map ( lambda s : len ( s ) == 0 , ns . split ( "." ) ) ) : raise SyntaxError ( "All '.' separated segments of a namespace " "must contain at least one character." ) if name . startswith ( "." ) and ns is not None : raise SyntaxError ( "Symbols starting with '.' may not have a namespace" ) if ns is None : if name == "nil" : return None elif name == "true" : return True elif name == "false" : return False if ctx . is_syntax_quoted and not name . endswith ( "#" ) : return ctx . resolve ( symbol . symbol ( name , ns ) ) return symbol . symbol ( name , ns = ns )
Return a symbol from the input stream.

    If a symbol appears in a syntax quoted form, the reader will attempt
    to resolve the symbol using the resolver in the ReaderContext `ctx`.
    The resolver will look into the current namespace for an alias or
    namespace matching the symbol's namespace.
Return a symbol from the input stream .