summaryrefslogtreecommitdiff
path: root/cli/lsp
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-09-17 18:29:19 +0100
committerGitHub <noreply@github.com>2024-09-17 18:29:19 +0100
commitf360cae9dd1150c1ca02d51631ddaddb5bf871ab (patch)
tree8c5eb03138afda0c30b8d24fce092ad1474149a6 /cli/lsp
parentd4a06251c54fc004e189469e493b1261be200300 (diff)
fix(lsp): properly resolve jsxImportSource for caching (#25688)
Diffstat (limited to 'cli/lsp')
-rw-r--r--cli/lsp/language_server.rs26
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);
}