Merge pull request #29418 from Microsoft/exportEquals

Handle generating action for export equals with anonymous symbol
This commit is contained in:
Sheetal Nandi 2019-01-14 16:12:32 -08:00 committed by GitHub
commit d53619a30d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View File

@ -367,7 +367,9 @@ namespace ts.Completions {
}
function getSymbolName(symbol: Symbol, origin: SymbolOriginInfo | undefined, target: ScriptTarget): string {
return origin && originIsExport(origin) && origin.isDefaultExport && symbol.escapedName === InternalSymbolName.Default
return origin && originIsExport(origin) && (
(origin.isDefaultExport && symbol.escapedName === InternalSymbolName.Default) ||
(symbol.escapedName === InternalSymbolName.ExportEquals))
// Name of "export default foo;" is "foo". Name of "export default 0" is the filename converted to camelCase.
? firstDefined(symbol.declarations, d => isExportAssignment(d) && isIdentifier(d.expression) ? d.expression.text : undefined)
|| codefix.moduleSymbolToValidIdentifier(origin.moduleSymbol, target)

View File

@ -0,0 +1,28 @@
/// <reference path='fourslash.ts'/>
// Use `/src` to test that directory names are not included in conversion from module path to identifier.
// @noLib: true
// @Filename: /src/foo-bar.ts
////export = 0;
// @Filename: /src/b.ts
////exp/*0*/
////fooB/*1*/
goTo.marker("0");
const preferences: FourSlashInterface.UserPreferences = { includeCompletionsForModuleExports: true };
const exportEntry: FourSlashInterface.ExpectedCompletionEntryObject = { name: "fooBar", source: "/src/foo-bar", sourceDisplay: "./foo-bar", text: "(property) export=: 0", kind: "property", hasAction: true };
verify.completions(
{ marker: "0", exact: ["undefined", exportEntry, ...completion.statementKeywordsWithTypes], preferences },
{ marker: "1", includes: exportEntry, preferences }
);
verify.applyCodeActionFromCompletion("0", {
name: "fooBar",
source: "/src/foo-bar",
description: `Import 'fooBar' from module "./foo-bar"`,
newFileContent: `import fooBar = require("./foo-bar");
exp
fooB`,
});