Skip to content

Commit 265fb51

Browse files
committed
feedback from CR
1 parent 6de5221 commit 265fb51

File tree

4 files changed

+48
-50
lines changed

4 files changed

+48
-50
lines changed

src/compiler/checker.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14908,10 +14908,23 @@ namespace ts {
1490814908
getTypeReferenceSerializationKind,
1490914909
isOptionalParameter,
1491014910
isArgumentsLocalBinding,
14911-
getSymbolAtLocation
14911+
getExternalModuleFileFromDeclaration
1491214912
};
1491314913
}
1491414914

14915+
function getExternalModuleFileFromDeclaration(declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration): SourceFile {
14916+
const specifier = getExternalModuleName(declaration);
14917+
const moduleSymbol = getSymbolAtLocation(specifier);
14918+
if (!moduleSymbol) {
14919+
return undefined;
14920+
}
14921+
const moduleDeclaration = getDeclarationOfKind(moduleSymbol, SyntaxKind.SourceFile) as SourceFile;
14922+
if (!moduleDeclaration) {
14923+
return undefined;
14924+
}
14925+
return moduleDeclaration;
14926+
}
14927+
1491514928
function initializeTypeChecker() {
1491614929
// Bind all source files and propagate errors
1491714930
forEach(host.getSourceFiles(), file => {

src/compiler/declarationEmitter.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ namespace ts {
130130
}
131131
else if (isExternalModule(sourceFile)) {
132132
noDeclare = true;
133-
write(`declare module "${getModuleName(host, sourceFile)}" {`);
133+
write(`declare module "${getResolvedExternalModuleName(host, sourceFile)}" {`);
134134
writeLine();
135135
increaseIndent();
136136
emitSourceFile(sourceFile);
@@ -738,16 +738,12 @@ namespace ts {
738738

739739
function emitExternalModuleSpecifier(moduleSpecifier: Expression) {
740740
if (moduleSpecifier.kind === SyntaxKind.StringLiteral && (!root) && (compilerOptions.out || compilerOptions.outFile)) {
741-
let moduleSymbol = resolver.getSymbolAtLocation(moduleSpecifier);
742-
if (moduleSymbol) {
743-
let moduleDeclaration = getDeclarationOfKind(moduleSymbol, SyntaxKind.SourceFile) as SourceFile;
744-
if (moduleDeclaration && !isDeclarationFile(moduleDeclaration)) {
745-
let nonRelativeModuleName = getExternalModuleNameFromPath(host, moduleDeclaration.fileName);
746-
write("\"");
747-
write(nonRelativeModuleName);
748-
write("\"");
749-
return;
750-
}
741+
let moduleName = getExternalModuleNameFromDeclaration(host, resolver, moduleSpecifier.parent as (ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration));
742+
if (moduleName) {
743+
write("\"");
744+
write(moduleName);
745+
write("\"");
746+
return;
751747
}
752748
}
753749

src/compiler/emitter.ts

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,18 @@ namespace ts {
77
return isExternalModule(sourceFile) || isDeclarationFile(sourceFile);
88
}
99

10-
export function getModuleName(host: EmitHost, file: SourceFile): string {
10+
export function getResolvedExternalModuleName(host: EmitHost, file: SourceFile): string {
1111
return file.moduleName || getExternalModuleNameFromPath(host, file.fileName);
1212
}
1313

14+
export function getExternalModuleNameFromDeclaration(host: EmitHost, resolver: EmitResolver, declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration): string {
15+
let file = resolver.getExternalModuleFileFromDeclaration(declaration);
16+
if (!file || isDeclarationFile(file)) {
17+
return undefined;
18+
}
19+
return getResolvedExternalModuleName(host, file);
20+
}
21+
1422
type DependencyGroup = Array<ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration>;
1523

1624
let entities: Map<number> = {
@@ -553,15 +561,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
553561
/** If removeComments is true, no leading-comments needed to be emitted **/
554562
let emitLeadingCommentsOfPosition = compilerOptions.removeComments ? function (pos: number) { } : emitLeadingCommentsOfPositionWorker;
555563

556-
let moduleEmitDelegates: Map<(node: SourceFile, resolveModuleNames?: boolean) => void> = {
564+
let moduleEmitDelegates: Map<(node: SourceFile, emitRelativePathAsModuleName?: boolean) => void> = {
557565
[ModuleKind.ES6]: emitES6Module,
558566
[ModuleKind.AMD]: emitAMDModule,
559567
[ModuleKind.System]: emitSystemModule,
560568
[ModuleKind.UMD]: emitUMDModule,
561569
[ModuleKind.CommonJS]: emitCommonJSModule,
562570
};
563571

564-
let bundleEmitDelegates: Map<(node: SourceFile, resolveModuleNames?: boolean) => void> = {
572+
let bundleEmitDelegates: Map<(node: SourceFile, emitRelativePathAsModuleName?: boolean) => void> = {
565573
[ModuleKind.ES6]() {},
566574
[ModuleKind.AMD]: emitAMDModule,
567575
[ModuleKind.System]: emitSystemModule,
@@ -7275,14 +7283,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
72757283
write("}"); // execute
72767284
}
72777285

7278-
function writeModuleName(node: SourceFile, resolveModuleNames?: boolean): void {
7286+
function writeModuleName(node: SourceFile, emitRelativePathAsModuleName?: boolean): void {
72797287
let moduleName = node.moduleName;
7280-
if (moduleName || (resolveModuleNames && (moduleName = getModuleName(host, node)))) {
7288+
if (moduleName || (emitRelativePathAsModuleName && (moduleName = getResolvedExternalModuleName(host, node)))) {
72817289
write(`"${moduleName}", `);
72827290
}
72837291
}
72847292

7285-
function emitSystemModule(node: SourceFile, resolveModuleNames?: boolean): void {
7293+
function emitSystemModule(node: SourceFile, emitRelativePathAsModuleName?: boolean): void {
72867294
collectExternalModuleInfo(node);
72877295
// System modules has the following shape
72887296
// System.register(['dep-1', ... 'dep-n'], function(exports) {/* module body function */})
@@ -7297,7 +7305,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
72977305
exportFunctionForFile = makeUniqueName("exports");
72987306
writeLine();
72997307
write("System.register(");
7300-
writeModuleName(node, resolveModuleNames);
7308+
writeModuleName(node, emitRelativePathAsModuleName);
73017309
write("[");
73027310

73037311
let groupIndices: Map<number> = {};
@@ -7320,8 +7328,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
73207328
write(", ");
73217329
}
73227330

7323-
if (resolveModuleNames) {
7324-
let name = lookupSpecifierName(externalImports[i]);
7331+
if (emitRelativePathAsModuleName) {
7332+
let name = getExternalModuleNameFromDeclaration(host, resolver, externalImports[i]);
73257333
if (name) {
73267334
text = `"${name}"`;
73277335
}
@@ -7340,32 +7348,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
73407348
write("});");
73417349
}
73427350

7343-
function lookupSpecifierName(declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration): string {
7344-
let specifier: Node;
7345-
if (declaration.kind === SyntaxKind.ImportEqualsDeclaration) {
7346-
specifier = (declaration as ImportEqualsDeclaration).moduleReference;
7347-
}
7348-
else {
7349-
specifier = (declaration as ImportDeclaration | ExportDeclaration).moduleSpecifier;
7350-
}
7351-
let moduleSymbol = resolver.getSymbolAtLocation(specifier);
7352-
if (!moduleSymbol) {
7353-
return undefined;
7354-
}
7355-
let moduleDeclaration = getDeclarationOfKind(moduleSymbol, SyntaxKind.SourceFile) as SourceFile;
7356-
if (!moduleDeclaration || isDeclarationFile(moduleDeclaration)) {
7357-
return undefined;
7358-
}
7359-
return getExternalModuleNameFromPath(host, moduleDeclaration.fileName);
7360-
}
7361-
73627351
interface AMDDependencyNames {
73637352
aliasedModuleNames: string[];
73647353
unaliasedModuleNames: string[];
73657354
importAliasNames: string[];
73667355
}
73677356

7368-
function getAMDDependencyNames(node: SourceFile, includeNonAmdDependencies: boolean, resolveModuleNames?: boolean): AMDDependencyNames {
7357+
function getAMDDependencyNames(node: SourceFile, includeNonAmdDependencies: boolean, emitRelativePathAsModuleName?: boolean): AMDDependencyNames {
73697358
// names of modules with corresponding parameter in the factory function
73707359
let aliasedModuleNames: string[] = [];
73717360
// names of modules with no corresponding parameters in factory function
@@ -7389,8 +7378,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
73897378
// Find the name of the external module
73907379
let externalModuleName = getExternalModuleNameText(importNode);
73917380

7392-
if (resolveModuleNames) {
7393-
let name = lookupSpecifierName(importNode);
7381+
if (emitRelativePathAsModuleName) {
7382+
let name = getExternalModuleNameFromDeclaration(host, resolver, importNode);
73947383
if (name) {
73957384
externalModuleName = `"${name}"`;
73967385
}
@@ -7410,7 +7399,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
74107399
return { aliasedModuleNames, unaliasedModuleNames, importAliasNames };
74117400
}
74127401

7413-
function emitAMDDependencies(node: SourceFile, includeNonAmdDependencies: boolean, resolveModuleNames?: boolean) {
7402+
function emitAMDDependencies(node: SourceFile, includeNonAmdDependencies: boolean, emitRelativePathAsModuleName?: boolean) {
74147403
// An AMD define function has the following shape:
74157404
// define(id?, dependencies?, factory);
74167405
//
@@ -7423,7 +7412,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
74237412
// `import "module"` or `<amd-dependency path= "a.css" />`
74247413
// we need to add modules without alias names to the end of the dependencies list
74257414

7426-
let dependencyNames = getAMDDependencyNames(node, includeNonAmdDependencies, resolveModuleNames);
7415+
let dependencyNames = getAMDDependencyNames(node, includeNonAmdDependencies, emitRelativePathAsModuleName);
74277416
emitAMDDependencyList(dependencyNames);
74287417
write(", ");
74297418
emitAMDFactoryHeader(dependencyNames);
@@ -7451,14 +7440,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
74517440
write(") {");
74527441
}
74537442

7454-
function emitAMDModule(node: SourceFile, resolveModuleNames?: boolean) {
7443+
function emitAMDModule(node: SourceFile, emitRelativePathAsModuleName?: boolean) {
74557444
emitEmitHelpers(node);
74567445
collectExternalModuleInfo(node);
74577446

74587447
writeLine();
74597448
write("define(");
7460-
writeModuleName(node, resolveModuleNames);
7461-
emitAMDDependencies(node, /*includeNonAmdDependencies*/ true, resolveModuleNames);
7449+
writeModuleName(node, emitRelativePathAsModuleName);
7450+
emitAMDDependencies(node, /*includeNonAmdDependencies*/ true, emitRelativePathAsModuleName);
74627451
increaseIndent();
74637452
let startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true);
74647453
emitExportStarHelper();
@@ -7712,7 +7701,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
77127701
emitModule(node);
77137702
}
77147703
else {
7715-
bundleEmitDelegates[modulekind](node, /*resolveModuleNames*/true);
7704+
bundleEmitDelegates[modulekind](node, /*emitRelativePathAsModuleName*/true);
77167705
}
77177706
}
77187707
else {

src/compiler/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1619,7 +1619,7 @@ namespace ts {
16191619
getTypeReferenceSerializationKind(typeName: EntityName): TypeReferenceSerializationKind;
16201620
isOptionalParameter(node: ParameterDeclaration): boolean;
16211621
isArgumentsLocalBinding(node: Identifier): boolean;
1622-
getSymbolAtLocation(node: Node): Symbol;
1622+
getExternalModuleFileFromDeclaration(declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration): SourceFile;
16231623
}
16241624

16251625
export const enum SymbolFlags {

0 commit comments

Comments
 (0)