aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/attr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/attr.rs')
-rw-r--r--crates/ra_hir_def/src/attr.rs19
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
3use std::sync::Arc; 3use std::sync::Arc;
4 4
5use hir_expand::db::AstDatabase; 5use hir_expand::hygiene::Hygiene;
6use mbe::ast_to_token_tree; 6use mbe::ast_to_token_tree;
7use ra_cfg::CfgOptions; 7use ra_cfg::CfgOptions;
8use ra_syntax::{ 8use ra_syntax::{
@@ -11,7 +11,7 @@ use ra_syntax::{
11}; 11};
12use tt::Subtree; 12use tt::Subtree;
13 13
14use crate::{path::Path, HirFileId, Source}; 14use crate::path::Path;
15 15
16#[derive(Debug, Clone, PartialEq, Eq)] 16#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct Attr { 17pub struct Attr {
@@ -26,11 +26,8 @@ pub enum AttrInput {
26} 26}
27 27
28impl Attr { 28impl 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 {