scan method

  1. @override
bool scan(
  1. DExternalScannerState state,
  2. TreeSitterExternalLexer lexer,
  3. List<bool> validSymbols
)
override

Implementation

@override
bool scan(
  DExternalScannerState state,
  TreeSitterExternalLexer lexer,
  List<bool> validSymbols,
) {
  var c = lexer.lookahead;
  while (c != 0 && (_isSpace(c) || _isEol(c))) {
    lexer.advance(skip: true);
    c = lexer.lookahead;
  }

  if (lexer.isEof) return false;
  if (c == 0x5f || c == 0x1a) return _matchEof(lexer);
  if (c == 0x2e || _isDigit(c)) {
    return _matchNumber(lexer, validSymbols);
  }
  if (c == 0x21) return _matchNotInOrIs(lexer, validSymbols);
  if (c == 0x27) {
    return _valid(validSymbols, DExternalToken.charLiteral) &&
        _matchCharLiteral(lexer);
  }
  if (c == 0x22) {
    return _valid(validSymbols, DExternalToken.string) &&
        _matchDoubleQuotedString(lexer);
  }

  if (c == 0x72 && _valid(validSymbols, DExternalToken.string)) {
    lexer.advance(skip: false);
    return lexer.lookahead == 0x22 &&
        _matchRawString(lexer, 0x22, DExternalToken.string);
  }

  if (c == 0x71 && _valid(validSymbols, DExternalToken.string)) {
    lexer.advance(skip: false);
    if (lexer.lookahead != 0x22) return false;
    lexer.advance(skip: false);
    c = lexer.lookahead;
    return switch (c) {
      0x28 => _matchDelimitedString(lexer, 0x28, 0x29),
      0x5b => _matchDelimitedString(lexer, 0x5b, 0x5d),
      0x7b => _matchDelimitedString(lexer, 0x7b, 0x7d),
      0x3c => _matchDelimitedString(lexer, 0x3c, 0x3e),
      _ when _isAlphaNumeric(c) || c == 0x5f => _matchHeredocString(lexer),
      _ => _matchDelimitedString(lexer, 0, c),
    };
  }

  if (c == 0x60) {
    return _valid(validSymbols, DExternalToken.string) &&
        _matchRawString(lexer, 0x60, DExternalToken.string);
  }
  if (c == 0x23) return _matchHashOrShebang(lexer, validSymbols);
  if (c == 0x2f) {
    lexer.advance(skip: false);
    return switch (lexer.lookahead) {
      0x2f => _matchLineComment(lexer, validSymbols),
      0x2a => _matchBlockComment(lexer, validSymbols),
      0x2b => _matchNestedComment(lexer, validSymbols),
      _ => false,
    };
  }
  return false;
}