diff options
Diffstat (limited to 'crates/ra_hir/src/attr.rs')
-rw-r--r-- | crates/ra_hir/src/attr.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/crates/ra_hir/src/attr.rs b/crates/ra_hir/src/attr.rs index 19be6de32..84c36b8da 100644 --- a/crates/ra_hir/src/attr.rs +++ b/crates/ra_hir/src/attr.rs | |||
@@ -1,11 +1,14 @@ | |||
1 | use std::sync::Arc; | ||
2 | |||
1 | use mbe::ast_to_token_tree; | 3 | use mbe::ast_to_token_tree; |
4 | use ra_cfg::CfgOptions; | ||
2 | use ra_syntax::{ | 5 | use ra_syntax::{ |
3 | ast::{self, AstNode}, | 6 | ast::{self, AstNode, AttrsOwner}, |
4 | SmolStr, | 7 | SmolStr, |
5 | }; | 8 | }; |
6 | use tt::Subtree; | 9 | use tt::Subtree; |
7 | 10 | ||
8 | use crate::{db::AstDatabase, path::Path, Source}; | 11 | use crate::{db::AstDatabase, path::Path, HirFileId, Source}; |
9 | 12 | ||
10 | #[derive(Debug, Clone, PartialEq, Eq)] | 13 | #[derive(Debug, Clone, PartialEq, Eq)] |
11 | pub(crate) struct Attr { | 14 | pub(crate) struct Attr { |
@@ -40,6 +43,14 @@ impl Attr { | |||
40 | Some(Attr { path, input }) | 43 | Some(Attr { path, input }) |
41 | } | 44 | } |
42 | 45 | ||
46 | pub(crate) fn from_attrs_owner( | ||
47 | file_id: HirFileId, | ||
48 | owner: &impl AttrsOwner, | ||
49 | db: &impl AstDatabase, | ||
50 | ) -> Arc<[Attr]> { | ||
51 | owner.attrs().flat_map(|ast| Attr::from_src(Source { file_id, ast }, db)).collect() | ||
52 | } | ||
53 | |||
43 | pub(crate) fn is_simple_atom(&self, name: &str) -> bool { | 54 | pub(crate) fn is_simple_atom(&self, name: &str) -> bool { |
44 | // FIXME: Avoid cloning | 55 | // FIXME: Avoid cloning |
45 | self.path.as_ident().map_or(false, |s| s.to_string() == name) | 56 | self.path.as_ident().map_or(false, |s| s.to_string() == name) |
@@ -55,4 +66,8 @@ impl Attr { | |||
55 | None | 66 | None |
56 | } | 67 | } |
57 | } | 68 | } |
69 | |||
70 | pub(crate) fn is_cfg_enabled(&self, cfg_options: &CfgOptions) -> Option<bool> { | ||
71 | cfg_options.is_cfg_enabled(self.as_cfg()?) | ||
72 | } | ||
58 | } | 73 | } |