diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/jsr.rs | 24 | ||||
-rw-r--r-- | cli/lsp/analysis.rs | 5 |
2 files changed, 26 insertions, 3 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> { diff --git a/cli/lsp/analysis.rs b/cli/lsp/analysis.rs index 23b6bb099..133f5f0ac 100644 --- a/cli/lsp/analysis.rs +++ b/cli/lsp/analysis.rs @@ -544,7 +544,10 @@ fn fix_ts_import_action( action: &tsc::CodeFixAction, import_mapper: &TsResponseImportMapper, ) -> Result<tsc::CodeFixAction, AnyError> { - if action.fix_name == "import" { + if matches!( + action.fix_name.as_str(), + "import" | "fixMissingFunctionDeclaration" + ) { let change = action .changes .first() |