// TODO(stuartmorgan): Remove this. See https://github.com/flutter/flutter/issues/174722.
// ignore_for_file: public_member_api_docs

class TokenType {
  const TokenType(this.name);

  final String name;

  @override
  String toString() => '(TokenType $name)';

  static const TokenType text = TokenType('text');
  static const TokenType openDelimiter = TokenType('openDelimiter');
  static const TokenType closeDelimiter = TokenType('closeDelimiter');

  // A sigil is the word commonly used to describe the special character at the
  // start of mustache tag i.e. #, ^ or /.
  static const TokenType sigil = TokenType('sigil');
  static const TokenType identifier = TokenType('identifier');
  static const TokenType dot = TokenType('dot');

  static const TokenType changeDelimiter = TokenType('changeDelimiter');
  static const TokenType whitespace = TokenType('whitespace');
  static const TokenType lineEnd = TokenType('lineEnd');
}

class Token {
  Token(this.type, this.value, this.start, this.end);

  final TokenType type;
  final String value;

  final int start;
  final int end;

  @override
  String toString() => '(Token ${type.name} "$value" $start $end)';
}
