Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-expand/src/quote.rs')
-rw-r--r--crates/hir-expand/src/quote.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/hir-expand/src/quote.rs b/crates/hir-expand/src/quote.rs
index a3b84afd2a..824f3c3e8f 100644
--- a/crates/hir-expand/src/quote.rs
+++ b/crates/hir-expand/src/quote.rs
@@ -1,11 +1,13 @@
//! A simplified version of quote-crate like quasi quote macro
+#![allow(clippy::crate_in_macro_def)]
use span::Span;
+use syntax::format_smolstr;
use crate::name::Name;
-pub(crate) fn dollar_crate(span: Span) -> tt::Ident<Span> {
- tt::Ident { text: syntax::SmolStr::new_inline("$crate"), span }
+pub(crate) const fn dollar_crate(span: Span) -> tt::Ident<Span> {
+ tt::Ident { text: syntax::SmolStr::new_static("$crate"), span }
}
// A helper macro quote macro
@@ -17,13 +19,13 @@ pub(crate) fn dollar_crate(span: Span) -> tt::Ident<Span> {
#[macro_export]
macro_rules! __quote {
($span:ident) => {
- Vec::<crate::tt::TokenTree>::new()
+ Vec::<$crate::tt::TokenTree>::new()
};
( @SUBTREE($span:ident) $delim:ident $($tt:tt)* ) => {
{
let children = $crate::__quote!($span $($tt)*);
- crate::tt::Subtree {
+ $crate::tt::Subtree {
delimiter: crate::tt::Delimiter {
kind: crate::tt::DelimiterKind::$delim,
open: $span,
@@ -214,8 +216,8 @@ impl_to_to_tokentrees! {
_span: crate::tt::Literal => self { self };
_span: crate::tt::Ident => self { self };
_span: crate::tt::Punct => self { self };
- span: &str => self { crate::tt::Literal{text: format!("\"{}\"", self.escape_default()).into(), span}};
- span: String => self { crate::tt::Literal{text: format!("\"{}\"", self.escape_default()).into(), span}};
+ span: &str => self { crate::tt::Literal{text: format_smolstr!("\"{}\"", self.escape_default()), span}};
+ span: String => self { crate::tt::Literal{text: format_smolstr!("\"{}\"", self.escape_default()), span}};
span: Name => self { crate::tt::Ident{text: self.to_smol_str(), span}};
}