@@ -377,6 +377,7 @@ impl LanguageServer {
377377 specifiers : Vec < ModuleSpecifier > ,
378378 referrer : ModuleSpecifier ,
379379 force_global_cache : bool ,
380+ lockfile_skip_write : bool ,
380381 ) -> LspResult < Option < Value > > {
381382 async fn create_graph_for_caching (
382383 factory : CliFactory ,
@@ -439,6 +440,7 @@ impl LanguageServer {
439440 specifiers,
440441 referrer,
441442 force_global_cache,
443+ lockfile_skip_write,
442444 ) ;
443445
444446 match prepare_cache_result {
@@ -458,7 +460,12 @@ impl LanguageServer {
458460
459461 // now get the lock back to update with the new information
460462 * 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 ;
462469 self . performance . measure ( mark) ;
463470 }
464471 Err ( err) => {
@@ -1254,7 +1261,9 @@ impl Inner {
12541261 } ;
12551262 specifier
12561263 } ;
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+ {
12581267 lsp_warn ! ( "{:#}" , err) ;
12591268 }
12601269 } ) ;
@@ -1451,7 +1460,7 @@ impl Inner {
14511460 self . task_queue . queue_task ( Box :: new ( |ls : LanguageServer | {
14521461 spawn ( async move {
14531462 if let Err ( err) = ls
1454- . cache ( vec ! [ ] , module. specifier . as_ref ( ) . clone ( ) , false )
1463+ . cache ( vec ! [ ] , module. specifier . as_ref ( ) . clone ( ) , false , true )
14551464 . await
14561465 {
14571466 lsp_warn ! (
@@ -4085,7 +4094,7 @@ impl tower_lsp::LanguageServer for LanguageServer {
40854094 serde_json:: from_value ( json ! ( params. arguments) )
40864095 . map_err ( |err| LspError :: invalid_params ( err. to_string ( ) ) ) ?;
40874096 self
4088- . cache ( specifiers, referrer, options. force_global_cache )
4097+ . cache ( specifiers, referrer, options. force_global_cache , false )
40894098 . await
40904099 } else if params. command == "deno.reloadImportRegistries" {
40914100 * self . did_change_batch_queue . borrow_mut ( ) = None ;
@@ -4694,6 +4703,7 @@ impl Inner {
46944703 specifiers : Vec < ModuleSpecifier > ,
46954704 referrer : ModuleSpecifier ,
46964705 force_global_cache : bool ,
4706+ lockfile_skip_write : bool ,
46974707 ) -> Result < PrepareCacheResult , AnyError > {
46984708 let config_data = self . config . tree . data_for_specifier ( & referrer) ;
46994709 let scope = config_data. map ( |d| d. scope . clone ( ) ) ;
@@ -4725,6 +4735,7 @@ impl Inner {
47254735 let mut cli_factory = CliFactory :: from_flags ( Arc :: new ( Flags {
47264736 internal : InternalFlags {
47274737 cache_path : Some ( self . cache . deno_dir ( ) . root . clone ( ) ) ,
4738+ lockfile_skip_write,
47284739 ..Default :: default ( )
47294740 } ,
47304741 ca_stores : workspace_settings. certificate_stores . clone ( ) ,
@@ -4776,9 +4787,22 @@ impl Inner {
47764787 }
47774788
47784789 #[ 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+ }
47824806 self . project_changed ( vec ! [ ] , ProjectScopesChange :: Config ) ;
47834807 self . ts_server . cleanup_semantic_cache ( self . snapshot ( ) ) . await ;
47844808 self . send_diagnostics_update ( ) ;
0 commit comments