Skip to content

Commit 6e2c3f6

Browse files
committed
Remove suspicious unwrap
1 parent bcff166 commit 6e2c3f6

File tree

7 files changed

+13
-13
lines changed

7 files changed

+13
-13
lines changed

crates/hir-def/src/data.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ pub struct ExternCrateDeclData {
468468
pub name: Name,
469469
pub alias: Option<ImportAlias>,
470470
pub visibility: RawVisibility,
471-
pub crate_id: CrateId,
471+
pub crate_id: Option<CrateId>,
472472
}
473473

474474
impl ExternCrateDeclData {
@@ -482,15 +482,12 @@ impl ExternCrateDeclData {
482482

483483
let name = extern_crate.name.clone();
484484
let crate_id = if name == hir_expand::name![self] {
485-
loc.container.krate()
485+
Some(loc.container.krate())
486486
} else {
487487
db.crate_def_map(loc.container.krate())
488488
.extern_prelude()
489489
.find(|&(prelude_name, ..)| *prelude_name == name)
490-
// FIXME: Suspicious unwrap
491-
.unwrap()
492-
.1
493-
.krate()
490+
.map(|(_, root)| root.krate())
494491
};
495492

496493
Arc::new(Self {

crates/hir/src/attrs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ impl HasAttrs for ExternCrateDecl {
126126
db.attrs_with_owner(def)
127127
}
128128
fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> {
129-
let crate_docs = self.resolved_crate(db).root_module().attrs(db).docs().map(String::from);
129+
let crate_docs = self.resolved_crate(db)?.root_module().attrs(db).docs().map(String::from);
130130
let def = AttrDefId::ExternCrateId(self.into());
131131
let decl_docs = db.attrs(def).docs().map(String::from);
132132
match (decl_docs, crate_docs) {

crates/hir/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2138,8 +2138,8 @@ impl ExternCrateDecl {
21382138
self.id.module(db.upcast()).into()
21392139
}
21402140

2141-
pub fn resolved_crate(self, db: &dyn HirDatabase) -> Crate {
2142-
db.extern_crate_decl_data(self.id).crate_id.into()
2141+
pub fn resolved_crate(self, db: &dyn HirDatabase) -> Option<Crate> {
2142+
db.extern_crate_decl_data(self.id).crate_id.map(Into::into)
21432143
}
21442144

21452145
pub fn name(self, db: &dyn HirDatabase) -> Name {

crates/ide-db/src/defs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ impl NameRefClass {
538538
},
539539
ast::ExternCrate(extern_crate_ast) => {
540540
let extern_crate = sema.to_def(&extern_crate_ast)?;
541-
let krate = extern_crate.resolved_crate(sema.db);
541+
let krate = extern_crate.resolved_crate(sema.db)?;
542542
Some(if extern_crate_ast.rename().is_some() {
543543
NameRefClass::Definition(Definition::Module(krate.root_module()))
544544
} else {

crates/ide/src/goto_definition.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,11 @@ pub(crate) fn goto_definition(
7777
.into_iter()
7878
.flat_map(|def| {
7979
if let Definition::ExternCrateDecl(crate_def) = def {
80-
return vec![crate_def
80+
return crate_def
8181
.resolved_crate(db)
82-
.root_module()
83-
.to_nav(sema.db)];
82+
.map(|it| it.root_module().to_nav(sema.db))
83+
.into_iter()
84+
.collect();
8485
}
8586
try_filter_trait_item_definition(sema, &def)
8687
.unwrap_or_else(|| def_to_nav(sema.db, def))

crates/ide/src/syntax_highlighting/test_data/highlight_extern_crate.html

+1
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,5 @@
4545
</style>
4646
<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>
4747
<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>
48+
<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>
4849
</code></pre>

crates/ide/src/syntax_highlighting/tests.rs

+1
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,7 @@ fn test_extern_crate() {
804804
//- /main.rs crate:main deps:std,alloc
805805
extern crate std;
806806
extern crate alloc as abc;
807+
extern crate unresolved as definitely_unresolved;
807808
//- /std/lib.rs crate:std
808809
pub struct S;
809810
//- /alloc/lib.rs crate:alloc

0 commit comments

Comments
 (0)