remove is_at_end
change lrllkqtuslvksruukrquknwuxlnklzlr
commit 8edb6b143b7a512d1fb2e945615fb073f7fc9881
author Alpha Chen <alpha@kejadlen.dev>
date
parent pyzwpxxm
diff --git a/rust/src/scanner.rs b/rust/src/scanner.rs
index 879d7cb..3a2d6aa 100644
--- a/rust/src/scanner.rs
+++ b/rust/src/scanner.rs
@@ -18,7 +18,7 @@ impl<'a> Scanner<'a> {
     pub fn scan(&mut self) -> Result<Token> {
         self.skip_whitespace();
 
-        if self.is_at_end() {
+        if self.peek().is_none() {
             return self.make_token(TokenKind::Eof);
         }
 
@@ -75,10 +75,6 @@ impl<'a> Scanner<'a> {
         };
     }
 
-    fn is_at_end(&self) -> bool {
-        self.current == self.source.len()
-    }
-
     fn make_token(&self, kind: TokenKind) -> Result<Token> {
         Ok(Token {
             kind,
@@ -101,11 +97,7 @@ impl<'a> Scanner<'a> {
     }
 
     fn is_match(&mut self, expected: char) -> bool {
-        if self.is_at_end() {
-            return false;
-        }
-
-        if self.source[self.current] as char != expected {
+        if self.peek() != Some(expected) {
             return false;
         }
 
@@ -146,11 +138,7 @@ impl<'a> Scanner<'a> {
     }
 
     fn peek_next(&mut self) -> Option<char> {
-        if self.is_at_end() {
-            None
-        } else {
-            Some(self.source[self.current + 1] as char)
-        }
+        self.source.get(self.current + 1).map(|&x| x as char)
     }
 
     fn string(&mut self) -> Result<Token> {
@@ -161,7 +149,7 @@ impl<'a> Scanner<'a> {
             self.advance();
         }
 
-        if self.is_at_end() {
+        if self.peek().is_none() {
             return self.error_token("Unterminated string.");
         }