summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/jsr.rs24
-rw-r--r--cli/lsp/analysis.rs5
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()