@@ -289,7 +289,10 @@ fn def_to_non_local_moniker(
289
289
definition : Definition ,
290
290
from_crate : Crate ,
291
291
) -> 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
+ } ;
293
296
let krate = module. krate ( ) ;
294
297
let edition = krate. edition ( db) ;
295
298
@@ -322,12 +325,18 @@ fn def_to_non_local_moniker(
322
325
name : name. display ( db, edition) . to_string ( ) ,
323
326
desc : def_to_kind ( db, def) . into ( ) ,
324
327
} ) ;
325
- } else if reverse_description. is_empty ( ) {
326
- // Don't allow the last descriptor to be absent.
327
- return None ;
328
328
} else {
329
329
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
+ }
331
340
_ => {
332
341
tracing:: error!( ?def, "Encountered enclosing definition with no name" ) ;
333
342
}
@@ -340,6 +349,9 @@ fn def_to_non_local_moniker(
340
349
} ;
341
350
def = next_def;
342
351
}
352
+ if reverse_description. is_empty ( ) {
353
+ return None ;
354
+ }
343
355
reverse_description. reverse ( ) ;
344
356
let description = reverse_description;
345
357
0 commit comments