@@ -377,6 +377,7 @@ impl LanguageServer {
377
377
specifiers : Vec < ModuleSpecifier > ,
378
378
referrer : ModuleSpecifier ,
379
379
force_global_cache : bool ,
380
+ lockfile_skip_write : bool ,
380
381
) -> LspResult < Option < Value > > {
381
382
async fn create_graph_for_caching (
382
383
factory : CliFactory ,
@@ -439,6 +440,7 @@ impl LanguageServer {
439
440
specifiers,
440
441
referrer,
441
442
force_global_cache,
443
+ lockfile_skip_write,
442
444
) ;
443
445
444
446
match prepare_cache_result {
@@ -458,7 +460,12 @@ impl LanguageServer {
458
460
459
461
// now get the lock back to update with the new information
460
462
* self . did_change_batch_queue . borrow_mut ( ) = None ;
461
- self . inner . write ( ) . await . post_cache ( ) . await ;
463
+ self
464
+ . inner
465
+ . write ( )
466
+ . await
467
+ . post_cache ( !lockfile_skip_write)
468
+ . await ;
462
469
self . performance . measure ( mark) ;
463
470
}
464
471
Err ( err) => {
@@ -1254,7 +1261,9 @@ impl Inner {
1254
1261
} ;
1255
1262
specifier
1256
1263
} ;
1257
- if let Err ( err) = ls. cache ( vec ! [ specifier] , referrer, false ) . await {
1264
+ if let Err ( err) =
1265
+ ls. cache ( vec ! [ specifier] , referrer, false , true ) . await
1266
+ {
1258
1267
lsp_warn ! ( "{:#}" , err) ;
1259
1268
}
1260
1269
} ) ;
@@ -1451,7 +1460,7 @@ impl Inner {
1451
1460
self . task_queue . queue_task ( Box :: new ( |ls : LanguageServer | {
1452
1461
spawn ( async move {
1453
1462
if let Err ( err) = ls
1454
- . cache ( vec ! [ ] , module. specifier . as_ref ( ) . clone ( ) , false )
1463
+ . cache ( vec ! [ ] , module. specifier . as_ref ( ) . clone ( ) , false , true )
1455
1464
. await
1456
1465
{
1457
1466
lsp_warn ! (
@@ -4085,7 +4094,7 @@ impl tower_lsp::LanguageServer for LanguageServer {
4085
4094
serde_json:: from_value ( json ! ( params. arguments) )
4086
4095
. map_err ( |err| LspError :: invalid_params ( err. to_string ( ) ) ) ?;
4087
4096
self
4088
- . cache ( specifiers, referrer, options. force_global_cache )
4097
+ . cache ( specifiers, referrer, options. force_global_cache , false )
4089
4098
. await
4090
4099
} else if params. command == "deno.reloadImportRegistries" {
4091
4100
* self . did_change_batch_queue . borrow_mut ( ) = None ;
@@ -4694,6 +4703,7 @@ impl Inner {
4694
4703
specifiers : Vec < ModuleSpecifier > ,
4695
4704
referrer : ModuleSpecifier ,
4696
4705
force_global_cache : bool ,
4706
+ lockfile_skip_write : bool ,
4697
4707
) -> Result < PrepareCacheResult , AnyError > {
4698
4708
let config_data = self . config . tree . data_for_specifier ( & referrer) ;
4699
4709
let scope = config_data. map ( |d| d. scope . clone ( ) ) ;
@@ -4725,6 +4735,7 @@ impl Inner {
4725
4735
let mut cli_factory = CliFactory :: from_flags ( Arc :: new ( Flags {
4726
4736
internal : InternalFlags {
4727
4737
cache_path : Some ( self . cache . deno_dir ( ) . root . clone ( ) ) ,
4738
+ lockfile_skip_write,
4728
4739
..Default :: default ( )
4729
4740
} ,
4730
4741
ca_stores : workspace_settings. certificate_stores . clone ( ) ,
@@ -4776,9 +4787,22 @@ impl Inner {
4776
4787
}
4777
4788
4778
4789
#[ cfg_attr( feature = "lsp-tracing" , tracing:: instrument( skip_all) ) ]
4779
- async fn post_cache ( & mut self ) {
4780
- self . resolver . did_cache ( ) ;
4781
- self . refresh_dep_info ( ) ;
4790
+ async fn post_cache ( & mut self , did_write_lockfile : bool ) {
4791
+ if did_write_lockfile {
4792
+ // Most of the refresh steps will happen in `did_change_watched_files()`,
4793
+ // since the lockfile was written.
4794
+ self . resolver . did_cache ( ) ;
4795
+ self . refresh_dep_info ( ) ;
4796
+ } else {
4797
+ self . refresh_config_tree ( ) . await ;
4798
+ self . update_cache ( ) ;
4799
+ self . refresh_resolver ( ) . await ;
4800
+ self . refresh_compiler_options_resolver ( ) ;
4801
+ self . refresh_linter_resolver ( ) ;
4802
+ self . refresh_documents_config ( ) ;
4803
+ self . resolver . did_cache ( ) ;
4804
+ self . refresh_dep_info ( ) ;
4805
+ }
4782
4806
self . project_changed ( vec ! [ ] , ProjectScopesChange :: Config ) ;
4783
4807
self . ts_server . cleanup_semantic_cache ( self . snapshot ( ) ) . await ;
4784
4808
self . send_diagnostics_update ( ) ;
0 commit comments