Make javascript require goto def similar to ts import equals (#36487)

Fixes #34996
This commit is contained in:
Sheetal Nandi 2020-01-28 16:23:56 -08:00 committed by GitHub
parent 39311da27b
commit 869a8211fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 1 deletions

View File

@ -207,6 +207,15 @@ namespace ts.GoToDefinition {
return aliased;
}
}
if (symbol && isInJSFile(node)) {
const requireCall = forEach(symbol.declarations, d => isVariableDeclaration(d) && !!d.initializer && isRequireCall(d.initializer, /*checkArgumentIsStringLiteralLike*/ true) ? d.initializer : undefined);
if (requireCall) {
const moduleSymbol = checker.getSymbolAtLocation(requireCall.arguments[0]);
if (moduleSymbol) {
return checker.resolveExternalModuleSymbol(moduleSymbol);
}
}
}
return symbol;
}

View File

@ -0,0 +1,19 @@
/// <reference path='fourslash.ts'/>
// @allowJs: true
// @Filename: /foo.js
//// /*moduleDef*/class Blah {
//// abc = 123;
////}
////module.exports.Blah = Blah;
// @Filename: /bar.js
////const [|/*importDef*/BlahModule|] = require("./foo.js");
////new [|/*importUsage*/BlahModule|].Blah()
// @Filename: /barTs.ts
////import [|/*importDefTs*/BlahModule|] = require("./foo.js");
////new [|/*importUsageTs*/BlahModule|].Blah()
verify.goToDefinition(["importDef", "importUsage", "importDefTs", "importUsageTs"], "moduleDef");

View File

@ -9,4 +9,8 @@
////const f = require("./a");
////[|/*use*/f|]();
verify.goToDefinition("use", "f");
// @Filename: /bar.ts
////import f = require("./a");
////[|/*useTs*/f|]();
verify.goToDefinition(["use", "useTs"], "f");