summaryrefslogtreecommitdiff
path: root/cli/lsp/language_server.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-08-21 20:00:23 +0100
committerGitHub <noreply@github.com>2024-08-21 20:00:23 +0100
commitc22ff197dbcbf3fb589bb5dfcf0c4fdc3d72f0a0 (patch)
tree2143cab726b9d7c3828b9cf085a657b5f22b4359 /cli/lsp/language_server.rs
parent1d4169204cdc870a084a3371500d7b3ab8546bc2 (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.rs53
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()