scan method
bool
scan(
- DExternalScannerState state,
- TreeSitterExternalLexer lexer,
- 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;
}