diff options
author | Lukas Wirth <[email protected]> | 2021-03-15 08:32:06 +0000 |
---|---|---|
committer | Lukas Wirth <[email protected]> | 2021-03-15 08:32:06 +0000 |
commit | 9763d9e8c4ca01a4df0d70877020ec7351403b75 (patch) | |
tree | b007710dcc6152b5c0fedd1c0bedf8c96811652d /crates/ide_db/src | |
parent | c0459c53572f90fa9134192e432562af3daba5fa (diff) |
Enable searching for builtin types
Diffstat (limited to 'crates/ide_db/src')
-rw-r--r-- | crates/ide_db/src/defs.rs | 2 | ||||
-rw-r--r-- | crates/ide_db/src/search.rs | 16 |
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 | ||
7 | use std::{convert::TryInto, mem}; | 7 | use std::{convert::TryInto, mem}; |
8 | 8 | ||
9 | use base_db::{FileId, FileRange, SourceDatabaseExt}; | 9 | use base_db::{FileId, FileRange, SourceDatabase, SourceDatabaseExt}; |
10 | use hir::{DefWithBody, HasSource, Module, ModuleSource, Semantics, Visibility}; | 10 | use hir::{DefWithBody, HasSource, Module, ModuleSource, Semantics, Visibility}; |
11 | use once_cell::unsync::Lazy; | 11 | use once_cell::unsync::Lazy; |
12 | use rustc_hash::FxHashMap; | 12 | use rustc_hash::FxHashMap; |
@@ -134,6 +134,20 @@ impl IntoIterator for SearchScope { | |||
134 | impl Definition { | 134 | impl 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(), |