scan method

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

Implementation

@override
bool scan(
  RustExternalScannerState state,
  TreeSitterExternalLexer lexer,
  List<bool> validSymbols,
) {
  if (_valid(validSymbols, RustExternalToken.errorSentinel)) return false;

  if (_valid(validSymbols, RustExternalToken.blockCommentContent) ||
      _valid(validSymbols, RustExternalToken.blockInnerDocMarker) ||
      _valid(validSymbols, RustExternalToken.blockOuterDocMarker)) {
    return _processBlockComment(lexer, validSymbols);
  }

  if (_valid(validSymbols, RustExternalToken.stringContent) &&
      !_valid(validSymbols, RustExternalToken.floatLiteral)) {
    return _processString(lexer);
  }

  if (_valid(validSymbols, RustExternalToken.lineDocContent)) {
    return _processLineDocContent(lexer);
  }

  while (_isWhitespace(lexer.lookahead)) {
    lexer.advance(skip: true);
  }

  if (_valid(validSymbols, RustExternalToken.rawStringLiteralStart) &&
      (lexer.lookahead == 0x72 ||
          lexer.lookahead == 0x62 ||
          lexer.lookahead == 0x63)) {
    return _scanRawStringStart(state, lexer);
  }

  if (_valid(validSymbols, RustExternalToken.rawStringLiteralContent)) {
    return _scanRawStringContent(state, lexer);
  }

  if (_valid(validSymbols, RustExternalToken.rawStringLiteralEnd) &&
      lexer.lookahead == 0x22) {
    return _scanRawStringEnd(state, lexer);
  }

  if (_valid(validSymbols, RustExternalToken.floatLiteral) &&
      _isDigit(lexer.lookahead)) {
    return _processFloatLiteral(lexer);
  }

  return false;
}