]> git.lizzy.rs Git - rust.git/blobdiff - crates/ide_completion/src/render/macro_.rs
Replace some String usages with SmolStr in completions
[rust.git] / crates / ide_completion / src / render / macro_.rs
index b1ddfab0cbbf2f875c7ce097456b3c09e1fdad9a..1f76583adbbf081f2b74010855f6f1bea13171c1 100644 (file)
@@ -2,7 +2,7 @@
 
 use hir::HasSource;
 use ide_db::SymbolKind;
-use syntax::display::macro_label;
+use syntax::{display::macro_label, SmolStr};
 
 use crate::{
     context::CallKind,
@@ -23,7 +23,7 @@ pub(crate) fn render_macro(
 #[derive(Debug)]
 struct MacroRender<'a> {
     ctx: RenderContext<'a>,
-    name: String,
+    name: SmolStr,
     macro_: hir::MacroDef,
     docs: Option<hir::Documentation>,
     bra: &'static str,
@@ -32,7 +32,7 @@ struct MacroRender<'a> {
 
 impl<'a> MacroRender<'a> {
     fn new(ctx: RenderContext<'a>, name: hir::Name, macro_: hir::MacroDef) -> MacroRender<'a> {
-        let name = name.to_string();
+        let name = name.to_smol_str();
         let docs = ctx.docs(macro_);
         let docs_str = docs.as_ref().map_or("", |s| s.as_str());
         let (bra, ket) = guess_macro_braces(&name, docs_str);
@@ -47,7 +47,7 @@ fn render(&self, import_to_add: Option<ImportEdit>) -> Option<CompletionItem> {
         } else {
             Some(self.ctx.source_range())
         }?;
-        let mut item = CompletionItem::new(SymbolKind::Macro, source_range, &self.label());
+        let mut item = CompletionItem::new(SymbolKind::Macro, source_range, self.label());
         item.set_documentation(self.docs.clone())
             .set_deprecated(self.ctx.is_deprecated(self.macro_))
             .set_detail(self.detail());
@@ -72,7 +72,7 @@ fn render(&self, import_to_add: Option<ImportEdit>) -> Option<CompletionItem> {
             }
             _ => {
                 cov_mark::hit!(dont_insert_macro_call_parens_unncessary);
-                item.insert_text(&self.name);
+                item.insert_text(&*self.name);
             }
         };
 
@@ -84,18 +84,18 @@ fn needs_bang(&self) -> bool {
             && !matches!(self.ctx.completion.path_call_kind(), Some(CallKind::Mac))
     }
 
-    fn label(&self) -> String {
+    fn label(&self) -> SmolStr {
         if self.needs_bang() && self.ctx.snippet_cap().is_some() {
-            format!("{}!{}…{}", self.name, self.bra, self.ket)
+            SmolStr::from_iter([&*self.name, "!", self.bra, "…", self.ket])
         } else if self.macro_.kind() == hir::MacroKind::Derive {
-            self.name.to_string()
+            self.name.clone()
         } else {
             self.banged_name()
         }
     }
 
-    fn banged_name(&self) -> String {
-        format!("{}!", self.name)
+    fn banged_name(&self) -> SmolStr {
+        SmolStr::from_iter([&*self.name, "!"])
     }
 
     fn detail(&self) -> Option<String> {