diff options
Diffstat (limited to 'cli/lsp/cache.rs')
-rw-r--r-- | cli/lsp/cache.rs | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/cli/lsp/cache.rs b/cli/lsp/cache.rs index 1ea317240..b7bdb90c5 100644 --- a/cli/lsp/cache.rs +++ b/cli/lsp/cache.rs @@ -2,9 +2,11 @@ use crate::cache::CacherLoader; use crate::cache::FetchCacher; +use crate::config_file::ConfigFile; use crate::flags::Flags; use crate::proc_state::ProcState; use crate::resolver::ImportMapResolver; +use crate::resolver::JsxResolver; use deno_core::error::anyhow; use deno_core::error::AnyError; @@ -13,6 +15,7 @@ use deno_runtime::permissions::Permissions; use deno_runtime::tokio_util::create_basic_runtime; use import_map::ImportMap; use std::path::PathBuf; +use std::sync::Arc; use std::thread; use tokio::sync::mpsc; use tokio::sync::oneshot; @@ -27,7 +30,8 @@ pub(crate) struct CacheServer(mpsc::UnboundedSender<Request>); impl CacheServer { pub async fn new( maybe_cache_path: Option<PathBuf>, - maybe_import_map: Option<ImportMap>, + maybe_import_map: Option<Arc<ImportMap>>, + maybe_config_file: Option<ConfigFile>, ) -> Self { let (tx, mut rx) = mpsc::unbounded_channel::<Request>(); let _join_handle = thread::spawn(move || { @@ -39,8 +43,26 @@ impl CacheServer { }) .await .unwrap(); - let maybe_resolver = - maybe_import_map.as_ref().map(ImportMapResolver::new); + let maybe_import_map_resolver = + maybe_import_map.map(ImportMapResolver::new); + let maybe_jsx_resolver = maybe_config_file + .as_ref() + .map(|cf| { + cf.to_maybe_jsx_import_source_module() + .map(|im| JsxResolver::new(im, maybe_import_map_resolver.clone())) + }) + .flatten(); + let maybe_resolver = if maybe_jsx_resolver.is_some() { + maybe_jsx_resolver.as_ref().map(|jr| jr.as_resolver()) + } else { + maybe_import_map_resolver + .as_ref() + .map(|im| im.as_resolver()) + }; + let maybe_imports = maybe_config_file + .map(|cf| cf.to_maybe_imports().ok()) + .flatten() + .flatten(); let mut cache = FetchCacher::new( ps.dir.gen_cache.clone(), ps.file_fetcher.clone(), @@ -52,9 +74,9 @@ impl CacheServer { let graph = deno_graph::create_graph( roots, false, - None, + maybe_imports.clone(), cache.as_mut_loader(), - maybe_resolver.as_ref().map(|r| r.as_resolver()), + maybe_resolver, None, None, ) |