@@ -83,7 +83,7 @@ impl server::FreeFunctions for RustAnalyzer {
8383 s : & str ,
8484 ) -> Result < bridge:: Literal < Self :: Span , Self :: Symbol > , ( ) > {
8585 // FIXME: keep track of LitKind and Suffix
86- let symbol = SYMBOL_INTERNER . lock ( ) . unwrap ( ) . intern ( s) ;
86+ let symbol = ThreadLocalSymbolInterner :: intern ( s) ;
8787 Ok ( bridge:: Literal {
8888 kind : bridge:: LitKind :: Err ,
8989 symbol,
@@ -124,18 +124,19 @@ impl server::TokenStream for RustAnalyzer {
124124
125125 bridge:: TokenTree :: Ident ( ident) => {
126126 // FIXME: handle raw idents
127- let text = SYMBOL_INTERNER . lock ( ) . unwrap ( ) . get ( & ident. sym ) . clone ( ) ;
127+ let text = ThreadLocalSymbolInterner :: get_cloned ( & ident. sym ) ;
128128 let ident: tt:: Ident = tt:: Ident { text, id : ident. span } ;
129129 let leaf = tt:: Leaf :: from ( ident) ;
130130 let tree = TokenTree :: from ( leaf) ;
131131 Self :: TokenStream :: from_iter ( vec ! [ tree] )
132132 }
133133
134134 bridge:: TokenTree :: Literal ( literal) => {
135- let symbol = SYMBOL_INTERNER . lock ( ) . unwrap ( ) . get ( & literal. symbol ) . clone ( ) ;
135+ // FIXME: remove unnecessary clones here
136+ let symbol = ThreadLocalSymbolInterner :: get_cloned ( & literal. symbol ) ;
136137
137138 let text: tt:: SmolStr = if let Some ( suffix) = literal. suffix {
138- let suffix = SYMBOL_INTERNER . lock ( ) . unwrap ( ) . get ( & suffix) . clone ( ) ;
139+ let suffix = ThreadLocalSymbolInterner :: get_cloned ( & suffix) ;
139140 format ! ( "{symbol}{suffix}" ) . into ( )
140141 } else {
141142 symbol
@@ -203,7 +204,7 @@ impl server::TokenStream for RustAnalyzer {
203204 . map ( |tree| match tree {
204205 tt:: TokenTree :: Leaf ( tt:: Leaf :: Ident ( ident) ) => {
205206 bridge:: TokenTree :: Ident ( bridge:: Ident {
206- sym : SYMBOL_INTERNER . lock ( ) . unwrap ( ) . intern ( & ident. text ) ,
207+ sym : ThreadLocalSymbolInterner :: intern ( & ident. text ) ,
207208 // FIXME: handle raw idents
208209 is_raw : false ,
209210 span : ident. id ,
@@ -213,7 +214,7 @@ impl server::TokenStream for RustAnalyzer {
213214 bridge:: TokenTree :: Literal ( bridge:: Literal {
214215 // FIXME: handle literal kinds
215216 kind : bridge:: LitKind :: Err ,
216- symbol : SYMBOL_INTERNER . lock ( ) . unwrap ( ) . intern ( & lit. text ) ,
217+ symbol : ThreadLocalSymbolInterner :: intern ( & lit. text ) ,
217218 // FIXME: handle suffixes
218219 suffix : None ,
219220 span : lit. id ,
@@ -407,11 +408,11 @@ impl server::Server for RustAnalyzer {
407408 }
408409
409410 fn intern_symbol ( ident : & str ) -> Self :: Symbol {
410- SYMBOL_INTERNER . lock ( ) . unwrap ( ) . intern ( & tt:: SmolStr :: from ( ident) )
411+ ThreadLocalSymbolInterner :: intern ( & tt:: SmolStr :: from ( ident) )
411412 }
412413
413414 fn with_symbol_string ( symbol : & Self :: Symbol , f : impl FnOnce ( & str ) ) {
414- f ( SYMBOL_INTERNER . lock ( ) . unwrap ( ) . get ( symbol ) . as_str ( ) )
415+ ThreadLocalSymbolInterner :: with ( symbol , |s| f ( s . as_str ( ) ) )
415416 }
416417}
417418
0 commit comments