diff options
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide-db/src/label.rs')
-rw-r--r-- | src/tools/rust-analyzer/crates/ide-db/src/label.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-db/src/label.rs b/src/tools/rust-analyzer/crates/ide-db/src/label.rs new file mode 100644 index 000000000..4b6d54b5e --- /dev/null +++ b/src/tools/rust-analyzer/crates/ide-db/src/label.rs @@ -0,0 +1,48 @@ +//! See [`Label`] +use std::fmt; + +/// A type to specify UI label, like an entry in the list of assists. Enforces +/// proper casing: +/// +/// Frobnicate bar +/// +/// Note the upper-case first letter and the absence of `.` at the end. +#[derive(Clone)] +pub struct Label(String); + +impl PartialEq<str> for Label { + fn eq(&self, other: &str) -> bool { + self.0 == other + } +} + +impl PartialEq<&'_ str> for Label { + fn eq(&self, other: &&str) -> bool { + self == *other + } +} + +impl From<Label> for String { + fn from(label: Label) -> String { + label.0 + } +} + +impl Label { + pub fn new(label: String) -> Label { + assert!(label.starts_with(char::is_uppercase) && !label.ends_with('.')); + Label(label) + } +} + +impl fmt::Display for Label { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(&self.0, f) + } +} + +impl fmt::Debug for Label { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.0, f) + } +} |