@@ -289,7 +289,10 @@ fn def_to_non_local_moniker(
289289 definition : Definition ,
290290 from_crate : Crate ,
291291) -> Option < Moniker > {
292- let module = definition. module ( db) ?;
292+ let module = match definition {
293+ Definition :: Module ( module) if module. is_crate_root ( ) => module,
294+ _ => definition. module ( db) ?,
295+ } ;
293296 let krate = module. krate ( ) ;
294297 let edition = krate. edition ( db) ;
295298
@@ -322,12 +325,18 @@ fn def_to_non_local_moniker(
322325 name : name. display ( db, edition) . to_string ( ) ,
323326 desc : def_to_kind ( db, def) . into ( ) ,
324327 } ) ;
325- } else if reverse_description. is_empty ( ) {
326- // Don't allow the last descriptor to be absent.
327- return None ;
328328 } else {
329329 match def {
330- Definition :: Module ( module) if module. is_crate_root ( ) => { }
330+ Definition :: Module ( module) if module. is_crate_root ( ) => {
331+ // only include `crate` namespace by itself because we prefer
332+ // `rust-analyzer cargo foo . bar/` over `rust-analyzer cargo foo . crate/bar/`
333+ if reverse_description. is_empty ( ) {
334+ reverse_description. push ( MonikerDescriptor {
335+ name : "crate" . to_owned ( ) ,
336+ desc : MonikerDescriptorKind :: Namespace ,
337+ } ) ;
338+ }
339+ }
331340 _ => {
332341 tracing:: error!( ?def, "Encountered enclosing definition with no name" ) ;
333342 }
@@ -340,6 +349,9 @@ fn def_to_non_local_moniker(
340349 } ;
341350 def = next_def;
342351 }
352+ if reverse_description. is_empty ( ) {
353+ return None ;
354+ }
343355 reverse_description. reverse ( ) ;
344356 let description = reverse_description;
345357
0 commit comments