diff options
Diffstat (limited to 'crates/ra_hir_def/src/attr.rs')
-rw-r--r-- | crates/ra_hir_def/src/attr.rs | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/crates/ra_hir_def/src/attr.rs b/crates/ra_hir_def/src/attr.rs index 248f03cdf..0e961ca12 100644 --- a/crates/ra_hir_def/src/attr.rs +++ b/crates/ra_hir_def/src/attr.rs | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | use std::sync::Arc; | 3 | use std::sync::Arc; |
4 | 4 | ||
5 | use hir_expand::db::AstDatabase; | 5 | use hir_expand::hygiene::Hygiene; |
6 | use mbe::ast_to_token_tree; | 6 | use mbe::ast_to_token_tree; |
7 | use ra_cfg::CfgOptions; | 7 | use ra_cfg::CfgOptions; |
8 | use ra_syntax::{ | 8 | use ra_syntax::{ |
@@ -11,7 +11,7 @@ use ra_syntax::{ | |||
11 | }; | 11 | }; |
12 | use tt::Subtree; | 12 | use tt::Subtree; |
13 | 13 | ||
14 | use crate::{path::Path, HirFileId, Source}; | 14 | use crate::path::Path; |
15 | 15 | ||
16 | #[derive(Debug, Clone, PartialEq, Eq)] | 16 | #[derive(Debug, Clone, PartialEq, Eq)] |
17 | pub struct Attr { | 17 | pub struct Attr { |
@@ -26,11 +26,8 @@ pub enum AttrInput { | |||
26 | } | 26 | } |
27 | 27 | ||
28 | impl Attr { | 28 | impl Attr { |
29 | pub(crate) fn from_src( | 29 | pub(crate) fn from_src(ast: ast::Attr, hygiene: &Hygiene) -> Option<Attr> { |
30 | Source { file_id, ast }: Source<ast::Attr>, | 30 | let path = Path::from_src(ast.path()?, hygiene)?; |
31 | db: &impl AstDatabase, | ||
32 | ) -> Option<Attr> { | ||
33 | let path = Path::from_src(Source { file_id, ast: ast.path()? }, db)?; | ||
34 | let input = match ast.input() { | 31 | let input = match ast.input() { |
35 | None => None, | 32 | None => None, |
36 | Some(ast::AttrInput::Literal(lit)) => { | 33 | Some(ast::AttrInput::Literal(lit)) => { |
@@ -46,17 +43,13 @@ impl Attr { | |||
46 | Some(Attr { path, input }) | 43 | Some(Attr { path, input }) |
47 | } | 44 | } |
48 | 45 | ||
49 | pub fn from_attrs_owner( | 46 | pub fn from_attrs_owner(owner: &dyn AttrsOwner, hygiene: &Hygiene) -> Option<Arc<[Attr]>> { |
50 | file_id: HirFileId, | ||
51 | owner: &dyn AttrsOwner, | ||
52 | db: &impl AstDatabase, | ||
53 | ) -> Option<Arc<[Attr]>> { | ||
54 | let mut attrs = owner.attrs().peekable(); | 47 | let mut attrs = owner.attrs().peekable(); |
55 | if attrs.peek().is_none() { | 48 | if attrs.peek().is_none() { |
56 | // Avoid heap allocation | 49 | // Avoid heap allocation |
57 | return None; | 50 | return None; |
58 | } | 51 | } |
59 | Some(attrs.flat_map(|ast| Attr::from_src(Source { file_id, ast }, db)).collect()) | 52 | Some(attrs.flat_map(|ast| Attr::from_src(ast, hygiene)).collect()) |
60 | } | 53 | } |
61 | 54 | ||
62 | pub fn is_simple_atom(&self, name: &str) -> bool { | 55 | pub fn is_simple_atom(&self, name: &str) -> bool { |