about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEric Sampson <esampson@eaze.com>2021-10-05 15:42:45 -0500
committerEric Sampson <esampson@eaze.com>2021-10-05 15:42:45 -0500
commit6d05b07f7d64e2dd04bd8704b597d3aaf143964f (patch)
tree2fda8abc2e3b952d7754a867d7e82a0086c2b8ff
parent160a7b097a1bccba925afd4517ebfb10c3168931 (diff)
downloadrust-6d05b07f7d64e2dd04bd8704b597d3aaf143964f.tar.gz
rust-6d05b07f7d64e2dd04bd8704b597d3aaf143964f.zip
Refactor according to PR comments to remove allocations.
-rw-r--r--crates/ide/src/annotations.rs28
1 files changed, 11 insertions, 17 deletions
diff --git a/crates/ide/src/annotations.rs b/crates/ide/src/annotations.rs
index 5c951b85a1e..12c6852ea09 100644
--- a/crates/ide/src/annotations.rs
+++ b/crates/ide/src/annotations.rs
@@ -5,7 +5,7 @@ use ide_db::{
     helpers::visit_file_defs,
     RootDatabase,
 };
-use syntax::{ast::HasName, AstNode, TextRange, TextSize};
+use syntax::{ast::HasName, AstNode, TextRange};
 
 use crate::{
     fn_references::find_all_methods,
@@ -66,10 +66,10 @@ pub(crate) fn annotations(
         Either::Left(def) => {
             let (range, ranges_enum_variants) = match def {
                 hir::ModuleDef::Const(konst) => {
-                    (konst.source(db).and_then(|node| name_range(&node, file_id)), vec![None])
+                    (konst.source(db).and_then(|node| name_range(&node, file_id)), vec![])
                 }
                 hir::ModuleDef::Trait(trait_) => {
-                    (trait_.source(db).and_then(|node| name_range(&node, file_id)), vec![None])
+                    (trait_.source(db).and_then(|node| name_range(&node, file_id)), vec![])
                 }
                 hir::ModuleDef::Adt(adt) => match adt {
                     hir::Adt::Enum(enum_) => (
@@ -83,12 +83,12 @@ pub(crate) fn annotations(
                                 })
                                 .collect()
                         } else {
-                            vec![None]
+                            vec![]
                         },
                     ),
-                    _ => (adt.source(db).and_then(|node| name_range(&node, file_id)), vec![None]),
+                    _ => (adt.source(db).and_then(|node| name_range(&node, file_id)), vec![]),
                 },
-                _ => (None, vec![None]),
+                _ => (None, vec![]),
             };
 
             let (range, offset) = match range {
@@ -116,19 +116,13 @@ pub(crate) fn annotations(
             }
 
             if config.annotate_enum_variant_references {
-                let mut enum_variants_metadata: Vec<(TextRange, TextSize)> = Vec::with_capacity(ranges_enum_variants.len());
-                for range_enum_variant in ranges_enum_variants.into_iter() {
-                    let (range, offset) = match range_enum_variant {
-                        Some(range) => (range, range.start()),
-                        None => return,
-                    };
-                    enum_variants_metadata.push((range, offset))
-                }
-                for enum_variant_metadata in enum_variants_metadata.into_iter() {
+                for range_enum_variant in
+                    ranges_enum_variants.into_iter().filter_map(std::convert::identity)
+                {
                     annotations.push(Annotation {
-                        range: enum_variant_metadata.0,
+                        range: range_enum_variant,
                         kind: AnnotationKind::HasReferences {
-                            position: FilePosition { file_id, offset: enum_variant_metadata.1 },
+                            position: FilePosition { file_id, offset: range_enum_variant.start() },
                             data: None,
                         },
                     });