diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2024-09-17 18:29:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-17 18:29:19 +0100 |
commit | f360cae9dd1150c1ca02d51631ddaddb5bf871ab (patch) | |
tree | 8c5eb03138afda0c30b8d24fce092ad1474149a6 /cli/lsp | |
parent | d4a06251c54fc004e189469e493b1261be200300 (diff) |
fix(lsp): properly resolve jsxImportSource for caching (#25688)
Diffstat (limited to 'cli/lsp')
-rw-r--r-- | cli/lsp/language_server.rs | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index d025d35a8..c859abc02 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -1,6 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -use base64::Engine; use deno_ast::MediaType; use deno_config::workspace::WorkspaceDirectory; use deno_config::workspace::WorkspaceDiscoverOptions; @@ -968,16 +967,27 @@ impl Inner { (|| { let compiler_options = config_file.to_compiler_options().ok()?.options; let jsx_import_source = compiler_options.get("jsxImportSource")?; - let jsx_import_source = jsx_import_source.as_str()?; + let jsx_import_source = jsx_import_source.as_str()?.to_string(); 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(); + let specifier = format!("{jsx_import_source}/jsx-runtime"); self.task_queue.queue_task(Box::new(|ls: LanguageServer| { spawn(async move { + let specifier = { + let inner = ls.inner.read().await; + let resolver = inner.resolver.as_graph_resolver(Some(&referrer)); + let Ok(specifier) = resolver.resolve( + &specifier, + &deno_graph::Range { + specifier: referrer.clone(), + start: deno_graph::Position::zeroed(), + end: deno_graph::Position::zeroed(), + }, + deno_graph::source::ResolutionMode::Types, + ) else { + return; + }; + specifier + }; if let Err(err) = ls.cache(vec![specifier], referrer, false).await { lsp_warn!("{:#}", err); } |