diff --git a/.gitignore b/.gitignore index 57e8804d7c3..c54c8018ea8 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ scripts/ior.js scripts/*.js.map coverage/ internal/ +**/.DS_Store diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index ce0851b2b56..6a2338268e8 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4057,11 +4057,25 @@ module ts { } }); } + + function sortAMDModules(amdModules: {name: string; path: string}[]) { + // AMD modules with declared variable names go first + return amdModules.sort((moduleA, moduleB) => { + if (moduleA.name === moduleB.name) { + return 0; + } else if (!moduleA.name) { + return 1; + } else { + return -1; + } + }); + } function emitAMDModule(node: SourceFile, startIndex: number) { var imports = getExternalImportDeclarations(node); writeLine(); write("define("); + sortAMDModules(node.amdDependencies); if (node.amdModuleName) { write("\"" + node.amdModuleName + "\", "); } @@ -4071,7 +4085,7 @@ module ts { emitLiteral(getExternalModuleImportDeclarationExpression(imp)); }); forEach(node.amdDependencies, amdDependency => { - var text = "\"" + amdDependency + "\""; + var text = "\"" + amdDependency.path + "\""; write(", "); write(text); }); @@ -4080,6 +4094,12 @@ module ts { write(", "); emit(imp.name); }); + forEach(node.amdDependencies, amdDependency => { + if (amdDependency.name) { + write(", "); + write(amdDependency.name); + } + }); write(") {"); increaseIndent(); emitCaptureThisForNodeIfNecessary(node); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e8c6bb9c9db..630418dc485 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4749,7 +4749,7 @@ module ts { function processReferenceComments(sourceFile: SourceFile): void { var triviaScanner = createScanner(sourceFile.languageVersion, /*skipTrivia*/false, sourceText); var referencedFiles: FileReference[] = []; - var amdDependencies: string[] = []; + var amdDependencies: {path: string; name: string}[] = []; var amdModuleName: string; // Keep scanning all the leading trivia in the file until we get to something that @@ -4789,10 +4789,17 @@ module ts { amdModuleName = amdModuleNameMatchResult[2]; } - var amdDependencyRegEx = /^\/\/\/\s*; public endOfFileToken: Node; - public amdDependencies: string[]; + public amdDependencies: {name: string; path: string}[]; public amdModuleName: string; public referencedFiles: FileReference[]; diff --git a/tests/baselines/reference/amdDependencyCommentName1.errors.txt b/tests/baselines/reference/amdDependencyCommentName1.errors.txt new file mode 100644 index 00000000000..081c86b25e9 --- /dev/null +++ b/tests/baselines/reference/amdDependencyCommentName1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/amdDependencyCommentName1.ts(3,21): error TS2307: Cannot find external module 'm2'. + + +==== tests/cases/compiler/amdDependencyCommentName1.ts (1 errors) ==== + /// + + import m1 = require("m2") + ~~~~ +!!! error TS2307: Cannot find external module 'm2'. + m1.f(); \ No newline at end of file diff --git a/tests/baselines/reference/amdDependencyCommentName1.js b/tests/baselines/reference/amdDependencyCommentName1.js new file mode 100644 index 00000000000..03336536378 --- /dev/null +++ b/tests/baselines/reference/amdDependencyCommentName1.js @@ -0,0 +1,10 @@ +//// [amdDependencyCommentName1.ts] +/// + +import m1 = require("m2") +m1.f(); + +//// [amdDependencyCommentName1.js] +/// +var m1 = require("m2"); +m1.f(); diff --git a/tests/baselines/reference/amdDependencyCommentName2.errors.txt b/tests/baselines/reference/amdDependencyCommentName2.errors.txt new file mode 100644 index 00000000000..137f9335ff7 --- /dev/null +++ b/tests/baselines/reference/amdDependencyCommentName2.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/amdDependencyCommentName2.ts(3,21): error TS2307: Cannot find external module 'm2'. + + +==== tests/cases/compiler/amdDependencyCommentName2.ts (1 errors) ==== + /// + + import m1 = require("m2") + ~~~~ +!!! error TS2307: Cannot find external module 'm2'. + m1.f(); \ No newline at end of file diff --git a/tests/baselines/reference/amdDependencyCommentName2.js b/tests/baselines/reference/amdDependencyCommentName2.js new file mode 100644 index 00000000000..d923df80195 --- /dev/null +++ b/tests/baselines/reference/amdDependencyCommentName2.js @@ -0,0 +1,11 @@ +//// [amdDependencyCommentName2.ts] +/// + +import m1 = require("m2") +m1.f(); + +//// [amdDependencyCommentName2.js] +/// +define(["require", "exports", "m2", "bar"], function (require, exports, m1, b) { + m1.f(); +}); diff --git a/tests/baselines/reference/amdDependencyCommentName3.errors.txt b/tests/baselines/reference/amdDependencyCommentName3.errors.txt new file mode 100644 index 00000000000..1fa997b9c99 --- /dev/null +++ b/tests/baselines/reference/amdDependencyCommentName3.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/amdDependencyCommentName3.ts(5,21): error TS2307: Cannot find external module 'm2'. + + +==== tests/cases/compiler/amdDependencyCommentName3.ts (1 errors) ==== + /// + /// + /// + + import m1 = require("m2") + ~~~~ +!!! error TS2307: Cannot find external module 'm2'. + m1.f(); \ No newline at end of file diff --git a/tests/baselines/reference/amdDependencyCommentName3.js b/tests/baselines/reference/amdDependencyCommentName3.js new file mode 100644 index 00000000000..76e00e1e0cc --- /dev/null +++ b/tests/baselines/reference/amdDependencyCommentName3.js @@ -0,0 +1,15 @@ +//// [amdDependencyCommentName3.ts] +/// +/// +/// + +import m1 = require("m2") +m1.f(); + +//// [amdDependencyCommentName3.js] +/// +/// +/// +define(["require", "exports", "m2", "bar", "goo", "foo"], function (require, exports, m1, b, c) { + m1.f(); +}); diff --git a/tests/cases/compiler/amdDependencyCommentName1.ts b/tests/cases/compiler/amdDependencyCommentName1.ts new file mode 100644 index 00000000000..958d7ff825f --- /dev/null +++ b/tests/cases/compiler/amdDependencyCommentName1.ts @@ -0,0 +1,5 @@ +//@module: commonjs +/// + +import m1 = require("m2") +m1.f(); \ No newline at end of file diff --git a/tests/cases/compiler/amdDependencyCommentName2.ts b/tests/cases/compiler/amdDependencyCommentName2.ts new file mode 100644 index 00000000000..6cd7d5531f1 --- /dev/null +++ b/tests/cases/compiler/amdDependencyCommentName2.ts @@ -0,0 +1,5 @@ +//@module: amd +/// + +import m1 = require("m2") +m1.f(); \ No newline at end of file diff --git a/tests/cases/compiler/amdDependencyCommentName3.ts b/tests/cases/compiler/amdDependencyCommentName3.ts new file mode 100644 index 00000000000..4800aed9639 --- /dev/null +++ b/tests/cases/compiler/amdDependencyCommentName3.ts @@ -0,0 +1,7 @@ +//@module: amd +/// +/// +/// + +import m1 = require("m2") +m1.f(); \ No newline at end of file