Skip to content

Commit 9f53b10

Browse files
Refactor use handling for crate, super, and self
I added these the wrong way..
1 parent 78c2a7b commit 9f53b10

1 file changed

Lines changed: 67 additions & 4 deletions

File tree

src/compiler/parser.rs

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,73 @@ impl Parser {
292292
(TokenKind::Star, _) => self.push_node(NodeKind::UseGlob),
293293
(TokenKind::Identifier(ident), _) => {
294294
let ident = ident.clone();
295-
295+
296+
match self.peek() {
297+
TokenKind::ColCol => {
298+
self.next();
299+
let tree = self.parse_use_tree()?;
300+
self.push_node(NodeKind::UsePath { ident, tree })
301+
}
302+
TokenKind::As => {
303+
self.next();
304+
let name = match self.next_with_span() {
305+
(TokenKind::Identifier(name), _) => name.clone(),
306+
(other, span) => return Err(ParseError::new(span, format!("expected alias name, found {:?}", other))),
307+
};
308+
self.push_node(NodeKind::UseRename { ident, name })
309+
}
310+
_ => {
311+
self.push_node(NodeKind::UseName { ident })
312+
}
313+
}
314+
}
315+
(TokenKind::Crate, _) => {
316+
let ident = "crate".to_string();
317+
318+
match self.peek() {
319+
TokenKind::ColCol => {
320+
self.next();
321+
let tree = self.parse_use_tree()?;
322+
self.push_node(NodeKind::UsePath { ident, tree })
323+
}
324+
TokenKind::As => {
325+
self.next();
326+
let name = match self.next_with_span() {
327+
(TokenKind::Identifier(name), _) => name.clone(),
328+
(other, span) => return Err(ParseError::new(span, format!("expected alias name, found {:?}", other))),
329+
};
330+
self.push_node(NodeKind::UseRename { ident, name })
331+
}
332+
_ => {
333+
self.push_node(NodeKind::UseName { ident })
334+
}
335+
}
336+
}
337+
(TokenKind::Super, _) => {
338+
let ident = "super".to_string();
339+
340+
match self.peek() {
341+
TokenKind::ColCol => {
342+
self.next();
343+
let tree = self.parse_use_tree()?;
344+
self.push_node(NodeKind::UsePath { ident, tree })
345+
}
346+
TokenKind::As => {
347+
self.next();
348+
let name = match self.next_with_span() {
349+
(TokenKind::Identifier(name), _) => name.clone(),
350+
(other, span) => return Err(ParseError::new(span, format!("expected alias name, found {:?}", other))),
351+
};
352+
self.push_node(NodeKind::UseRename { ident, name })
353+
}
354+
_ => {
355+
self.push_node(NodeKind::UseName { ident })
356+
}
357+
}
358+
}
359+
(TokenKind::SelfValue, _) => {
360+
let ident = "self".to_string();
361+
296362
match self.peek() {
297363
TokenKind::ColCol => {
298364
self.next();
@@ -303,9 +369,6 @@ impl Parser {
303369
self.next();
304370
let name = match self.next_with_span() {
305371
(TokenKind::Identifier(name), _) => name.clone(),
306-
(TokenKind::Crate, _) => "crate".to_string(),
307-
(TokenKind::Super, _) => "super".to_string(),
308-
(TokenKind::SelfValue, _) => "self".to_string(),
309372
(other, span) => return Err(ParseError::new(span, format!("expected alias name, found {:?}", other))),
310373
};
311374
self.push_node(NodeKind::UseRename { ident, name })

0 commit comments

Comments
 (0)