From d963042ca9da93be8d5922ce46ea26dc6a79c929 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 27 Dec 2018 20:07:21 +0300 Subject: introduce hir::Name --- crates/ra_hir/src/module.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'crates/ra_hir/src/module.rs') diff --git a/crates/ra_hir/src/module.rs b/crates/ra_hir/src/module.rs index b9d36f01f..43413acb8 100644 --- a/crates/ra_hir/src/module.rs +++ b/crates/ra_hir/src/module.rs @@ -7,13 +7,14 @@ use log; use ra_syntax::{ algo::generate, ast::{self, AstNode, NameOwner}, - SmolStr, SyntaxNode, + SyntaxNode, }; use ra_db::{SourceRootId, FileId, Cancelable}; use relative_path::RelativePathBuf; use crate::{ DefKind, DefLoc, DefId, Path, PathKind, HirDatabase, SourceItemId, SourceFileItemId, Crate, + Name, arena::{Arena, Id}, }; @@ -84,7 +85,7 @@ impl Module { } /// `name` is `None` for the crate's root module - pub fn name(&self) -> Option { + pub fn name(&self) -> Option<&Name> { let link = self.module_id.parent_link(&self.tree)?; Some(link.name(&self.tree)) } @@ -100,7 +101,7 @@ impl Module { } /// Finds a child module with the specified name. - pub fn child(&self, name: &str) -> Option { + pub fn child(&self, name: &Name) -> Option { let child_id = self.module_id.child(&self.tree, name)?; Some(Module { module_id: child_id, @@ -230,15 +231,15 @@ impl ModuleId { .last() .unwrap() } - fn child(self, tree: &ModuleTree, name: &str) -> Option { + fn child(self, tree: &ModuleTree, name: &Name) -> Option { let link = tree.mods[self] .children .iter() .map(|&it| &tree.links[it]) - .find(|it| it.name == name)?; + .find(|it| it.name == *name)?; Some(*link.points_to.first()?) } - fn children<'a>(self, tree: &'a ModuleTree) -> impl Iterator + 'a { + fn children<'a>(self, tree: &'a ModuleTree) -> impl Iterator + 'a { tree.mods[self].children.iter().filter_map(move |&it| { let link = &tree.links[it]; let module = *link.points_to.first()?; @@ -263,8 +264,8 @@ impl LinkId { fn owner(self, tree: &ModuleTree) -> ModuleId { tree.links[self].owner } - fn name(self, tree: &ModuleTree) -> SmolStr { - tree.links[self].name.clone() + fn name(self, tree: &ModuleTree) -> &Name { + &tree.links[self].name } fn bind_source<'a>(self, tree: &ModuleTree, db: &impl HirDatabase) -> ast::ModuleNode { let owner = self.owner(tree); @@ -328,7 +329,7 @@ impl ModuleSource { #[derive(Hash, Debug, PartialEq, Eq)] struct LinkData { owner: ModuleId, - name: SmolStr, + name: Name, points_to: Vec, problem: Option, } -- cgit v1.2.3