Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs')
-rw-r--r--crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs
index 69f1e13fb0..066e0e26ac 100644
--- a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs
+++ b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs
@@ -83,7 +83,7 @@ impl server::FreeFunctions for RustAnalyzer {
s: &str,
) -> Result<bridge::Literal<Self::Span, Self::Symbol>, ()> {
// FIXME: keep track of LitKind and Suffix
- let symbol = SYMBOL_INTERNER.lock().unwrap().intern(s);
+ let symbol = ThreadLocalSymbolInterner::intern(s);
Ok(bridge::Literal {
kind: bridge::LitKind::Err,
symbol,
@@ -124,7 +124,7 @@ impl server::TokenStream for RustAnalyzer {
bridge::TokenTree::Ident(ident) => {
// FIXME: handle raw idents
- let text = SYMBOL_INTERNER.lock().unwrap().get(&ident.sym).clone();
+ let text = ThreadLocalSymbolInterner::get_cloned(&ident.sym);
let ident: tt::Ident = tt::Ident { text, id: ident.span };
let leaf = tt::Leaf::from(ident);
let tree = TokenTree::from(leaf);
@@ -132,10 +132,11 @@ impl server::TokenStream for RustAnalyzer {
}
bridge::TokenTree::Literal(literal) => {
- let symbol = SYMBOL_INTERNER.lock().unwrap().get(&literal.symbol).clone();
+ // FIXME: remove unnecessary clones here
+ let symbol = ThreadLocalSymbolInterner::get_cloned(&literal.symbol);
let text: tt::SmolStr = if let Some(suffix) = literal.suffix {
- let suffix = SYMBOL_INTERNER.lock().unwrap().get(&suffix).clone();
+ let suffix = ThreadLocalSymbolInterner::get_cloned(&suffix);
format!("{symbol}{suffix}").into()
} else {
symbol
@@ -203,7 +204,7 @@ impl server::TokenStream for RustAnalyzer {
.map(|tree| match tree {
tt::TokenTree::Leaf(tt::Leaf::Ident(ident)) => {
bridge::TokenTree::Ident(bridge::Ident {
- sym: SYMBOL_INTERNER.lock().unwrap().intern(&ident.text),
+ sym: ThreadLocalSymbolInterner::intern(&ident.text),
// FIXME: handle raw idents
is_raw: false,
span: ident.id,
@@ -213,7 +214,7 @@ impl server::TokenStream for RustAnalyzer {
bridge::TokenTree::Literal(bridge::Literal {
// FIXME: handle literal kinds
kind: bridge::LitKind::Err,
- symbol: SYMBOL_INTERNER.lock().unwrap().intern(&lit.text),
+ symbol: ThreadLocalSymbolInterner::intern(&lit.text),
// FIXME: handle suffixes
suffix: None,
span: lit.id,
@@ -407,11 +408,11 @@ impl server::Server for RustAnalyzer {
}
fn intern_symbol(ident: &str) -> Self::Symbol {
- SYMBOL_INTERNER.lock().unwrap().intern(&tt::SmolStr::from(ident))
+ ThreadLocalSymbolInterner::intern(&tt::SmolStr::from(ident))
}
fn with_symbol_string(symbol: &Self::Symbol, f: impl FnOnce(&str)) {
- f(SYMBOL_INTERNER.lock().unwrap().get(symbol).as_str())
+ ThreadLocalSymbolInterner::with(symbol, |s| f(s.as_str()))
}
}