MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / scan_token

Method scan_token

aiscript-lexer/src/lib.rs:465–654  ·  view source on GitHub ↗

Scans the next token from the source

(&mut self)

Source from the content-addressed store, hash-verified

463
464 // Scans the next token from the source
465 fn scan_token(&mut self) -> Token<'a> {
466 self.skip_white_spaces();
467
468 self.start = self.current;
469
470 let c = match self.advance() {
471 Some(c) => c,
472 None => return Token::new(TokenType::Eof, "", self.line),
473 };
474
475 match c {
476 '(' => self.make_token(TokenType::OpenParen),
477 ')' => self.make_token(TokenType::CloseParen),
478 '[' => self.make_token(TokenType::OpenBracket),
479 ']' => self.make_token(TokenType::CloseBracket),
480 '{' => self.make_token(TokenType::OpenBrace),
481 '}' => self.make_token(TokenType::CloseBrace),
482 ';' => self.make_token(TokenType::Semicolon),
483 ',' => self.make_token(TokenType::Comma),
484 '@' => self.make_token(TokenType::At),
485 '$' => self.make_token(TokenType::Dollar),
486 '?' => self.make_token(TokenType::Question),
487 '_' => {
488 // Check if the next character is not alphanumeric or another underscore
489 if !matches!(self.peek(), Some(c) if c.is_alphanumeric() || c == '_') {
490 self.make_token(TokenType::Underscore)
491 } else {
492 // Otherwise, scan it as an identifier
493 self.scan_identifier()
494 }
495 }
496 '.' => {
497 let kind = if self.peek() == Some('.') {
498 self.advance();
499 if self.peek() == Some('=') {
500 self.advance();
501 TokenType::DotDotEq
502 } else {
503 TokenType::DotDot
504 }
505 } else {
506 TokenType::Dot
507 };
508 self.make_token(kind)
509 }
510 '|' => {
511 let kind = if self.peek() == Some('>') {
512 self.advance();
513 TokenType::PipeArrow
514 } else {
515 TokenType::Pipe
516 };
517 self.make_token(kind)
518 }
519 '-' => {
520 let p = self.peek();
521 let kind = if p == Some('>') {
522 self.advance();

Callers 1

nextMethod · 0.80

Calls 10

skip_white_spacesMethod · 0.80
advanceMethod · 0.80
make_tokenMethod · 0.80
scan_identifierMethod · 0.80
check_nextMethod · 0.80
scan_docstringMethod · 0.80
scan_stringMethod · 0.80
scan_fstringMethod · 0.80
scan_numberMethod · 0.80
peekMethod · 0.45

Tested by

no test coverage detected