diff options
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 110 |
1 files changed, 46 insertions, 64 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index a5923a84a..8348bd95f 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -334,11 +334,7 @@ impl LanguageServer { // do as much as possible in a read, then do a write outside let maybe_prepare_cache_result = { let inner = self.0.read().await; // ensure dropped - match inner.prepare_cache( - specifiers, - referrer.clone(), - force_global_cache, - ) { + match inner.prepare_cache(specifiers, referrer, force_global_cache) { Ok(maybe_cache_result) => maybe_cache_result, Err(err) => { lsp_warn!("Error preparing caching: {:#}", err); @@ -370,7 +366,7 @@ impl LanguageServer { } { let mut inner = self.0.write().await; - let lockfile = inner.config.tree.lockfile_for_specifier(&referrer); + let lockfile = inner.config.tree.root_lockfile().cloned(); inner.documents.refresh_jsr_resolver(lockfile); inner.refresh_npm_specifiers().await; } @@ -516,11 +512,8 @@ impl Inner { let cache_metadata = cache::CacheMetadata::new(deps_http_cache.clone()); let performance = Arc::new(Performance::default()); let config = Config::default(); - let ts_server = Arc::new(TsServer::new( - performance.clone(), - deps_http_cache.clone(), - config.tree.clone(), - )); + let ts_server = + Arc::new(TsServer::new(performance.clone(), deps_http_cache.clone())); let diagnostics_state = Arc::new(DiagnosticsState::default()); let diagnostics_server = DiagnosticsServer::new( client.clone(), @@ -765,7 +758,10 @@ impl Inner { )); let maybe_local_cache = self.config.tree.root_vendor_dir().map(|local_path| { - Arc::new(LocalLspHttpCache::new(local_path, global_cache.clone())) + Arc::new(LocalLspHttpCache::new( + local_path.clone(), + global_cache.clone(), + )) }); let cache: Arc<dyn HttpCache> = maybe_local_cache .clone() @@ -1154,42 +1150,33 @@ impl Inner { async fn refresh_config_tree(&mut self) { let file_fetcher = self.create_file_fetcher(CacheSetting::RespectHeaders); - if let Some(root_uri) = self.config.root_uri() { - self - .config - .tree - .refresh( - &self.config.settings, - root_uri, - &self.workspace_files, - &file_fetcher, - ) - .await; - for config_file in self.config.tree.config_files() { - if let Ok((compiler_options, _)) = config_file.to_compiler_options() { - if let Some(compiler_options_obj) = compiler_options.as_object() { - if let Some(jsx_import_source) = - compiler_options_obj.get("jsxImportSource") - { - if let Some(jsx_import_source) = jsx_import_source.as_str() { - let specifiers = vec![Url::parse(&format!( - "data:application/typescript;base64,{}", - base64::engine::general_purpose::STANDARD.encode(format!( - "import '{jsx_import_source}/jsx-runtime';" - )) - )) - .unwrap()]; - let referrer = config_file.specifier.clone(); - self.task_queue.queue_task(Box::new(|ls: LanguageServer| { - spawn(async move { - if let Err(err) = - ls.cache(specifiers, referrer, false).await - { - lsp_warn!("{:#}", err); - } - }); - })); - } + self + .config + .tree + .refresh(&self.config.settings, &self.workspace_files, &file_fetcher) + .await; + for config_file in self.config.tree.config_files() { + if let Ok((compiler_options, _)) = config_file.to_compiler_options() { + if let Some(compiler_options_obj) = compiler_options.as_object() { + if let Some(jsx_import_source) = + compiler_options_obj.get("jsxImportSource") + { + if let Some(jsx_import_source) = jsx_import_source.as_str() { + let specifiers = vec![Url::parse(&format!( + "data:application/typescript;base64,{}", + base64::engine::general_purpose::STANDARD + .encode(format!("import '{jsx_import_source}/jsx-runtime';")) + )) + .unwrap()]; + let referrer = config_file.specifier.clone(); + self.task_queue.queue_task(Box::new(|ls: LanguageServer| { + spawn(async move { + if let Err(err) = ls.cache(specifiers, referrer, false).await + { + lsp_warn!("{:#}", err); + } + }); + })); } } } @@ -1383,7 +1370,7 @@ impl Inner { _ => return None, }; Some(lsp_custom::DenoConfigurationChangeEvent { - scope_uri: t.0, + scope_uri: t.0.clone(), file_uri: e.uri.clone(), typ: lsp_custom::DenoConfigurationChangeType::from_file_change_type( e.typ, @@ -1407,7 +1394,7 @@ impl Inner { _ => return None, }; Some(lsp_custom::DenoConfigurationChangeEvent { - scope_uri: t.0, + scope_uri: t.0.clone(), file_uri: e.uri.clone(), typ: lsp_custom::DenoConfigurationChangeType::from_file_change_type( e.typ, @@ -2010,11 +1997,11 @@ impl Inner { pub fn get_ts_response_import_mapper( &self, - referrer: &ModuleSpecifier, + _referrer: &ModuleSpecifier, ) -> TsResponseImportMapper { TsResponseImportMapper::new( &self.documents, - self.config.tree.import_map_for_specifier(referrer), + self.config.tree.root_import_map().map(|i| i.as_ref()), self.npm.node_resolver.as_deref(), self.npm.resolver.as_deref(), ) @@ -2327,7 +2314,7 @@ impl Inner { &self.jsr_search_api, &self.npm.search_api, &self.documents, - self.config.tree.import_map_for_specifier(&specifier), + self.config.tree.root_import_map().map(|i| i.as_ref()), ) .await; } @@ -3112,7 +3099,7 @@ impl tower_lsp::LanguageServer for LanguageServer { } let mut config_events = vec![]; - for (scope_uri, config_data) in ls.config.tree.data_by_scope() { + for (scope_uri, config_data) in ls.config.tree.data_by_scope().iter() { if let Some(config_file) = &config_data.config_file { config_events.push(lsp_custom::DenoConfigurationChangeEvent { scope_uri: scope_uri.clone(), @@ -3493,7 +3480,7 @@ impl Inner { let mark = self .performance .mark_with_args("lsp.cache", (&specifiers, &referrer)); - let config_data = self.config.tree.data_for_specifier(&referrer); + let config_data = self.config.tree.root_data(); let roots = if !specifiers.is_empty() { specifiers } else { @@ -3508,7 +3495,7 @@ impl Inner { unsafely_ignore_certificate_errors: workspace_settings .unsafely_ignore_certificate_errors .clone(), - import_map_path: config_data.as_ref().and_then(|d| { + import_map_path: config_data.and_then(|d| { if d.import_map_from_settings { return Some(d.import_map.as_ref()?.base_url().to_string()); } @@ -3516,7 +3503,6 @@ impl Inner { }), node_modules_dir: Some( config_data - .as_ref() .and_then(|d| d.node_modules_dir.as_ref()) .is_some(), ), @@ -3525,13 +3511,9 @@ impl Inner { ..Default::default() }, self.initial_cwd.clone(), - config_data - .as_ref() - .and_then(|d| d.config_file.as_deref().cloned()), - config_data.as_ref().and_then(|d| d.lockfile.clone()), - config_data - .as_ref() - .and_then(|d| d.package_json.as_deref().cloned()), + config_data.and_then(|d| d.config_file.as_deref().cloned()), + config_data.and_then(|d| d.lockfile.clone()), + config_data.and_then(|d| d.package_json.as_deref().cloned()), force_global_cache, )?; |