diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2024-05-21 21:15:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-21 21:15:16 +0100 |
commit | cc8c0609ebec9f101a1739a0c42c91718ca2abba (patch) | |
tree | 2d62b2b2250a1e478e7d06cd0983a0681acdd6ad /cli/jsr.rs | |
parent | ddb5449f42051a2c7e92142a5d0750cdc49cb281 (diff) |
fix(lsp): apply import fix to missing declaration code action (#23924)
Diffstat (limited to 'cli/jsr.rs')
-rw-r--r-- | cli/jsr.rs | 24 |
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> { |