aboutsummaryrefslogtreecommitdiff
path: root/crates/ide_db/src
diff options
context:
space:
mode:
authorLukas Wirth <[email protected]>2021-03-15 08:32:06 +0000
committerLukas Wirth <[email protected]>2021-03-15 08:32:06 +0000
commit9763d9e8c4ca01a4df0d70877020ec7351403b75 (patch)
treeb007710dcc6152b5c0fedd1c0bedf8c96811652d /crates/ide_db/src
parentc0459c53572f90fa9134192e432562af3daba5fa (diff)
Enable searching for builtin types
Diffstat (limited to 'crates/ide_db/src')
-rw-r--r--crates/ide_db/src/defs.rs2
-rw-r--r--crates/ide_db/src/search.rs16
2 files changed, 16 insertions, 2 deletions
diff --git a/crates/ide_db/src/defs.rs b/crates/ide_db/src/defs.rs
index ff612b7d0..f86e5ce93 100644
--- a/crates/ide_db/src/defs.rs
+++ b/crates/ide_db/src/defs.rs
@@ -70,7 +70,7 @@ impl Definition {
70 hir::ModuleDef::Static(it) => it.name(db)?, 70 hir::ModuleDef::Static(it) => it.name(db)?,
71 hir::ModuleDef::Trait(it) => it.name(db), 71 hir::ModuleDef::Trait(it) => it.name(db),
72 hir::ModuleDef::TypeAlias(it) => it.name(db), 72 hir::ModuleDef::TypeAlias(it) => it.name(db),
73 hir::ModuleDef::BuiltinType(_) => return None, 73 hir::ModuleDef::BuiltinType(it) => it.name(),
74 }, 74 },
75 Definition::SelfType(_) => return None, 75 Definition::SelfType(_) => return None,
76 Definition::Local(it) => it.name(db)?, 76 Definition::Local(it) => it.name(db)?,
diff --git a/crates/ide_db/src/search.rs b/crates/ide_db/src/search.rs
index ddcfbd3f3..1615d407e 100644
--- a/crates/ide_db/src/search.rs
+++ b/crates/ide_db/src/search.rs
@@ -6,7 +6,7 @@
6 6
7use std::{convert::TryInto, mem}; 7use std::{convert::TryInto, mem};
8 8
9use base_db::{FileId, FileRange, SourceDatabaseExt}; 9use base_db::{FileId, FileRange, SourceDatabase, SourceDatabaseExt};
10use hir::{DefWithBody, HasSource, Module, ModuleSource, Semantics, Visibility}; 10use hir::{DefWithBody, HasSource, Module, ModuleSource, Semantics, Visibility};
11use once_cell::unsync::Lazy; 11use once_cell::unsync::Lazy;
12use rustc_hash::FxHashMap; 12use rustc_hash::FxHashMap;
@@ -134,6 +134,20 @@ impl IntoIterator for SearchScope {
134impl Definition { 134impl Definition {
135 fn search_scope(&self, db: &RootDatabase) -> SearchScope { 135 fn search_scope(&self, db: &RootDatabase) -> SearchScope {
136 let _p = profile::span("search_scope"); 136 let _p = profile::span("search_scope");
137
138 if let Definition::ModuleDef(hir::ModuleDef::BuiltinType(_)) = self {
139 let mut res = FxHashMap::default();
140
141 let graph = db.crate_graph();
142 for krate in graph.iter() {
143 let root_file = graph[krate].root_file_id;
144 let source_root_id = db.file_source_root(root_file);
145 let source_root = db.source_root(source_root_id);
146 res.extend(source_root.iter().map(|id| (id, None)));
147 }
148 return SearchScope::new(res);
149 }
150
137 let module = match self.module(db) { 151 let module = match self.module(db) {
138 Some(it) => it, 152 Some(it) => it,
139 None => return SearchScope::empty(), 153 None => return SearchScope::empty(),