scan method
bool
scan(
- StatelessExternalScannerState state,
- TreeSitterExternalLexer lexer,
- List<
bool> validSymbols
override
Implementation
@override
bool scan(
StatelessExternalScannerState state,
TreeSitterExternalLexer lexer,
List<bool> validSymbols,
) {
if (validSymbols.length < 2 || validSymbols[1] || !validSymbols[0]) {
return false;
}
if (!_isAsciiUpper(lexer.lookahead)) return false;
var previous = lexer.lookahead;
lexer.advance(skip: false);
while (_isAsciiUpper(lexer.lookahead) ||
_isAsciiDigit(lexer.lookahead) ||
_isCommentTagInternal(lexer.lookahead)) {
previous = lexer.lookahead;
lexer.advance(skip: false);
}
lexer.markEnd();
if (_isCommentTagInternal(previous)) return false;
if ((_isWhitespace(lexer.lookahead) && !_isNewline(lexer.lookahead)) ||
lexer.lookahead == 0x28) {
while (_isWhitespace(lexer.lookahead) && !_isNewline(lexer.lookahead)) {
lexer.advance(skip: false);
}
if (lexer.lookahead != 0x28) return false;
lexer.advance(skip: false);
var userLength = 0;
while (lexer.lookahead != 0x29) {
if (_isNewline(lexer.lookahead)) return false;
lexer.advance(skip: false);
userLength++;
}
if (userLength == 0) return false;
lexer.advance(skip: false);
}
if (lexer.lookahead != 0x3a) return false;
lexer.advance(skip: false);
if (!_isWhitespace(lexer.lookahead)) return false;
lexer.setResultSymbol(symbols[0]);
return true;
}