about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2023-01-13 15:03:37 +0100
committerLukas Wirth <lukastw97@gmail.com>2023-01-13 15:03:37 +0100
commitaafb0f1f8dd4c57d258374ac554b3162c497847d (patch)
tree3014951be948856236d270aa38e5aa9b01950897
parenta119352adab65d0cab25c13ae0fd7676bed7100f (diff)
downloadrust-aafb0f1f8dd4c57d258374ac554b3162c497847d.tar.gz
rust-aafb0f1f8dd4c57d258374ac554b3162c497847d.zip
Use smallvec for inlay-hint parts
-rw-r--r--Cargo.lock1
-rw-r--r--crates/ide/Cargo.toml1
-rw-r--r--crates/ide/src/inlay_hints.rs15
-rw-r--r--crates/ide/src/inlay_hints/closing_brace.rs5
4 files changed, 17 insertions, 5 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 5f426d88562..13d8d40ddd3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -645,6 +645,7 @@ dependencies = [
  "profile",
  "pulldown-cmark",
  "pulldown-cmark-to-cmark",
+ "smallvec",
  "stdx",
  "syntax",
  "test-utils",
diff --git a/crates/ide/Cargo.toml b/crates/ide/Cargo.toml
index 73f202630f1..397383bc3a0 100644
--- a/crates/ide/Cargo.toml
+++ b/crates/ide/Cargo.toml
@@ -20,6 +20,7 @@ pulldown-cmark-to-cmark = "10.0.4"
 pulldown-cmark = { version = "0.9.1", default-features = false }
 url = "2.3.1"
 dot = "0.1.4"
+smallvec = "1.10.0"
 
 stdx = { path = "../stdx", version = "0.0.0" }
 syntax = { path = "../syntax", version = "0.0.0" }
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs
index 48a7bbfecff..f4a9d7b653a 100644
--- a/crates/ide/src/inlay_hints.rs
+++ b/crates/ide/src/inlay_hints.rs
@@ -7,6 +7,7 @@ use either::Either;
 use hir::{known, HasVisibility, HirDisplay, HirWrite, ModuleDef, ModuleDefId, Semantics};
 use ide_db::{base_db::FileRange, famous_defs::FamousDefs, RootDatabase};
 use itertools::Itertools;
+use smallvec::{smallvec, SmallVec};
 use stdx::never;
 use syntax::{
     ast::{self, AstNode},
@@ -83,7 +84,7 @@ pub enum AdjustmentHintsMode {
     PreferPostfix,
 }
 
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Copy, Clone, Debug, PartialEq, Eq)]
 pub enum InlayKind {
     BindingModeHint,
     ChainingHint,
@@ -102,9 +103,15 @@ pub enum InlayKind {
 
 #[derive(Debug)]
 pub struct InlayHint {
+    /// The text range this inlay hint applies to.
     pub range: TextRange,
+    /// The kind of this inlay hint. This is used to determine side and padding of the hint for
+    /// rendering purposes.
     pub kind: InlayKind,
+    /// The actual label to show in the inlay hint.
     pub label: InlayHintLabel,
+    /// The tooltip to show when hovering over the inlay hint, this may invoke other actions like
+    /// hover requests to show.
     pub tooltip: Option<InlayTooltip>,
 }
 
@@ -117,7 +124,7 @@ pub enum InlayTooltip {
 
 #[derive(Default)]
 pub struct InlayHintLabel {
-    pub parts: Vec<InlayHintLabelPart>,
+    pub parts: SmallVec<[InlayHintLabelPart; 1]>,
 }
 
 impl InlayHintLabel {
@@ -145,13 +152,13 @@ impl InlayHintLabel {
 
 impl From<String> for InlayHintLabel {
     fn from(s: String) -> Self {
-        Self { parts: vec![InlayHintLabelPart { text: s, linked_location: None }] }
+        Self { parts: smallvec![InlayHintLabelPart { text: s, linked_location: None }] }
     }
 }
 
 impl From<&str> for InlayHintLabel {
     fn from(s: &str) -> Self {
-        Self { parts: vec![InlayHintLabelPart { text: s.into(), linked_location: None }] }
+        Self { parts: smallvec![InlayHintLabelPart { text: s.into(), linked_location: None }] }
     }
 }
 
diff --git a/crates/ide/src/inlay_hints/closing_brace.rs b/crates/ide/src/inlay_hints/closing_brace.rs
index e340c64c54b..12abefc140d 100644
--- a/crates/ide/src/inlay_hints/closing_brace.rs
+++ b/crates/ide/src/inlay_hints/closing_brace.rs
@@ -5,6 +5,7 @@
 //! ```
 use hir::{HirDisplay, Semantics};
 use ide_db::{base_db::FileRange, RootDatabase};
+use smallvec::smallvec;
 use syntax::{
     ast::{self, AstNode, HasName},
     match_ast, SyntaxKind, SyntaxNode, T,
@@ -116,7 +117,9 @@ pub(super) fn hints(
     acc.push(InlayHint {
         range: closing_token.text_range(),
         kind: InlayKind::ClosingBraceHint,
-        label: InlayHintLabel { parts: vec![InlayHintLabelPart { text: label, linked_location }] },
+        label: InlayHintLabel {
+            parts: smallvec![InlayHintLabelPart { text: label, linked_location }],
+        },
         tooltip: None, // provided by label part location
     });