def lex.token

bend-lint-rules@0.2.0.0 · layout/format.bend:749

import bend-lint-rules@0.2.0.0/layout/format.bend as Format
import Base

749# The token at the start of s; prev is the character before it. Literals
750# and comment text are kept verbatim: a quote or # inside a string is not
751# syntax. Successor notation (1n+) and quantities (&2) are single tokens.
752def lex.token(s: String, keep: String, prev: Char) -> Scan:
753  match s:
754    case SNil{}:
755      Eof{}
756    case SCon{' ', +rest}:
757      blanks(rest, rest, 1, ' ')
758    case SCon{'\n', rest}:
759      Tok{"\n", 1, rest, '\n', Newline{}, Word{}, False{}, None{}}
760    case SCon{'#', +rest}:
761      comment(scan(~is_not_line_end, rest, rest, is_not_line_end(rest), "#", 1, '#'))
762    case SCon{'"', +rest}:
763      literal(rest, rest, '"', Inside{}, "\"", 1, '"', None{})
764    case SCon{'\'', +rest}:
765      literal(rest, rest, '\'', Inside{}, "'", 1, '\'', None{})
766    case SCon{'<', +rest}:
767      lex.lt(rest, rest, prev)
768    case SCon{'>', +rest}:
769      lex.gt(rest, rest, prev)
770    case SCon{'.', +rest}:
771      lex.dot(rest, rest)
772    case SCon{'-', +rest}:
773      lex.minus(rest, rest)
774    case SCon{'=', +rest}:
775      lex.eq(rest, rest)
776    case SCon{'!', +rest}:
777      lex.bang(rest, rest)
778    case SCon{'&', +rest}:
779      lex.amp(rest, rest)
780    case SCon{'|', +rest}:
781      lex.bar(rest, rest)
782    case SCon{'+', +rest}:
783      lex.plus(rest, rest)
784    case _:
785      lex.char(keep)

Uses (26)

Used by (2)