@@ -225,6 +225,26 @@ fn convert_path(
225
225
let mut segments = path. segments ( ) ;
226
226
227
227
let segment = & segments. next ( ) ?;
228
+ let handle_super_kw = & mut |init_deg| {
229
+ let mut deg = init_deg;
230
+ let mut next_segment = None ;
231
+ for segment in segments. by_ref ( ) {
232
+ match segment. kind ( ) ? {
233
+ ast:: PathSegmentKind :: SuperKw => deg += 1 ,
234
+ ast:: PathSegmentKind :: Name ( name) => {
235
+ next_segment = Some ( name. as_name ( ) ) ;
236
+ break ;
237
+ }
238
+ ast:: PathSegmentKind :: Type { .. }
239
+ | ast:: PathSegmentKind :: SelfTypeKw
240
+ | ast:: PathSegmentKind :: SelfKw
241
+ | ast:: PathSegmentKind :: CrateKw => return None ,
242
+ }
243
+ }
244
+
245
+ Some ( ModPath :: from_segments ( PathKind :: Super ( deg) , next_segment) )
246
+ } ;
247
+
228
248
let mut mod_path = match segment. kind ( ) ? {
229
249
ast:: PathSegmentKind :: Name ( name_ref) => {
230
250
if name_ref. text ( ) == "$crate" {
@@ -245,26 +265,8 @@ fn convert_path(
245
265
ModPath :: from_segments ( PathKind :: Plain , Some ( known:: SELF_TYPE ) )
246
266
}
247
267
ast:: PathSegmentKind :: CrateKw => ModPath :: from_segments ( PathKind :: Crate , iter:: empty ( ) ) ,
248
- ast:: PathSegmentKind :: SelfKw => ModPath :: from_segments ( PathKind :: Super ( 0 ) , iter:: empty ( ) ) ,
249
- ast:: PathSegmentKind :: SuperKw => {
250
- let mut deg = 1 ;
251
- let mut next_segment = None ;
252
- for segment in segments. by_ref ( ) {
253
- match segment. kind ( ) ? {
254
- ast:: PathSegmentKind :: SuperKw => deg += 1 ,
255
- ast:: PathSegmentKind :: Name ( name) => {
256
- next_segment = Some ( name. as_name ( ) ) ;
257
- break ;
258
- }
259
- ast:: PathSegmentKind :: Type { .. }
260
- | ast:: PathSegmentKind :: SelfTypeKw
261
- | ast:: PathSegmentKind :: SelfKw
262
- | ast:: PathSegmentKind :: CrateKw => return None ,
263
- }
264
- }
265
-
266
- ModPath :: from_segments ( PathKind :: Super ( deg) , next_segment)
267
- }
268
+ ast:: PathSegmentKind :: SelfKw => handle_super_kw ( 0 ) ?,
269
+ ast:: PathSegmentKind :: SuperKw => handle_super_kw ( 1 ) ?,
268
270
ast:: PathSegmentKind :: Type { .. } => {
269
271
// not allowed in imports
270
272
return None ;
0 commit comments