mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 22:54:58 +00:00
Introduce Label
This commit is contained in:
parent
eb81731600
commit
aa1a7a5414
8 changed files with 68 additions and 30 deletions
49
crates/ide_db/src/label.rs
Normal file
49
crates/ide_db/src/label.rs
Normal file
|
@ -0,0 +1,49 @@
|
|||
//! 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: impl Into<String>) -> Label {
|
||||
let label = label.into();
|
||||
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)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue