diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 40ac887e36e..10183d47763 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5556,16 +5556,38 @@ module ts { } } + function getFirstNonAmbientClassOrFunctionDeclaration(symbol: Symbol): Declaration { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + if ((declaration.kind === SyntaxKind.ClassDeclaration || (declaration.kind === SyntaxKind.FunctionDeclaration && (declaration).body)) && !isInAmbientContext(declaration)) { + return declaration; + } + } + return undefined; + } + function checkModuleDeclaration(node: ModuleDeclaration) { checkDeclarationModifiers(node); + var symbol = getSymbolOfNode(node); + if (symbol.flags & SymbolFlags.ValueModule && symbol.declarations.length > 1 && !isInAmbientContext(node)) { + var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); + if (classOrFunc) { + if (getSourceFileOfNode(node) !== getSourceFileOfNode(classOrFunc)) { + error(node.name, Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); + } + else if (node.pos < classOrFunc.pos) { + error(node.name, Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + } + } + } if (node.name.kind === SyntaxKind.StringLiteral) { if (!isGlobalSourceFile(node.parent)) { - error(node, Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); + error(node.name, Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); } if (isExternalModuleNameRelative(node.name.text)) { - error(node, Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); + error(node.name, Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); } - var symbol = getSymbolOfNode(node); } checkSourceElement(node.body); } diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 59bfe4a60f6..d9e35f29086 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -279,6 +279,8 @@ module ts { Interface_0_incorrectly_extends_interface_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Interface '{0}' incorrectly extends interface '{1}'." }, Ambient_external_modules_cannot_be_nested_in_other_modules: { code: -9999999, category: DiagnosticCategory.Error, key: "Ambient external modules cannot be nested in other modules." }, Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: -9999999, category: DiagnosticCategory.Error, key: "Import declarations in an internal module cannot reference an external module." }, + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: DiagnosticCategory.Error, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: DiagnosticCategory.Error, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: -9999999, category: DiagnosticCategory.Error, key: "Cannot compile external modules unless the '--module' flag is provided." }, Import_declaration_conflicts_with_local_declaration_of_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Import declaration conflicts with local declaration of '{0}'" }, Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: -9999999, category: DiagnosticCategory.Error, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index e3c54b96e8f..92b8d1a3e0e 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1140,6 +1140,14 @@ "category": "Error", "code": -9999999 }, + "A module declaration cannot be in a different file from a class or function with which it is merged": { + "category": "Error", + "code": -9999999 + }, + "A module declaration cannot be located prior to a class or function with which it is merged": { + "category": "Error", + "code": -9999999 + }, "Cannot compile external modules unless the '--module' flag is provided.": { "category": "Error", "code": -9999999 diff --git a/tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRoot.errors.txt b/tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRoot.errors.txt new file mode 100644 index 00000000000..d47fc51f4e8 --- /dev/null +++ b/tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRoot.errors.txt @@ -0,0 +1,41 @@ +==== tests/cases/conformance/internalModules/DeclarationMerging/class.ts (0 errors) ==== + module X.Y { + export class Point { + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } + x: number; + y: number; + } + } + +==== tests/cases/conformance/internalModules/DeclarationMerging/module.ts (1 errors) ==== + module X.Y { + export module Point { + ~~~~~ +!!! A module declaration cannot be in a different file from a class or function with which it is merged + export var Origin = new Point(0, 0); + } + } + +==== tests/cases/conformance/internalModules/DeclarationMerging/test.ts (0 errors) ==== + //var cl: { x: number; y: number; } + var cl = new X.Y.Point(1,1); + var cl = X.Y.Point.Origin; // error not expected here same as bug 83996 ? + + +==== tests/cases/conformance/internalModules/DeclarationMerging/simple.ts (0 errors) ==== + class A { + id: string; + } + + module A { + export var Instance = new A(); + } + + // ensure merging works as expected + var a = A.Instance; + var a = new A(); + var a: { id: string }; + \ No newline at end of file diff --git a/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.errors.txt b/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.errors.txt index f2168a9056f..1a9ea82a006 100644 --- a/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.errors.txt +++ b/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.errors.txt @@ -5,9 +5,11 @@ } } -==== tests/cases/conformance/internalModules/DeclarationMerging/module.ts (0 errors) ==== +==== tests/cases/conformance/internalModules/DeclarationMerging/module.ts (1 errors) ==== module A { export module Point { + ~~~~~ +!!! A module declaration cannot be in a different file from a class or function with which it is merged export var Origin = { x: 0, y: 0 }; } } diff --git a/tests/baselines/reference/ModuleAndClassWithSameNameAndCommonRoot.errors.txt b/tests/baselines/reference/ModuleAndClassWithSameNameAndCommonRoot.errors.txt new file mode 100644 index 00000000000..f8e4561e9a7 --- /dev/null +++ b/tests/baselines/reference/ModuleAndClassWithSameNameAndCommonRoot.errors.txt @@ -0,0 +1,34 @@ +==== tests/cases/conformance/internalModules/DeclarationMerging/module.ts (1 errors) ==== + module X.Y { + export module Point { + ~~~~~ +!!! A module declaration cannot be in a different file from a class or function with which it is merged + export var Origin = new Point(0, 0); + } + } + +==== tests/cases/conformance/internalModules/DeclarationMerging/classPoint.ts (0 errors) ==== + module X.Y { + // duplicate identifier + export class Point { + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } + x: number; + y: number; + } + } + +==== tests/cases/conformance/internalModules/DeclarationMerging/simple.ts (1 errors) ==== + module A { + ~ +!!! A module declaration cannot be located prior to a class or function with which it is merged + export var Instance = new A(); + } + + // duplicate identifier + class A { + id: string; + } + \ No newline at end of file diff --git a/tests/baselines/reference/ModuleAndFunctionWithSameNameAndCommonRoot.errors.txt b/tests/baselines/reference/ModuleAndFunctionWithSameNameAndCommonRoot.errors.txt new file mode 100644 index 00000000000..707e0dec513 --- /dev/null +++ b/tests/baselines/reference/ModuleAndFunctionWithSameNameAndCommonRoot.errors.txt @@ -0,0 +1,32 @@ +==== tests/cases/conformance/internalModules/DeclarationMerging/module.ts (1 errors) ==== + module A { + export module Point { + ~~~~~ +!!! A module declaration cannot be in a different file from a class or function with which it is merged + export var Origin = { x: 0, y: 0 }; + } + } + +==== tests/cases/conformance/internalModules/DeclarationMerging/function.ts (0 errors) ==== + module A { + // duplicate identifier error + export function Point() { + return { x: 0, y: 0 }; + } + } + +==== tests/cases/conformance/internalModules/DeclarationMerging/simple.ts (1 errors) ==== + module B { + + export module Point { + ~~~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged + export var Origin = { x: 0, y: 0 }; + } + + // duplicate identifier error + export function Point() { + return { x: 0, y: 0 }; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/ambientErrors.errors.txt b/tests/baselines/reference/ambientErrors.errors.txt index 07c0259860b..146f9322100 100644 --- a/tests/baselines/reference/ambientErrors.errors.txt +++ b/tests/baselines/reference/ambientErrors.errors.txt @@ -72,13 +72,13 @@ // Ambient external module not in the global module module M2 { declare module 'nope' { } - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! Ambient external modules cannot be nested in other modules. } // Ambient external module with a string literal name that isn't a top level external module name declare module '../foo' { } - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~ !!! Ambient external module declaration cannot specify relative module name. // Ambient external module with export assignment and other exported members diff --git a/tests/baselines/reference/ambientExternalModuleInAnotherExternalModule.errors.txt b/tests/baselines/reference/ambientExternalModuleInAnotherExternalModule.errors.txt index 769f440b2db..d5fd7ed2296 100644 --- a/tests/baselines/reference/ambientExternalModuleInAnotherExternalModule.errors.txt +++ b/tests/baselines/reference/ambientExternalModuleInAnotherExternalModule.errors.txt @@ -4,12 +4,10 @@ export = D; declare module "ext" { - ~~~~~~~~~~~~~~~~~~~~~~ - export class C { } - ~~~~~~~~~~~~~~~~~~~~~~ - } - ~ + ~~~~~ !!! Ambient external modules cannot be nested in other modules. + export class C { } + } // Cannot resolve this ext module reference import ext = require("ext"); diff --git a/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.errors.txt b/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.errors.txt index 290199b0242..fba44282cc3 100644 --- a/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.errors.txt +++ b/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.errors.txt @@ -1,16 +1,12 @@ ==== tests/cases/compiler/ambientExternalModuleWithRelativeModuleName.ts (2 errors) ==== declare module "./relativeModule" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - var x: string; - ~~~~~~~~~~~~~~~~~~ - } - ~ + ~~~~~~~~~~~~~~~~~~ !!! Ambient external module declaration cannot specify relative module name. + var x: string; + } declare module ".\\relativeModule" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ +!!! Ambient external module declaration cannot specify relative module name. var x: string; - ~~~~~~~~~~~~~~~~~~ - } - ~ -!!! Ambient external module declaration cannot specify relative module name. \ No newline at end of file + } \ No newline at end of file diff --git a/tests/baselines/reference/augmentedTypesModules.errors.txt b/tests/baselines/reference/augmentedTypesModules.errors.txt index b33ee75570d..6975ee37159 100644 --- a/tests/baselines/reference/augmentedTypesModules.errors.txt +++ b/tests/baselines/reference/augmentedTypesModules.errors.txt @@ -1,4 +1,4 @@ -==== tests/cases/compiler/augmentedTypesModules.ts (3 errors) ==== +==== tests/cases/compiler/augmentedTypesModules.ts (6 errors) ==== // module then var module m1 { } var m1 = 1; // Should be allowed @@ -30,9 +30,13 @@ function m2() { }; // ok since the module is not instantiated module m2a { var y = 2; } + ~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged function m2a() { }; // error since the module is instantiated module m2b { export var y = 2; } + ~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged function m2b() { }; // error since the module is instantiated // should be errors to have function first @@ -56,6 +60,8 @@ class m3 { } // ok since the module is not instantiated module m3a { var y = 2; } + ~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged class m3a { foo() { } } // error, class isn't ambient or declared before the module class m3b { foo() { } } diff --git a/tests/baselines/reference/augmentedTypesModules2.errors.txt b/tests/baselines/reference/augmentedTypesModules2.errors.txt new file mode 100644 index 00000000000..e25682fa39e --- /dev/null +++ b/tests/baselines/reference/augmentedTypesModules2.errors.txt @@ -0,0 +1,35 @@ +==== tests/cases/compiler/augmentedTypesModules2.ts (3 errors) ==== + // module then function + module m2 { } + function m2() { }; // ok since the module is not instantiated + + module m2a { var y = 2; } + ~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged + function m2a() { }; // error since the module is instantiated + + module m2b { export var y = 2; } + ~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged + function m2b() { }; // error since the module is instantiated + + function m2c() { }; + module m2c { export var y = 2; } + + module m2cc { export var y = 2; } + ~~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged + function m2cc() { }; // error to have module first + + module m2d { } + declare function m2d(): void; + + declare function m2e(): void; + module m2e { } + + function m2f() { }; + module m2f { export interface I { foo(): void } } + + function m2g() { }; + module m2g { export class C { foo() { } } } + \ No newline at end of file diff --git a/tests/baselines/reference/augmentedTypesModules3.errors.txt b/tests/baselines/reference/augmentedTypesModules3.errors.txt new file mode 100644 index 00000000000..aa5bc0336a4 --- /dev/null +++ b/tests/baselines/reference/augmentedTypesModules3.errors.txt @@ -0,0 +1,9 @@ +==== tests/cases/compiler/augmentedTypesModules3.ts (1 errors) ==== + //// module then class + module m3 { } + class m3 { } // ok since the module is not instantiated + + module m3a { var y = 2; } + ~~~ +!!! A module declaration cannot be located prior to a class or function with which it is merged + class m3a { foo() { } } // error, class isn't ambient or declared before the module \ No newline at end of file diff --git a/tests/baselines/reference/cloduleSplitAcrossFiles.errors.txt b/tests/baselines/reference/cloduleSplitAcrossFiles.errors.txt new file mode 100644 index 00000000000..4d33163d693 --- /dev/null +++ b/tests/baselines/reference/cloduleSplitAcrossFiles.errors.txt @@ -0,0 +1,10 @@ +==== tests/cases/compiler/cloduleSplitAcrossFiles_class.ts (0 errors) ==== + class D { } + +==== tests/cases/compiler/cloduleSplitAcrossFiles_module.ts (1 errors) ==== + module D { + ~ +!!! A module declaration cannot be in a different file from a class or function with which it is merged + export var y = "hi"; + } + D.y; \ No newline at end of file diff --git a/tests/baselines/reference/funduleSplitAcrossFiles.errors.txt b/tests/baselines/reference/funduleSplitAcrossFiles.errors.txt new file mode 100644 index 00000000000..2d70aed4a3e --- /dev/null +++ b/tests/baselines/reference/funduleSplitAcrossFiles.errors.txt @@ -0,0 +1,10 @@ +==== tests/cases/compiler/funduleSplitAcrossFiles_function.ts (0 errors) ==== + function D() { } + +==== tests/cases/compiler/funduleSplitAcrossFiles_module.ts (1 errors) ==== + module D { + ~ +!!! A module declaration cannot be in a different file from a class or function with which it is merged + export var y = "hi"; + } + D.y; \ No newline at end of file diff --git a/tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.errors.txt b/tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.errors.txt index a6a88424429..9cb444661b9 100644 --- a/tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.errors.txt +++ b/tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.errors.txt @@ -5,12 +5,10 @@ ~~~~~~~~~~~~~~~~ !!! Cannot find external module 'externalModule'. declare module "m1" { - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~ +!!! Ambient external modules cannot be nested in other modules. import im2 = require("externalModule"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ !!! Cannot find external module 'externalModule'. } - ~ -!!! Ambient external modules cannot be nested in other modules. \ No newline at end of file diff --git a/tests/baselines/reference/invalidNestedModules.errors.txt b/tests/baselines/reference/invalidNestedModules.errors.txt index 73a9d1e8f7f..31e8ad29177 100644 --- a/tests/baselines/reference/invalidNestedModules.errors.txt +++ b/tests/baselines/reference/invalidNestedModules.errors.txt @@ -1,5 +1,7 @@ -==== tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules.ts (1 errors) ==== +==== tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules.ts (2 errors) ==== module A.B.C { + ~ +!!! A module declaration cannot be located prior to a class or function with which it is merged export class Point { x: number; y: number; diff --git a/tests/baselines/reference/nameCollisions.errors.txt b/tests/baselines/reference/nameCollisions.errors.txt index 21246658bc2..f6ac8c0bd67 100644 --- a/tests/baselines/reference/nameCollisions.errors.txt +++ b/tests/baselines/reference/nameCollisions.errors.txt @@ -1,4 +1,4 @@ -==== tests/cases/compiler/nameCollisions.ts (8 errors) ==== +==== tests/cases/compiler/nameCollisions.ts (9 errors) ==== module T { var x = 2; @@ -18,6 +18,8 @@ !!! Duplicate identifier 'z'. module y { + ~ +!!! A module declaration cannot be located prior to a class or function with which it is merged var b; } diff --git a/tests/baselines/reference/privacyGloImport.errors.txt b/tests/baselines/reference/privacyGloImport.errors.txt index fdba7d6b441..38d31860a5b 100644 --- a/tests/baselines/reference/privacyGloImport.errors.txt +++ b/tests/baselines/reference/privacyGloImport.errors.txt @@ -23,36 +23,24 @@ declare export module "m1_M3_public" { ~~~~~~ !!! 'export' modifier must precede 'declare' modifier. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } declare module "m1_M4_private" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } import m1_im1_private = m1_M1_public; export var m1_im1_private_v1_public = m1_im1_private.c1; @@ -177,24 +165,21 @@ declare module "abc" { ~~~~~~~ !!! A 'declare' modifier cannot be used in an already ambient context. - ~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ + ~~~~~ !!! Ambient external modules cannot be nested in other modules. + } } module m2 { module "abc2" { - ~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ + ~~~~~~ !!! Ambient external modules cannot be nested in other modules. + } } module "abc3" { - ~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~~ !!! Ambient external modules cannot be nested in other modules. + } } module m2 { diff --git a/tests/baselines/reference/privacyImport.errors.txt b/tests/baselines/reference/privacyImport.errors.txt index 5758d6c5107..bb22a0c398c 100644 --- a/tests/baselines/reference/privacyImport.errors.txt +++ b/tests/baselines/reference/privacyImport.errors.txt @@ -21,36 +21,24 @@ } export declare module "m1_M3_public" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } declare module "m1_M4_private" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } import m1_im1_private = m1_M1_public; export var m1_im1_private_v1_public = m1_im1_private.c1; @@ -133,36 +121,24 @@ } export declare module "m2_M3_public" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } declare module "m2_M4_private" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } import m1_im1_private = m2_M1_public; export var m1_im1_private_v1_public = m1_im1_private.c1; @@ -235,20 +211,14 @@ } export declare module "glo_M2_public" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~ - } - ~ + ~~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } export module glo_M3_private { export class c1 { @@ -261,20 +231,14 @@ } export declare module "glo_M4_private" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export function f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~~ - export class c1 { - ~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ - export var v1: { new (): c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - export var v2: c1; - ~~~~~~~~~~~~~~~~~~~~~~ - } - ~ + ~~~~~~~~~~~~~~~~ !!! Ambient external modules cannot be nested in other modules. + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } import glo_im1_private = glo_M1_public; @@ -334,217 +298,135 @@ export declare module "use_glo_M1_public" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ +!!! Ambient external modules cannot be nested in other modules. import use_glo_M1_public = glo_M1_public; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M1_public_v2_public: use_glo_M1_public; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ !!! Cannot find name 'use_glo_M1_public'. export var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M1_public_v2_private: use_glo_M1_public; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ !!! Cannot find name 'use_glo_M1_public'. var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - import use_glo_M2_public = require("glo_M2_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ !!! Cannot find external module 'glo_M2_public'. export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M2_public_v2_public: use_glo_M2_public; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M2_public_v2_private: use_glo_M2_public; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - module m2 { - ~~~~~~~~~~~~~~~ import errorImport = require("glo_M2_public"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! Import declarations in an internal module cannot reference an external module. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ import nonerrorImport = glo_M1_public; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - module m5 { - ~~~~~~~~~~~~~~~~~~~ import m5_errorImport = require("glo_M2_public"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! Import declarations in an internal module cannot reference an external module. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ import m5_nonerrorImport = glo_M1_public; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } - ~~~~~~~~~ } - ~~~~~ } - ~ -!!! Ambient external modules cannot be nested in other modules. declare module "use_glo_M3_private" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ +!!! Ambient external modules cannot be nested in other modules. import use_glo_M3_private = glo_M3_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M3_private_v1_public: { new (): use_glo_M3_private.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M3_private_v2_public: use_glo_M3_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ !!! Cannot find name 'use_glo_M3_private'. export var use_glo_M3_private_v3_public: () => use_glo_M3_private.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M3_private_v1_private: { new (): use_glo_M3_private.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M3_private_v2_private: use_glo_M3_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ !!! Cannot find name 'use_glo_M3_private'. var use_glo_M3_private_v3_private: () => use_glo_M3_private.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - import use_glo_M4_private = require("glo_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ !!! Cannot find external module 'glo_M4_private'. export var use_glo_M4_private_v1_public: { new (): use_glo_M4_private.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M4_private_v2_public: use_glo_M4_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export var use_glo_M4_private_v3_public: () => use_glo_M4_private.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M4_private_v1_private: { new (): use_glo_M4_private.c1; }; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M4_private_v2_private: use_glo_M4_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var use_glo_M4_private_v3_private: () => use_glo_M4_private.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - module m2 { - ~~~~~~~~~~~~~~~ import errorImport = require("glo_M4_private"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! Import declarations in an internal module cannot reference an external module. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ import nonerrorImport = glo_M3_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - module m5 { - ~~~~~~~~~~~~~~~~~~~ import m5_errorImport = require("glo_M4_private"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! Import declarations in an internal module cannot reference an external module. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ import m5_nonerrorImport = glo_M3_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } - ~~~~~~~~~ } - ~~~~~ } - ~ -!!! Ambient external modules cannot be nested in other modules. declare module "anotherParseError" { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ +!!! Ambient external modules cannot be nested in other modules. module m2 { - ~~~~~~~~~~~~~~~ declare module "abc" { ~~~~~~~ !!! A 'declare' modifier cannot be used in an already ambient context. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - ~~~~~~~~~ + ~~~~~ !!! Ambient external modules cannot be nested in other modules. + } } - ~~~~~ - module m2 { - ~~~~~~~~~~~~~~~ module "abc2" { - ~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~~~~~ + ~~~~~~ +!!! Ambient external modules cannot be nested in other modules. } - ~~~~~~~~~ - ~~~~~~~~~ -!!! Ambient external modules cannot be nested in other modules. } - ~~~~~ module "abc3" { - ~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~~~~~ + ~~~~~~ +!!! Ambient external modules cannot be nested in other modules. } - ~~~~~ - ~~~~~ -!!! Ambient external modules cannot be nested in other modules. } - ~ -!!! Ambient external modules cannot be nested in other modules. declare export module "anotherParseError2" { ~~~~~~ !!! 'export' modifier must precede 'declare' modifier. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ +!!! Ambient external modules cannot be nested in other modules. module m2 { - ~~~~~~~~~~~~~~~ declare module "abc" { ~~~~~~~ !!! A 'declare' modifier cannot be used in an already ambient context. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~~~~~ - ~~~~~~~~~ + ~~~~~ !!! Ambient external modules cannot be nested in other modules. + } } - ~~~~~ - module m2 { - ~~~~~~~~~~~~~~~ module "abc2" { - ~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~~~~~ + ~~~~~~ +!!! Ambient external modules cannot be nested in other modules. } - ~~~~~~~~~ - ~~~~~~~~~ -!!! Ambient external modules cannot be nested in other modules. } - ~~~~~ module "abc3" { - ~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~~~~~ + ~~~~~~ +!!! Ambient external modules cannot be nested in other modules. } - ~~~~~ - ~~~~~ -!!! Ambient external modules cannot be nested in other modules. } - ~ -!!! Ambient external modules cannot be nested in other modules. module m2 { import m3 = require("use_glo_M1_public");