Skip to content

Commit df54db7

Browse files
author
Yui T
committed
Merge branch 'master' into usingShorthand
Conflicts: bin/tsc.js bin/typescriptServices.js src/compiler/parser.ts
2 parents c417df4 + a9cf216 commit df54db7

13 files changed

+138
-6
lines changed

bin/tsc.js

+18-2
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,7 @@ var ts;
10561056
Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: 1 /* Error */, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." },
10571057
Type_alias_0_circularly_references_itself: { code: 2456, category: 1 /* Error */, key: "Type alias '{0}' circularly references itself." },
10581058
Type_alias_name_cannot_be_0: { code: 2457, category: 1 /* Error */, key: "Type alias name cannot be '{0}'" },
1059+
An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: 1 /* Error */, key: "An AMD module cannot have multiple name assignments." },
10591060
Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." },
10601061
Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
10611062
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },
@@ -5542,6 +5543,7 @@ var ts;
55425543
function processReferenceComments() {
55435544
var referencedFiles = [];
55445545
var amdDependencies = [];
5546+
var amdModuleName;
55455547
commentRanges = [];
55465548
token = scanner.scan();
55475549
for (var i = 0; i < commentRanges.length; i++) {
@@ -5560,6 +5562,14 @@ var ts;
55605562
}
55615563
}
55625564
else {
5565+
var amdModuleNameRegEx = /^\/\/\/\s*<amd-module\s+name\s*=\s*('|")(.+?)\1/gim;
5566+
var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment);
5567+
if (amdModuleNameMatchResult) {
5568+
if (amdModuleName) {
5569+
errorAtPos(range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments);
5570+
}
5571+
amdModuleName = amdModuleNameMatchResult[2];
5572+
}
55635573
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s+path\s*=\s*('|")(.+?)\1/gim;
55645574
var amdDependencyMatchResult = amdDependencyRegEx.exec(comment);
55655575
if (amdDependencyMatchResult) {
@@ -5570,7 +5580,8 @@ var ts;
55705580
commentRanges = undefined;
55715581
return {
55725582
referencedFiles: referencedFiles,
5573-
amdDependencies: amdDependencies
5583+
amdDependencies: amdDependencies,
5584+
amdModuleName: amdModuleName
55745585
};
55755586
}
55765587
function getExternalModuleIndicator() {
@@ -5593,6 +5604,7 @@ var ts;
55935604
var referenceComments = processReferenceComments();
55945605
file.referencedFiles = referenceComments.referencedFiles;
55955606
file.amdDependencies = referenceComments.amdDependencies;
5607+
file.amdModuleName = referenceComments.amdModuleName;
55965608
file.statements = parseList(0 /* SourceElements */, true, parseSourceElement);
55975609
file.externalModuleIndicator = getExternalModuleIndicator();
55985610
file.nodeCount = nodeCount;
@@ -7953,7 +7965,11 @@ var ts;
79537965
function emitAMDModule(node, startIndex) {
79547966
var imports = getExternalImportDeclarations(node);
79557967
writeLine();
7956-
write("define([\"require\", \"exports\"");
7968+
write("define(");
7969+
if (node.amdModuleName) {
7970+
write("\"" + node.amdModuleName + "\", ");
7971+
}
7972+
write("[\"require\", \"exports\"");
79577973
ts.forEach(imports, function (imp) {
79587974
write(", ");
79597975
emitLiteral(imp.externalModuleName);

bin/typescriptServices.js

+18-2
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,7 @@ var ts;
861861
Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: 1 /* Error */, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." },
862862
Type_alias_0_circularly_references_itself: { code: 2456, category: 1 /* Error */, key: "Type alias '{0}' circularly references itself." },
863863
Type_alias_name_cannot_be_0: { code: 2457, category: 1 /* Error */, key: "Type alias name cannot be '{0}'" },
864+
An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: 1 /* Error */, key: "An AMD module cannot have multiple name assignments." },
864865
Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." },
865866
Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
866867
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },
@@ -5347,6 +5348,7 @@ var ts;
53475348
function processReferenceComments() {
53485349
var referencedFiles = [];
53495350
var amdDependencies = [];
5351+
var amdModuleName;
53505352
commentRanges = [];
53515353
token = scanner.scan();
53525354
for (var i = 0; i < commentRanges.length; i++) {
@@ -5365,6 +5367,14 @@ var ts;
53655367
}
53665368
}
53675369
else {
5370+
var amdModuleNameRegEx = /^\/\/\/\s*<amd-module\s+name\s*=\s*('|")(.+?)\1/gim;
5371+
var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment);
5372+
if (amdModuleNameMatchResult) {
5373+
if (amdModuleName) {
5374+
errorAtPos(range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments);
5375+
}
5376+
amdModuleName = amdModuleNameMatchResult[2];
5377+
}
53685378
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s+path\s*=\s*('|")(.+?)\1/gim;
53695379
var amdDependencyMatchResult = amdDependencyRegEx.exec(comment);
53705380
if (amdDependencyMatchResult) {
@@ -5375,7 +5385,8 @@ var ts;
53755385
commentRanges = undefined;
53765386
return {
53775387
referencedFiles: referencedFiles,
5378-
amdDependencies: amdDependencies
5388+
amdDependencies: amdDependencies,
5389+
amdModuleName: amdModuleName
53795390
};
53805391
}
53815392
function getExternalModuleIndicator() {
@@ -5398,6 +5409,7 @@ var ts;
53985409
var referenceComments = processReferenceComments();
53995410
file.referencedFiles = referenceComments.referencedFiles;
54005411
file.amdDependencies = referenceComments.amdDependencies;
5412+
file.amdModuleName = referenceComments.amdModuleName;
54015413
file.statements = parseList(0 /* SourceElements */, true, parseSourceElement);
54025414
file.externalModuleIndicator = getExternalModuleIndicator();
54035415
file.nodeCount = nodeCount;
@@ -7758,7 +7770,11 @@ var ts;
77587770
function emitAMDModule(node, startIndex) {
77597771
var imports = getExternalImportDeclarations(node);
77607772
writeLine();
7761-
write("define([\"require\", \"exports\"");
7773+
write("define(");
7774+
if (node.amdModuleName) {
7775+
write("\"" + node.amdModuleName + "\", ");
7776+
}
7777+
write("[\"require\", \"exports\"");
77627778
ts.forEach(imports, function (imp) {
77637779
write(", ");
77647780
emitLiteral(imp.externalModuleName);

src/compiler/diagnosticInformationMap.generated.ts

+1
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ module ts {
273273
Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: DiagnosticCategory.Error, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." },
274274
Type_alias_0_circularly_references_itself: { code: 2456, category: DiagnosticCategory.Error, key: "Type alias '{0}' circularly references itself." },
275275
Type_alias_name_cannot_be_0: { code: 2457, category: DiagnosticCategory.Error, key: "Type alias name cannot be '{0}'" },
276+
An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: DiagnosticCategory.Error, key: "An AMD module cannot have multiple name assignments." },
276277
Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." },
277278
Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
278279
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },

src/compiler/diagnosticMessages.json

+4
Original file line numberDiff line numberDiff line change
@@ -1089,6 +1089,10 @@
10891089
"category": "Error",
10901090
"code": 2457
10911091
},
1092+
"An AMD module cannot have multiple name assignments.": {
1093+
"category": "Error",
1094+
"code": 2458
1095+
},
10921096

10931097
"Import declaration '{0}' is using private name '{1}'.": {
10941098
"category": "Error",

src/compiler/emitter.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -2134,7 +2134,11 @@ module ts {
21342134
function emitAMDModule(node: SourceFile, startIndex: number) {
21352135
var imports = getExternalImportDeclarations(node);
21362136
writeLine();
2137-
write("define([\"require\", \"exports\"");
2137+
write("define(");
2138+
if(node.amdModuleName) {
2139+
write("\"" + node.amdModuleName + "\", ");
2140+
}
2141+
write("[\"require\", \"exports\"");
21382142
forEach(imports, imp => {
21392143
write(", ");
21402144
emitLiteral(imp.externalModuleName);

src/compiler/parser.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module ts {
2020
interface ReferenceComments {
2121
referencedFiles: FileReference[];
2222
amdDependencies: string[];
23+
amdModuleName: string;
2324
}
2425

2526
export function getSourceFileOfNode(node: Node): SourceFile {
@@ -4247,6 +4248,7 @@ module ts {
42474248
function processReferenceComments(): ReferenceComments {
42484249
var referencedFiles: FileReference[] = [];
42494250
var amdDependencies: string[] = [];
4251+
var amdModuleName: string;
42504252
commentRanges = [];
42514253
token = scanner.scan();
42524254

@@ -4266,6 +4268,15 @@ module ts {
42664268
}
42674269
}
42684270
else {
4271+
var amdModuleNameRegEx = /^\/\/\/\s*<amd-module\s+name\s*=\s*('|")(.+?)\1/gim;
4272+
var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment);
4273+
if(amdModuleNameMatchResult) {
4274+
if(amdModuleName) {
4275+
errorAtPos(range.pos, range.end - range.pos, Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments);
4276+
}
4277+
amdModuleName = amdModuleNameMatchResult[2];
4278+
}
4279+
42694280
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s+path\s*=\s*('|")(.+?)\1/gim;
42704281
var amdDependencyMatchResult = amdDependencyRegEx.exec(comment);
42714282
if (amdDependencyMatchResult) {
@@ -4276,7 +4287,8 @@ module ts {
42764287
commentRanges = undefined;
42774288
return {
42784289
referencedFiles,
4279-
amdDependencies
4290+
amdDependencies,
4291+
amdModuleName
42804292
};
42814293
}
42824294

@@ -4306,6 +4318,7 @@ module ts {
43064318
var referenceComments = processReferenceComments();
43074319
file.referencedFiles = referenceComments.referencedFiles;
43084320
file.amdDependencies = referenceComments.amdDependencies;
4321+
file.amdModuleName = referenceComments.amdModuleName;
43094322
file.statements = parseList(ParsingContext.SourceElements, /*checkForStrictMode*/ true, parseSourceElement);
43104323
file.externalModuleIndicator = getExternalModuleIndicator();
43114324
file.nodeCount = nodeCount;

src/compiler/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@ module ts {
642642
getPositionFromLineAndCharacter(line: number, character: number): number;
643643
getLineStarts(): number[];
644644
amdDependencies: string[];
645+
amdModuleName: string;
645646
referencedFiles: FileReference[];
646647
syntacticErrors: Diagnostic[];
647648
semanticErrors: Diagnostic[];

src/services/services.ts

+1
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,7 @@ module ts {
718718
public getPositionFromLineAndCharacter(line: number, character: number): number { return -1; }
719719
public getLineStarts(): number[] { return undefined; }
720720
public amdDependencies: string[];
721+
public amdModuleName: string;
721722
public referencedFiles: FileReference[];
722723
public syntacticErrors: Diagnostic[];
723724
public semanticErrors: Diagnostic[];
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//// [amdModuleName1.ts]
2+
///<amd-module name='NamedModule'/>
3+
class Foo {
4+
x: number;
5+
constructor() {
6+
this.x = 5;
7+
}
8+
}
9+
export = Foo;
10+
11+
12+
//// [amdModuleName1.js]
13+
define("NamedModule", ["require", "exports"], function (require, exports) {
14+
///<amd-module name='NamedModule'/>
15+
var Foo = (function () {
16+
function Foo() {
17+
this.x = 5;
18+
}
19+
return Foo;
20+
})();
21+
return Foo;
22+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
=== tests/cases/compiler/amdModuleName1.ts ===
2+
///<amd-module name='NamedModule'/>
3+
class Foo {
4+
>Foo : Foo
5+
6+
x: number;
7+
>x : number
8+
9+
constructor() {
10+
this.x = 5;
11+
>this.x = 5 : number
12+
>this.x : number
13+
>this : Foo
14+
>x : number
15+
}
16+
}
17+
export = Foo;
18+
>Foo : Foo
19+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
tests/cases/compiler/amdModuleName2.ts(2,1): error TS2458: An AMD module cannot have multiple name assignments.
2+
3+
4+
==== tests/cases/compiler/amdModuleName2.ts (1 errors) ====
5+
///<amd-module name='FirstModuleName'/>
6+
///<amd-module name='SecondModuleName'/>
7+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8+
!!! error TS2458: An AMD module cannot have multiple name assignments.
9+
class Foo {
10+
x: number;
11+
constructor() {
12+
this.x = 5;
13+
}
14+
}
15+
export = Foo;
16+
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//@module: amd
2+
///<amd-module name='NamedModule'/>
3+
class Foo {
4+
x: number;
5+
constructor() {
6+
this.x = 5;
7+
}
8+
}
9+
export = Foo;
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//@module: amd
2+
///<amd-module name='FirstModuleName'/>
3+
///<amd-module name='SecondModuleName'/>
4+
class Foo {
5+
x: number;
6+
constructor() {
7+
this.x = 5;
8+
}
9+
}
10+
export = Foo;

0 commit comments

Comments
 (0)