diff options
author | uHOOCCOOHu <[email protected]> | 2019-10-02 18:38:56 +0100 |
---|---|---|
committer | uHOOCCOOHu <[email protected]> | 2019-10-02 19:28:03 +0100 |
commit | e0100e63ae2e873f119b905ac77c3355ffb351b0 (patch) | |
tree | 25d799c1e52a32af80f603f4e6103e0969c5b6a8 /crates/ra_hir/src/attr.rs | |
parent | 43f09ad36ccc1c53c78a66274693e53161c9b2fa (diff) |
Optimize
Diffstat (limited to 'crates/ra_hir/src/attr.rs')
-rw-r--r-- | crates/ra_hir/src/attr.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/crates/ra_hir/src/attr.rs b/crates/ra_hir/src/attr.rs index 84c36b8da..a8a7e9006 100644 --- a/crates/ra_hir/src/attr.rs +++ b/crates/ra_hir/src/attr.rs | |||
@@ -45,10 +45,15 @@ impl Attr { | |||
45 | 45 | ||
46 | pub(crate) fn from_attrs_owner( | 46 | pub(crate) fn from_attrs_owner( |
47 | file_id: HirFileId, | 47 | file_id: HirFileId, |
48 | owner: &impl AttrsOwner, | 48 | owner: &dyn AttrsOwner, |
49 | db: &impl AstDatabase, | 49 | db: &impl AstDatabase, |
50 | ) -> Arc<[Attr]> { | 50 | ) -> Option<Arc<[Attr]>> { |
51 | owner.attrs().flat_map(|ast| Attr::from_src(Source { file_id, ast }, db)).collect() | 51 | let mut attrs = owner.attrs().peekable(); |
52 | if attrs.peek().is_none() { | ||
53 | // Avoid heap allocation | ||
54 | return None; | ||
55 | } | ||
56 | Some(attrs.flat_map(|ast| Attr::from_src(Source { file_id, ast }, db)).collect()) | ||
52 | } | 57 | } |
53 | 58 | ||
54 | pub(crate) fn is_simple_atom(&self, name: &str) -> bool { | 59 | pub(crate) fn is_simple_atom(&self, name: &str) -> bool { |