Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-def/src/macro_expansion_tests/mbe.rs14
-rw-r--r--crates/mbe/src/syntax_bridge.rs15
2 files changed, 22 insertions, 7 deletions
diff --git a/crates/hir-def/src/macro_expansion_tests/mbe.rs b/crates/hir-def/src/macro_expansion_tests/mbe.rs
index 9bf2a50d57..f2046bfbce 100644
--- a/crates/hir-def/src/macro_expansion_tests/mbe.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mbe.rs
@@ -1218,8 +1218,10 @@ m! {
macro_rules! m {
($(#[$m:meta])+) => ( $(#[$m])+ fn bar() {} )
}
-#[doc = " Single Line Doc 1"]
-#[doc = "\n MultiLines Doc\n "] fn bar() {}
+#[doc = r" Single Line Doc 1"]
+#[doc = r"
+ MultiLines Doc
+ "] fn bar() {}
"##]],
);
}
@@ -1260,8 +1262,10 @@ m! {
macro_rules! m {
($(#[$ m:meta])+) => ( $(#[$m])+ fn bar() {} )
}
-#[doc = " 錦瑟無端五十弦,一弦一柱思華年。"]
-#[doc = "\n 莊生曉夢迷蝴蝶,望帝春心託杜鵑。\n "] fn bar() {}
+#[doc = r" 錦瑟無端五十弦,一弦一柱思華年。"]
+#[doc = r"
+ 莊生曉夢迷蝴蝶,望帝春心託杜鵑。
+ "] fn bar() {}
"##]],
);
}
@@ -1281,7 +1285,7 @@ m! {
macro_rules! m {
($(#[$m:meta])+) => ( $(#[$m])+ fn bar() {} )
}
-#[doc = " \\ \" \'"] fn bar() {}
+#[doc = r#" \ " '"#] fn bar() {}
"##]],
);
}
diff --git a/crates/mbe/src/syntax_bridge.rs b/crates/mbe/src/syntax_bridge.rs
index 3440c1dd8c..77bda1f9af 100644
--- a/crates/mbe/src/syntax_bridge.rs
+++ b/crates/mbe/src/syntax_bridge.rs
@@ -406,9 +406,20 @@ fn doc_comment_text(comment: &ast::Comment) -> SmolStr {
text = &text[0..text.len() - 2];
}
- // Quote the string
+ let mut num_of_hashes = 0;
+ let mut count = 0;
+ for ch in text.chars() {
+ count = match ch {
+ '"' => 1,
+ '#' if count > 0 => count + 1,
+ _ => 0,
+ };
+ num_of_hashes = num_of_hashes.max(count);
+ }
+
+ // Quote raw string with delimiters
// Note that `tt::Literal` expect an escaped string
- let text = format!("\"{}\"", text.escape_debug());
+ let text = format!("r{delim}\"{text}\"{delim}", delim = "#".repeat(num_of_hashes));
text.into()
}