mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-20 11:55:48 +00:00
Escape raw names in labels properly
This commit is contained in:
parent
5ff4ba347d
commit
d781d02cf4
2 changed files with 26 additions and 5 deletions
|
|
@ -191,7 +191,7 @@ impl Name {
|
||||||
// FIXME: Remove this in favor of `display`, see fixme on `as_str`
|
// FIXME: Remove this in favor of `display`, see fixme on `as_str`
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub fn display_no_db(&self, edition: Edition) -> impl fmt::Display + '_ {
|
pub fn display_no_db(&self, edition: Edition) -> impl fmt::Display + '_ {
|
||||||
Display { name: self, needs_escaping: is_raw_identifier(self.symbol.as_str(), edition) }
|
Display { name: self, edition }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn symbol(&self) -> &Symbol {
|
pub fn symbol(&self) -> &Symbol {
|
||||||
|
|
@ -201,15 +201,20 @@ impl Name {
|
||||||
|
|
||||||
struct Display<'a> {
|
struct Display<'a> {
|
||||||
name: &'a Name,
|
name: &'a Name,
|
||||||
needs_escaping: bool,
|
edition: Edition,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for Display<'_> {
|
impl fmt::Display for Display<'_> {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
if self.needs_escaping {
|
let mut symbol = self.name.symbol.as_str();
|
||||||
write!(f, "r#")?;
|
if let Some(s) = symbol.strip_prefix('\'') {
|
||||||
|
f.write_str("'")?;
|
||||||
|
symbol = s;
|
||||||
}
|
}
|
||||||
fmt::Display::fmt(self.name.symbol.as_str(), f)
|
if is_raw_identifier(symbol, self.edition) {
|
||||||
|
f.write_str("r#")?;
|
||||||
|
}
|
||||||
|
f.write_str(symbol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2110,3 +2110,19 @@ fn foo() {
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn escaped_label() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
fn main() {
|
||||||
|
'r#break: {
|
||||||
|
break '$0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
lb 'r#break
|
||||||
|
"#]],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue