Skip to content

Commit 0a2221d

Browse files
committed
Fix scip crate symbol name
1 parent 1eb9f5e commit 0a2221d

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/tools/rust-analyzer/crates/ide/src/moniker.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)