summaryrefslogtreecommitdiff
path: root/cli/jsr.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-05-21 21:15:16 +0100
committerGitHub <noreply@github.com>2024-05-21 21:15:16 +0100
commitcc8c0609ebec9f101a1739a0c42c91718ca2abba (patch)
tree2d62b2b2250a1e478e7d06cd0983a0681acdd6ad /cli/jsr.rs
parentddb5449f42051a2c7e92142a5d0750cdc49cb281 (diff)
fix(lsp): apply import fix to missing declaration code action (#23924)
Diffstat (limited to 'cli/jsr.rs')
-rw-r--r--cli/jsr.rs24
1 files changed, 22 insertions, 2 deletions
diff --git a/cli/jsr.rs b/cli/jsr.rs
index c4cb87dbd..bdfba7f10 100644
--- a/cli/jsr.rs
+++ b/cli/jsr.rs
@@ -111,12 +111,32 @@ impl JsrCacheResolver {
) -> Option<String> {
let info = self.package_version_info(nv)?;
let path = path.strip_prefix("./").unwrap_or(path);
+ let mut sloppy_fallback = None;
for (export, path_) in info.exports() {
- if path_.strip_prefix("./").unwrap_or(path_) == path {
+ let path_ = path_.strip_prefix("./").unwrap_or(path_);
+ if path_ == path {
return Some(export.strip_prefix("./").unwrap_or(export).to_string());
}
+ // TSC in some cases will suggest a `.js` import path for a `.d.ts` source
+ // file.
+ if sloppy_fallback.is_none() {
+ let path = path
+ .strip_suffix(".js")
+ .or_else(|| path.strip_suffix(".mjs"))
+ .or_else(|| path.strip_suffix(".cjs"))
+ .unwrap_or(path);
+ let path_ = path_
+ .strip_suffix(".d.ts")
+ .or_else(|| path_.strip_suffix(".d.mts"))
+ .or_else(|| path_.strip_suffix(".d.cts"))
+ .unwrap_or(path_);
+ if path_ == path {
+ sloppy_fallback =
+ Some(export.strip_prefix("./").unwrap_or(export).to_string());
+ }
+ }
}
- None
+ sloppy_fallback
}
pub fn lookup_req_for_nv(&self, nv: &PackageNv) -> Option<PackageReq> {