diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2024-08-21 20:00:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-21 20:00:23 +0100 |
commit | c22ff197dbcbf3fb589bb5dfcf0c4fdc3d72f0a0 (patch) | |
tree | 2143cab726b9d7c3828b9cf085a657b5f22b4359 /cli/lsp/language_server.rs | |
parent | 1d4169204cdc870a084a3371500d7b3ab8546bc2 (diff) |
fix(lsp): resolve jsx import source with types mode (#25064)
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 0815398d5..04863c251 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -956,31 +956,27 @@ impl Inner { .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); - } - }); - })); + (|| { + let compiler_options = config_file.to_compiler_options().ok()?.0; + let compiler_options_obj = compiler_options.as_object()?; + let jsx_import_source = compiler_options_obj.get("jsxImportSource")?; + let jsx_import_source = jsx_import_source.as_str()?; + let referrer = config_file.specifier.clone(); + let specifier = Url::parse(&format!( + "data:application/typescript;base64,{}", + base64::engine::general_purpose::STANDARD + .encode(format!("import '{jsx_import_source}/jsx-runtime';")) + )) + .unwrap(); + self.task_queue.queue_task(Box::new(|ls: LanguageServer| { + spawn(async move { + if let Err(err) = ls.cache(vec![specifier], referrer, false).await { + lsp_warn!("{:#}", err); } - } - } - } + }); + })); + Some(()) + })(); } } @@ -3533,19 +3529,22 @@ impl Inner { force_global_cache: bool, ) -> Result<PrepareCacheResult, AnyError> { let config_data = self.config.tree.data_for_specifier(&referrer); + let byonm = config_data.map(|d| d.byonm).unwrap_or(false); let mut roots = if !specifiers.is_empty() { specifiers } else { vec![referrer.clone()] }; - // always include the npm packages since resolution of one npm package - // might affect the resolution of other npm packages - if let Some(npm_reqs) = self + if byonm { + roots.retain(|s| s.scheme() != "npm"); + } else if let Some(npm_reqs) = self .documents .npm_reqs_by_scope() .get(&config_data.map(|d| d.scope.as_ref().clone())) { + // always include the npm packages since resolution of one npm package + // might affect the resolution of other npm packages roots.extend( npm_reqs .iter() |