diff options
Diffstat (limited to 'crates/ra_analysis')
-rw-r--r-- | crates/ra_analysis/src/descriptors/module/mod.rs | 13 | ||||
-rw-r--r-- | crates/ra_analysis/src/imp.rs | 58 |
2 files changed, 19 insertions, 52 deletions
diff --git a/crates/ra_analysis/src/descriptors/module/mod.rs b/crates/ra_analysis/src/descriptors/module/mod.rs index 16faea94e..d0560244a 100644 --- a/crates/ra_analysis/src/descriptors/module/mod.rs +++ b/crates/ra_analysis/src/descriptors/module/mod.rs | |||
@@ -165,15 +165,6 @@ enum ModuleSourceNode { | |||
165 | #[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] | 165 | #[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] |
166 | pub(crate) struct ModuleId(u32); | 166 | pub(crate) struct ModuleId(u32); |
167 | 167 | ||
168 | impl crate::loc2id::NumericId for ModuleId { | ||
169 | fn from_u32(id: u32) -> Self { | ||
170 | ModuleId(id) | ||
171 | } | ||
172 | fn to_u32(self) -> u32 { | ||
173 | self.0 | ||
174 | } | ||
175 | } | ||
176 | |||
177 | #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)] | 168 | #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)] |
178 | struct LinkId(u32); | 169 | struct LinkId(u32); |
179 | 170 | ||
@@ -189,13 +180,13 @@ pub enum Problem { | |||
189 | } | 180 | } |
190 | 181 | ||
191 | impl ModuleId { | 182 | impl ModuleId { |
192 | pub(crate) fn source(self, tree: &ModuleTree) -> ModuleSource { | 183 | fn source(self, tree: &ModuleTree) -> ModuleSource { |
193 | tree.module(self).source | 184 | tree.module(self).source |
194 | } | 185 | } |
195 | fn parent_link(self, tree: &ModuleTree) -> Option<LinkId> { | 186 | fn parent_link(self, tree: &ModuleTree) -> Option<LinkId> { |
196 | tree.module(self).parent | 187 | tree.module(self).parent |
197 | } | 188 | } |
198 | pub(crate) fn parent(self, tree: &ModuleTree) -> Option<ModuleId> { | 189 | fn parent(self, tree: &ModuleTree) -> Option<ModuleId> { |
199 | let link = self.parent_link(tree)?; | 190 | let link = self.parent_link(tree)?; |
200 | Some(tree.link(link).owner) | 191 | Some(tree.link(link).owner) |
201 | } | 192 | } |
diff --git a/crates/ra_analysis/src/imp.rs b/crates/ra_analysis/src/imp.rs index 49b863756..1bbf0cb6d 100644 --- a/crates/ra_analysis/src/imp.rs +++ b/crates/ra_analysis/src/imp.rs | |||
@@ -266,7 +266,6 @@ impl AnalysisImpl { | |||
266 | &self, | 266 | &self, |
267 | position: FilePosition, | 267 | position: FilePosition, |
268 | ) -> Cancelable<Vec<(FileId, FileSymbol)>> { | 268 | ) -> Cancelable<Vec<(FileId, FileSymbol)>> { |
269 | let module_tree = self.module_tree(position.file_id)?; | ||
270 | let file = self.db.file_syntax(position.file_id); | 269 | let file = self.db.file_syntax(position.file_id); |
271 | let syntax = file.syntax(); | 270 | let syntax = file.syntax(); |
272 | if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(syntax, position.offset) { | 271 | if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(syntax, position.offset) { |
@@ -292,25 +291,23 @@ impl AnalysisImpl { | |||
292 | if let Some(name) = find_node_at_offset::<ast::Name>(syntax, position.offset) { | 291 | if let Some(name) = find_node_at_offset::<ast::Name>(syntax, position.offset) { |
293 | if let Some(module) = name.syntax().parent().and_then(ast::Module::cast) { | 292 | if let Some(module) = name.syntax().parent().and_then(ast::Module::cast) { |
294 | if module.has_semi() { | 293 | if module.has_semi() { |
295 | let file_ids = self.resolve_module(&*module_tree, position.file_id, module); | 294 | let parent_module = |
296 | 295 | ModuleDescriptor::guess_from_file_id(&*self.db, position.file_id)?; | |
297 | let res = file_ids | 296 | let child_name = module.name(); |
298 | .into_iter() | 297 | match (parent_module, child_name) { |
299 | .map(|id| { | 298 | (Some(parent_module), Some(child_name)) => { |
300 | let name = module | 299 | if let Some(child) = parent_module.child(&child_name.text()) { |
301 | .name() | 300 | let file_id = child.source().file_id(); |
302 | .map(|n| n.text()) | 301 | let symbol = FileSymbol { |
303 | .unwrap_or_else(|| SmolStr::new("")); | 302 | name: child_name.text(), |
304 | let symbol = FileSymbol { | 303 | node_range: TextRange::offset_len(0.into(), 0.into()), |
305 | name, | 304 | kind: MODULE, |
306 | node_range: TextRange::offset_len(0.into(), 0.into()), | 305 | }; |
307 | kind: MODULE, | 306 | return Ok(vec![(file_id, symbol)]); |
308 | }; | 307 | } |
309 | (id, symbol) | 308 | } |
310 | }) | 309 | _ => (), |
311 | .collect(); | 310 | } |
312 | |||
313 | return Ok(res); | ||
314 | } | 311 | } |
315 | } | 312 | } |
316 | } | 313 | } |
@@ -519,27 +516,6 @@ impl AnalysisImpl { | |||
519 | query.limit(4); | 516 | query.limit(4); |
520 | self.world_symbols(query) | 517 | self.world_symbols(query) |
521 | } | 518 | } |
522 | |||
523 | fn resolve_module( | ||
524 | &self, | ||
525 | module_tree: &ModuleTree, | ||
526 | file_id: FileId, | ||
527 | module: ast::Module, | ||
528 | ) -> Vec<FileId> { | ||
529 | let name = match module.name() { | ||
530 | Some(name) => name.text(), | ||
531 | None => return Vec::new(), | ||
532 | }; | ||
533 | let module_id = match module_tree.any_module_for_source(ModuleSource::SourceFile(file_id)) { | ||
534 | Some(id) => id, | ||
535 | None => return Vec::new(), | ||
536 | }; | ||
537 | module_id | ||
538 | .child(module_tree, name.as_str()) | ||
539 | .and_then(|it| it.source(&module_tree).as_file()) | ||
540 | .into_iter() | ||
541 | .collect() | ||
542 | } | ||
543 | } | 519 | } |
544 | 520 | ||
545 | impl SourceChange { | 521 | impl SourceChange { |