@@ -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