@@ -264,14 +264,45 @@ where
264
264
import : & ImportData ,
265
265
) -> ReachedFixedPoint {
266
266
log:: debug!( "resolving import: {:?}" , import) ;
267
- if import. is_glob {
268
- return ReachedFixedPoint :: Yes ;
269
- } ;
270
267
let original_module = Module { krate : self . krate , module_id } ;
271
268
let ( def, reached_fixedpoint) =
272
269
self . result . resolve_path_fp ( self . db , original_module, & import. path ) ;
273
270
274
- if reached_fixedpoint == ReachedFixedPoint :: Yes {
271
+ if reached_fixedpoint != ReachedFixedPoint :: Yes {
272
+ return reached_fixedpoint;
273
+ }
274
+
275
+ if import. is_glob {
276
+ log:: debug!( "glob import: {:?}" , import) ;
277
+ match def. take_types ( ) {
278
+ Some ( ModuleDef :: Module ( m) ) => {
279
+ // TODO
280
+ }
281
+ Some ( ModuleDef :: Enum ( e) ) => {
282
+ tested_by ! ( glob_enum) ;
283
+ let variants = e. variants ( self . db ) ;
284
+ let resolutions = variants. into_iter ( )
285
+ . filter_map ( |variant| {
286
+ let res = Resolution {
287
+ def : PerNs :: both ( variant. into ( ) , e. into ( ) ) ,
288
+ import : Some ( import_id) ,
289
+ } ;
290
+ let name = variant. name ( self . db ) ?;
291
+ Some ( ( name, res) )
292
+ } )
293
+ . collect :: < Vec < _ > > ( ) ;
294
+ self . update ( module_id, |items| {
295
+ items. items . extend ( resolutions) ;
296
+ } ) ;
297
+ }
298
+ Some ( d) => {
299
+ log:: debug!( "glob import {:?} from non-module/enum {:?}" , import, d) ;
300
+ }
301
+ None => {
302
+ log:: debug!( "glob import {:?} didn't resolve as type" , import) ;
303
+ }
304
+ }
305
+ } else {
275
306
let last_segment = import. path . segments . last ( ) . unwrap ( ) ;
276
307
let name = import. alias . clone ( ) . unwrap_or_else ( || last_segment. name . clone ( ) ) ;
277
308
log:: debug!( "resolved import {:?} ({:?}) to {:?}" , name, import, def) ;
0 commit comments