1
1
use std:: {
2
- borrow:: Borrow ,
3
2
cell:: RefCell ,
4
- fmt:: format,
5
3
sync:: { Arc , Mutex } ,
6
4
} ;
7
5
8
6
use include_dir:: { include_dir, Dir } ;
9
7
use lazy_static:: lazy_static;
10
8
use lsp_types:: {
11
- notification:: DidChangeTextDocument , CompletionParams , Diagnostic , DidChangeTextDocumentParams ,
12
- GotoDefinitionParams , Position , SemanticTokens , SemanticTokensDelta , Url ,
9
+ Diagnostic , DidChangeTextDocumentParams , Position , SemanticTokens , SemanticTokensDelta , Url ,
13
10
} ;
14
11
use rustc_hash:: FxHashMap ;
12
+ use salsa:: Setter ;
15
13
use wasm_bindgen:: prelude:: wasm_bindgen;
16
14
17
15
use crate :: {
@@ -22,9 +20,8 @@ use crate::{
22
20
compiler:: { compile_dry, ActionType } ,
23
21
range:: Pos ,
24
22
} ,
25
- db:: { self , Database } ,
23
+ db:: Database ,
26
24
lsp:: semantic_tokens:: diff_tokens,
27
- Db ,
28
25
} ;
29
26
30
27
use super :: {
@@ -101,17 +98,18 @@ pub unsafe fn on_change_doc(req: &str) -> String {
101
98
docin. set_file ( db) . to ( f) ;
102
99
103
100
docin. set_action ( db) . to ( ActionType :: Diagnostic ) ;
104
- let re = compile_dry ( db, docin) ;
101
+ let _ = compile_dry ( db, docin) ;
105
102
// log::trace!("mod {:#?}", re.plmod(db));
106
103
// completions = compile_dry::accumulated::<Completions>(db, docin);
107
104
let diags = compile_dry:: accumulated :: < Diagnostics > ( db, docin) ;
108
105
let mut m = FxHashMap :: < String , Vec < Diagnostic > > :: default ( ) ;
109
- for ( p, diags) in & diags {
106
+ for d in & diags {
107
+ let ( p, diags) = & d. 0 ;
110
108
diags. iter ( ) . for_each ( |x| x. get_diagnostic ( p, & mut m) ) ;
111
109
}
112
110
let comps = compile_dry:: accumulated :: < Completions > ( db, docin) ;
113
111
if comps. len ( ) > 0 {
114
- COMPLETIONS . inner . replace ( comps[ 0 ] . clone ( ) ) ;
112
+ COMPLETIONS . inner . replace ( comps[ 0 ] . 0 . clone ( ) ) ;
115
113
} else {
116
114
COMPLETIONS . inner . replace ( vec ! [ ] ) ;
117
115
}
@@ -197,12 +195,13 @@ pub fn set_init_content(content: &str) -> String {
197
195
docin. set_file ( db) . to ( LSP_DEMO_URI . to_string ( ) ) ;
198
196
199
197
docin. set_action ( db) . to ( ActionType :: Diagnostic ) ;
200
- let re = compile_dry ( db, docin) ;
198
+ let _ = compile_dry ( db, docin) ;
201
199
// log::trace!("mod {:#?}", re.plmod(db));
202
200
// completions = compile_dry::accumulated::<Completions>(db, docin);
203
201
let diags = compile_dry:: accumulated :: < Diagnostics > ( db, docin) ;
204
202
let mut m = FxHashMap :: < String , Vec < Diagnostic > > :: default ( ) ;
205
- for ( p, diags) in & diags {
203
+ for d in & diags {
204
+ let ( p, diags) = & d. 0 ;
206
205
diags. iter ( ) . for_each ( |x| x. get_diagnostic ( p, & mut m) ) ;
207
206
}
208
207
log:: trace!( "diags: {:#?}" , diags) ;
@@ -236,7 +235,10 @@ pub fn get_semantic_tokens() -> String {
236
235
docin. set_params ( db) . to ( Some ( ( Default :: default ( ) , None ) ) ) ;
237
236
compile_dry ( db, docin) ;
238
237
// let docs = DOCIN.docs(db);
239
- let mut newtokens = compile_dry:: accumulated :: < PLSemanticTokens > ( db, docin) ;
238
+ let mut newtokens = compile_dry:: accumulated :: < PLSemanticTokens > ( db, docin)
239
+ . drain ( ..)
240
+ . map ( |x| x. 0 )
241
+ . collect :: < Vec < _ > > ( ) ;
240
242
if newtokens. is_empty ( ) {
241
243
newtokens. push ( SemanticTokens :: default ( ) ) ;
242
244
}
@@ -260,7 +262,10 @@ pub fn get_semantic_tokens_full() -> String {
260
262
docin. set_params ( db) . to ( Some ( ( Default :: default ( ) , None ) ) ) ;
261
263
compile_dry ( db, docin) ;
262
264
// let docs = DOCIN.docs(db);
263
- let mut newtokens = compile_dry:: accumulated :: < PLSemanticTokens > ( db, docin) ;
265
+ let mut newtokens = compile_dry:: accumulated :: < PLSemanticTokens > ( db, docin)
266
+ . drain ( ..)
267
+ . map ( |x| x. 0 )
268
+ . collect :: < Vec < _ > > ( ) ;
264
269
if newtokens. is_empty ( ) {
265
270
newtokens. push ( SemanticTokens :: default ( ) ) ;
266
271
}
@@ -290,7 +295,10 @@ pub fn get_inlay_hints() -> String {
290
295
let docin = * DOCIN ;
291
296
let binding = & DB . inner ;
292
297
let db = & mut * binding. borrow_mut ( ) ;
293
- let mut hints = compile_dry:: accumulated :: < Hints > ( db, docin) ;
298
+ let mut hints = compile_dry:: accumulated :: < Hints > ( db, docin)
299
+ . drain ( ..)
300
+ . map ( |x| x. 0 )
301
+ . collect :: < Vec < _ > > ( ) ;
294
302
if hints. is_empty ( ) {
295
303
hints. push ( vec ! [ ] ) ;
296
304
}
@@ -304,7 +312,7 @@ pub fn get_doc_symbol() -> String {
304
312
let db = & mut * binding. borrow_mut ( ) ;
305
313
let doc_symbols = compile_dry:: accumulated :: < DocSymbols > ( db, docin) ;
306
314
let symbol = & doc_symbols[ 0 ] ;
307
- return serde_json:: to_value ( symbol) . unwrap ( ) . to_string ( ) ;
315
+ return serde_json:: to_value ( & symbol. 0 ) . unwrap ( ) . to_string ( ) ;
308
316
}
309
317
310
318
#[ wasm_bindgen]
@@ -325,7 +333,7 @@ pub fn go_to_def(req: &str) -> String {
325
333
. unwrap ( )
326
334
. to_string ( ) ;
327
335
}
328
- let def = & defs[ 0 ] ;
336
+ let def = & defs[ 0 ] . 0 ;
329
337
return serde_json:: to_value ( def) . unwrap ( ) . to_string ( ) ;
330
338
}
331
339
@@ -341,7 +349,10 @@ pub fn get_refs(req: &str) -> String {
341
349
docin. set_action ( db) . to ( ActionType :: FindReferences ) ;
342
350
docin. set_params ( db) . to ( Some ( ( pos, None ) ) ) ;
343
351
compile_dry ( db, docin) ;
344
- let refs = compile_dry:: accumulated :: < PLReferences > ( db, docin) ;
352
+ let refs = compile_dry:: accumulated :: < PLReferences > ( db, docin)
353
+ . drain ( ..)
354
+ . map ( |x| x. 0 )
355
+ . collect :: < Vec < _ > > ( ) ;
345
356
let mut rf = vec ! [ ] ;
346
357
for r in refs {
347
358
for r in r. clone ( ) . iter ( ) {
0 commit comments