Skip to content

Commit 6ccace7

Browse files
committed
Simplify and refactor Reader
Simplify reader's implementation, rename methods to be more consistent, add 1-character lookbehind support, expose unconsumed (tail) range and text.
1 parent 93abfc8 commit 6ccace7

File tree

4 files changed

+155
-64
lines changed

4 files changed

+155
-64
lines changed

crates/emmylua_parser/src/lexer/lua_doc_lexer.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ impl LuaDocLexer<'_> {
4747
}
4848

4949
pub fn reset(&mut self, kind: LuaTokenKind, range: SourceRange) {
50-
self.reader = Some(Reader::new_with_range(self.origin_text, range));
50+
let text = &self.origin_text[range.start_offset..range.end_offset()];
51+
self.reader = Some(Reader::new_with_range(text, range));
5152
self.origin_token_kind = kind;
5253
}
5354

@@ -76,7 +77,7 @@ impl LuaDocLexer<'_> {
7677
}
7778

7879
pub fn current_token_range(&self) -> SourceRange {
79-
self.reader.as_ref().unwrap().saved_range()
80+
self.reader.as_ref().unwrap().current_range()
8081
}
8182

8283
fn lex_init(&mut self) -> LuaTokenKind {
@@ -135,7 +136,7 @@ impl LuaDocLexer<'_> {
135136
ch if is_name_start(ch) => {
136137
reader.bump();
137138
reader.eat_while(is_name_continue);
138-
let text = reader.current_saved_text();
139+
let text = reader.current_text();
139140
to_tag(text)
140141
}
141142
_ => {
@@ -490,7 +491,7 @@ impl LuaDocLexer<'_> {
490491
}
491492

492493
reader.eat_while(|c| c.is_ascii_alphabetic());
493-
let text = reader.current_saved_text();
494+
let text = reader.current_text();
494495
match text {
495496
"region" | "#region" => LuaTokenKind::TkDocRegion,
496497
"endregion" | "#endregion" => LuaTokenKind::TkDocEndRegion,
@@ -651,7 +652,7 @@ fn read_doc_name<'a>(reader: &'a mut Reader) -> (&'a str, bool /* str tpl */) {
651652
}
652653
}
653654

654-
(reader.current_saved_text(), str_tpl)
655+
(reader.current_text(), str_tpl)
655656
}
656657

657658
fn is_source_continue(ch: char) -> bool {

crates/emmylua_parser/src/lexer/lua_lexer.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ impl LuaLexer<'_> {
3030
break;
3131
}
3232

33-
tokens.push(LuaTokenData::new(kind, self.reader.saved_range()));
33+
tokens.push(LuaTokenData::new(kind, self.reader.current_range()));
3434
}
3535

3636
tokens
@@ -122,7 +122,7 @@ impl LuaLexer<'_> {
122122
if self.reader.current_char() != '[' {
123123
self.errors.push(LuaParseError::syntax_error_from(
124124
&t!("invalid long string delimiter"),
125-
self.reader.saved_range(),
125+
self.reader.current_range(),
126126
));
127127
return LuaTokenKind::TkLongString;
128128
}
@@ -149,7 +149,7 @@ impl LuaLexer<'_> {
149149
if !self.lexer_config.support_integer_operation() {
150150
self.errors.push(LuaParseError::syntax_error_from(
151151
&t!("bitwise operation is not supported"),
152-
self.reader.saved_range(),
152+
self.reader.current_range(),
153153
));
154154
}
155155

@@ -176,7 +176,7 @@ impl LuaLexer<'_> {
176176
if !self.lexer_config.support_integer_operation() {
177177
self.errors.push(LuaParseError::syntax_error_from(
178178
&t!("bitwise operation is not supported"),
179-
self.reader.saved_range(),
179+
self.reader.current_range(),
180180
));
181181
}
182182

@@ -198,7 +198,7 @@ impl LuaLexer<'_> {
198198
if !self.lexer_config.support_integer_operation() {
199199
self.errors.push(LuaParseError::syntax_error_from(
200200
&t!("bitwise operation is not supported"),
201-
self.reader.saved_range(),
201+
self.reader.current_range(),
202202
));
203203
}
204204
return LuaTokenKind::TkBitXor;
@@ -252,7 +252,7 @@ impl LuaLexer<'_> {
252252
if self.reader.current_char() != quote {
253253
self.errors.push(LuaParseError::syntax_error_from(
254254
&t!("unfinished string"),
255-
self.reader.saved_range(),
255+
self.reader.current_range(),
256256
));
257257
return LuaTokenKind::TkString;
258258
}
@@ -297,7 +297,7 @@ impl LuaLexer<'_> {
297297
_ if self.reader.is_eof() => {
298298
self.errors.push(LuaParseError::syntax_error_from(
299299
&t!("unfinished long comment"),
300-
self.reader.saved_range(),
300+
self.reader.current_range(),
301301
));
302302
return LuaTokenKind::TkLongComment;
303303
}
@@ -323,7 +323,7 @@ impl LuaLexer<'_> {
323323
if !self.lexer_config.support_integer_operation() {
324324
self.errors.push(LuaParseError::syntax_error_from(
325325
&t!("integer division is not supported"),
326-
self.reader.saved_range(),
326+
self.reader.current_range(),
327327
));
328328
}
329329

@@ -405,7 +405,7 @@ impl LuaLexer<'_> {
405405
if !self.lexer_config.support_integer_operation() {
406406
self.errors.push(LuaParseError::syntax_error_from(
407407
&t!("bitwise operation is not supported"),
408-
self.reader.saved_range(),
408+
self.reader.current_range(),
409409
));
410410
}
411411

@@ -428,7 +428,7 @@ impl LuaLexer<'_> {
428428
if !self.lexer_config.support_integer_operation() {
429429
self.errors.push(LuaParseError::syntax_error_from(
430430
&t!("bitwise operation is not supported"),
431-
self.reader.saved_range(),
431+
self.reader.current_range(),
432432
));
433433
}
434434

@@ -483,7 +483,7 @@ impl LuaLexer<'_> {
483483
ch if is_name_start(ch) => {
484484
self.reader.bump();
485485
self.reader.eat_while(is_name_continue);
486-
let name = self.reader.current_saved_text();
486+
let name = self.reader.current_text();
487487
self.name_to_kind(name)
488488
}
489489
_ => {
@@ -546,7 +546,7 @@ impl LuaLexer<'_> {
546546
if !end {
547547
self.errors.push(LuaParseError::syntax_error_from(
548548
&t!("unfinished long string or comment"),
549-
self.reader.saved_range(),
549+
self.reader.current_range(),
550550
));
551551
}
552552

@@ -671,7 +671,7 @@ impl LuaLexer<'_> {
671671
"unexpected character '{}' after number literal",
672672
self.reader.current_char()
673673
),
674-
self.reader.saved_range(),
674+
self.reader.current_range(),
675675
));
676676
}
677677

0 commit comments

Comments
 (0)