Remove suspicious unwrap
This commit is contained in:
parent
bcff166b3a
commit
6e2c3f610b
@ -468,7 +468,7 @@ pub struct ExternCrateDeclData {
|
||||
pub name: Name,
|
||||
pub alias: Option<ImportAlias>,
|
||||
pub visibility: RawVisibility,
|
||||
pub crate_id: CrateId,
|
||||
pub crate_id: Option<CrateId>,
|
||||
}
|
||||
|
||||
impl ExternCrateDeclData {
|
||||
@ -482,15 +482,12 @@ impl ExternCrateDeclData {
|
||||
|
||||
let name = extern_crate.name.clone();
|
||||
let crate_id = if name == hir_expand::name![self] {
|
||||
loc.container.krate()
|
||||
Some(loc.container.krate())
|
||||
} else {
|
||||
db.crate_def_map(loc.container.krate())
|
||||
.extern_prelude()
|
||||
.find(|&(prelude_name, ..)| *prelude_name == name)
|
||||
// FIXME: Suspicious unwrap
|
||||
.unwrap()
|
||||
.1
|
||||
.krate()
|
||||
.map(|(_, root)| root.krate())
|
||||
};
|
||||
|
||||
Arc::new(Self {
|
||||
|
@ -126,7 +126,7 @@ impl HasAttrs for ExternCrateDecl {
|
||||
db.attrs_with_owner(def)
|
||||
}
|
||||
fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> {
|
||||
let crate_docs = self.resolved_crate(db).root_module().attrs(db).docs().map(String::from);
|
||||
let crate_docs = self.resolved_crate(db)?.root_module().attrs(db).docs().map(String::from);
|
||||
let def = AttrDefId::ExternCrateId(self.into());
|
||||
let decl_docs = db.attrs(def).docs().map(String::from);
|
||||
match (decl_docs, crate_docs) {
|
||||
|
@ -2138,8 +2138,8 @@ impl ExternCrateDecl {
|
||||
self.id.module(db.upcast()).into()
|
||||
}
|
||||
|
||||
pub fn resolved_crate(self, db: &dyn HirDatabase) -> Crate {
|
||||
db.extern_crate_decl_data(self.id).crate_id.into()
|
||||
pub fn resolved_crate(self, db: &dyn HirDatabase) -> Option<Crate> {
|
||||
db.extern_crate_decl_data(self.id).crate_id.map(Into::into)
|
||||
}
|
||||
|
||||
pub fn name(self, db: &dyn HirDatabase) -> Name {
|
||||
|
@ -538,7 +538,7 @@ impl NameRefClass {
|
||||
},
|
||||
ast::ExternCrate(extern_crate_ast) => {
|
||||
let extern_crate = sema.to_def(&extern_crate_ast)?;
|
||||
let krate = extern_crate.resolved_crate(sema.db);
|
||||
let krate = extern_crate.resolved_crate(sema.db)?;
|
||||
Some(if extern_crate_ast.rename().is_some() {
|
||||
NameRefClass::Definition(Definition::Module(krate.root_module()))
|
||||
} else {
|
||||
|
@ -77,10 +77,11 @@ pub(crate) fn goto_definition(
|
||||
.into_iter()
|
||||
.flat_map(|def| {
|
||||
if let Definition::ExternCrateDecl(crate_def) = def {
|
||||
return vec![crate_def
|
||||
return crate_def
|
||||
.resolved_crate(db)
|
||||
.root_module()
|
||||
.to_nav(sema.db)];
|
||||
.map(|it| it.root_module().to_nav(sema.db))
|
||||
.into_iter()
|
||||
.collect();
|
||||
}
|
||||
try_filter_trait_item_definition(sema, &def)
|
||||
.unwrap_or_else(|| def_to_nav(sema.db, def))
|
||||
|
@ -45,4 +45,5 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
||||
</style>
|
||||
<pre><code><span class="keyword">extern</span> <span class="keyword">crate</span> <span class="module crate_root default_library library">std</span><span class="semicolon">;</span>
|
||||
<span class="keyword">extern</span> <span class="keyword">crate</span> <span class="module crate_root default_library library">alloc</span> <span class="keyword">as</span> <span class="module crate_root declaration">abc</span><span class="semicolon">;</span>
|
||||
<span class="keyword">extern</span> <span class="keyword">crate</span> <span class="unresolved_reference">unresolved</span> <span class="keyword">as</span> <span class="module crate_root declaration">definitely_unresolved</span><span class="semicolon">;</span>
|
||||
</code></pre>
|
@ -804,6 +804,7 @@ fn test_extern_crate() {
|
||||
//- /main.rs crate:main deps:std,alloc
|
||||
extern crate std;
|
||||
extern crate alloc as abc;
|
||||
extern crate unresolved as definitely_unresolved;
|
||||
//- /std/lib.rs crate:std
|
||||
pub struct S;
|
||||
//- /alloc/lib.rs crate:alloc
|
||||
|
Loading…
x
Reference in New Issue
Block a user