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

Method scan_docstring

aiscript-lexer/src/lib.rs:339–388  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

337 }
338
339 fn scan_docstring(&mut self) -> Token<'a> {
340 // Skip the opening quotes
341 for _ in 0..3 {
342 self.advance();
343 }
344 // Don't set self.start = self.current, since we want
345 // to include the first character of the docstring
346 self.start += 3;
347
348 loop {
349 match self.peek() {
350 Some(c) => {
351 if c == '"' && self.next2() == "\"\"" {
352 break;
353 }
354 // Track line numbers
355 if c == '\n' {
356 self.line += 1;
357 }
358 self.advance();
359 }
360 // Check for EOF
361 None => {
362 return Token::new(TokenType::Invalid, "Unterminated docstring.", self.line);
363 }
364 }
365 }
366
367 let token = if self.start == self.current - 1 {
368 // Empty docstring
369 Token {
370 kind: TokenType::Doc,
371 lexeme: "",
372 line: self.line,
373 }
374 } else {
375 let mut token = self.make_token(TokenType::Doc);
376 token.lexeme = token.lexeme.trim();
377 token
378 };
379
380 while let Some(c) = self.peek() {
381 if c == '"' {
382 self.advance();
383 } else {
384 break;
385 }
386 }
387 token
388 }
389
390 // Scans numeric literals (integers and floats)
391 fn scan_number(&mut self) -> Token<'a> {

Callers 1

scan_tokenMethod · 0.80

Calls 4

advanceMethod · 0.80
next2Method · 0.80
make_tokenMethod · 0.80
peekMethod · 0.45

Tested by

no test coverage detected