diff --git a/changelog/deprecate_bad_module_name.dd b/changelog/deprecate_bad_module_name.dd new file mode 100644 index 000000000000..4ed222146e54 --- /dev/null +++ b/changelog/deprecate_bad_module_name.dd @@ -0,0 +1,48 @@ +Deprecate import module name mismatch + +Some instances of module name/import name mismatches were deprecated while others are now considered errors. + +Case 1: DEPRECATED: import a module name with a qualified name but the module being imported has no module declaration. +--- +// main.d +import foo.bar; + +// foo/bar.d +// this file is empty, it has no module declaration +--- +The above code will now print: + +$(CONSOLE Deprecated: module bar from file foo/bar.d should be imported with 'import bar;' ) + +Case 2: DEPRECATED: import a module with a qualified name that partially matches the name of the module being imported. +--- +// main.d +import foo.bar; +import foo.baz.buz; + +// foo/bar.d +module bar; + +// foo/baz/buz.d +module baz.buz; +--- +The above code will now print: + +$(CONSOLE Deprecated: module bar from file foo/bar.d should be imported with 'import bar;' +Deprecated: module baz.buz from file foo/baz/buz.d should be imported with 'import baz.buz;' ) + +Note that for this rule to apply, the shorter name must completely match the end of the longer name. + +Case 3: ERROR: import a module that matches the filename but does not match the module name. +--- +// main.d +import foo; + +// foo.d +module bar; +--- +The above code will now fail and print: + +$(CONSOLE Error: module bar from file foo.d must be imported with 'import bar;') + +Note that importing a module whose module name does not match its filename is still supported. diff --git a/src/dmd/dmodule.d b/src/dmd/dmodule.d index 58d56129878c..cc38d38a2d3f 100644 --- a/src/dmd/dmodule.d +++ b/src/dmd/dmodule.d @@ -31,6 +31,7 @@ import dmd.globals; import dmd.id; import dmd.identifier; import dmd.parse; +import dmd.root.array; import dmd.root.file; import dmd.root.filename; import dmd.root.outbuffer; @@ -514,7 +515,49 @@ extern (C++) final class Module : Package buf.printf("%s\t(%s)", ident.toChars(), m.srcfile.toChars()); message("import %s", buf.peekString()); } - m = m.parse(); + { + auto originalModule = m; + m = m.parse(); + + // verify the module name matches the imported module name + if (m is originalModule) + { + if (m.md is null) + { + // in this case there was no module declaration, this means the import + // should have no package prefix, but for now we support this with a + // depecration message for backwards compatibility + if (packages && packages.dim > 0) + m.deprecation(loc, "from file %s should be imported with 'import %s;'", + m.srcfile.name.toChars(), m.toPrettyChars()); + } + else if (!packages.opEquals(m.md.packages) || ident != m.md.id) + { + // deprecate the case when the ends of the names match + bool deprecate = false; + if (ident == m.md.id) + { + deprecate = true; + auto mdPackageCount = (m.md.packages == null) ? 0 : m.md.packages.dim; + auto packageCount = (packages == null) ? 0 : packages.dim; + for (size_t i = 1; i <= mdPackageCount && i <= packageCount; i++) + { + if (m.md.packages[mdPackageCount - i] != packages[packageCount - i]) + { + deprecate = false; + break; + } + } + } + if (deprecate) + m.deprecation(loc, "from file %s should be imported with 'import %s;'", + m.srcfile.name.toChars(), m.toPrettyChars()); + else + m.error(loc, "from file %s must be imported with 'import %s;'", + m.srcfile.name.toChars(), m.toPrettyChars()); + } + } + } // Call onImport here because if the module is going to be compiled then we // need to determine it early because it affects semantic analysis. This is diff --git a/src/dmd/root/array.d b/src/dmd/root/array.d index ac5618613a20..a08f2128c23b 100644 --- a/src/dmd/root/array.d +++ b/src/dmd/root/array.d @@ -313,3 +313,22 @@ unittest array[2] = 910; assert([123, 421, 910, 123, 1, 2, 8, 20, 4, 3] == array.asDArray); } + +/** + * Returns true if every element of $(D left) and $(D right) are equal. + * Note that an array of size 0 is considered equivalent to a `null` pointer. + * Params: + * left = pointer to array to compare + * right = pointer to array to compare + */ +bool opEquals(T)(const(Array!T)* left, const(Array!T)* right) +{ + if (left is null || left.dim == 0) + return right is null || right.dim == 0; + if (right is null || left.dim != right.dim) + return false; + foreach (i; 0 .. left.dim) + if ((*left)[i] != (*right)[i]) + return false; + return true; +} diff --git a/test/compilable/extra-files/test14894a.d b/test/compilable/extra-files/test14894a.d index 60d2017fead9..e3657d38de6e 100644 --- a/test/compilable/extra-files/test14894a.d +++ b/test/compilable/extra-files/test14894a.d @@ -1,4 +1,4 @@ -module imports.test14894a; +module test14894a; mixin template Protocol() { diff --git a/test/compilable/imports/a313templatemixin1.d b/test/compilable/imports/a313templatemixin1.d index 29c24bd8f0d5..7e120416f2b3 100644 --- a/test/compilable/imports/a313templatemixin1.d +++ b/test/compilable/imports/a313templatemixin1.d @@ -1,3 +1,4 @@ +module imports.a313templatemixin1; void bug() { } diff --git a/test/compilable/imports/a313templatemixin2.d b/test/compilable/imports/a313templatemixin2.d index 29c24bd8f0d5..ca93837668b7 100644 --- a/test/compilable/imports/a313templatemixin2.d +++ b/test/compilable/imports/a313templatemixin2.d @@ -1,3 +1,4 @@ +module imports.a313templatemixin2; void bug() { } diff --git a/test/compilable/imports/checkimports3a.d b/test/compilable/imports/checkimports3a.d index 85e6cd8c3909..926fc5363e8d 100644 --- a/test/compilable/imports/checkimports3a.d +++ b/test/compilable/imports/checkimports3a.d @@ -1 +1,2 @@ +module imports.checkimports3a; void foo() {} diff --git a/test/compilable/imports/checkimports3b.d b/test/compilable/imports/checkimports3b.d index 37ea7ae03870..d3c3c58ec4f3 100644 --- a/test/compilable/imports/checkimports3b.d +++ b/test/compilable/imports/checkimports3b.d @@ -1 +1,2 @@ +module imports.checkimports3b; private void foo(int) {} diff --git a/test/compilable/imports/checkimports3c.d b/test/compilable/imports/checkimports3c.d index 93b4ac5fe129..6a27126dd2d8 100644 --- a/test/compilable/imports/checkimports3c.d +++ b/test/compilable/imports/checkimports3c.d @@ -1 +1,2 @@ +module imports.checkimports3c; void foo(string) {} diff --git a/test/compilable/imports/fwdref12201a.d b/test/compilable/imports/fwdref12201a.d index c5b8817885c2..6316d753552e 100644 --- a/test/compilable/imports/fwdref12201a.d +++ b/test/compilable/imports/fwdref12201a.d @@ -1 +1,2 @@ +module imports.fwdref12201a; alias int FILE; diff --git a/test/compilable/imports/fwdref2_test17548.d b/test/compilable/imports/fwdref2_test17548.d index 91391bbd521f..9535afa2f288 100644 --- a/test/compilable/imports/fwdref2_test17548.d +++ b/test/compilable/imports/fwdref2_test17548.d @@ -1,9 +1,9 @@ -module fwdref2_test17548; +module imports.fwdref2_test17548; import test17548; struct S2 { void bar(int arg = .test17548.cnst) {} S1 s; - import fwdref2_test17548; + import imports.fwdref2_test17548; } diff --git a/test/compilable/imports/fwdref9514.d b/test/compilable/imports/fwdref9514.d index fe1298fbfab9..8ae3bd005e48 100644 --- a/test/compilable/imports/fwdref9514.d +++ b/test/compilable/imports/fwdref9514.d @@ -1,3 +1,4 @@ +module imports.fwdref9514; bool find9514(alias pred, R)(R range) { return true; diff --git a/test/compilable/imports/g313public.d b/test/compilable/imports/g313public.d index 29c24bd8f0d5..e96d8297a525 100644 --- a/test/compilable/imports/g313public.d +++ b/test/compilable/imports/g313public.d @@ -1,3 +1,4 @@ +module imports.g313public; void bug() { } diff --git a/test/compilable/imports/g313staticif.d b/test/compilable/imports/g313staticif.d index 29c24bd8f0d5..2df5615ebaed 100644 --- a/test/compilable/imports/g313staticif.d +++ b/test/compilable/imports/g313staticif.d @@ -1,3 +1,4 @@ +module imports.g313staticif; void bug() { } diff --git a/test/compilable/imports/g313stringmixin.d b/test/compilable/imports/g313stringmixin.d index 29c24bd8f0d5..a6e1c8edbc12 100644 --- a/test/compilable/imports/g313stringmixin.d +++ b/test/compilable/imports/g313stringmixin.d @@ -1,3 +1,4 @@ +module imports.g313stringmixin; void bug() { } diff --git a/test/compilable/imports/g313templatemixin.d b/test/compilable/imports/g313templatemixin.d index 29c24bd8f0d5..0bc5f3cc4565 100644 --- a/test/compilable/imports/g313templatemixin.d +++ b/test/compilable/imports/g313templatemixin.d @@ -1,3 +1,4 @@ +module imports.g313templatemixin; void bug() { } diff --git a/test/compilable/imports/imp16085.d b/test/compilable/imports/imp16085.d index 6b250ba59307..55dc90c33257 100644 --- a/test/compilable/imports/imp16085.d +++ b/test/compilable/imports/imp16085.d @@ -1,3 +1,4 @@ +module imports.imp16085; struct Pass { } diff --git a/test/compilable/imports/imp16085b.d b/test/compilable/imports/imp16085b.d index 4f22740dee59..83d40619d9fe 100644 --- a/test/compilable/imports/imp16085b.d +++ b/test/compilable/imports/imp16085b.d @@ -1,4 +1,5 @@ -import imp16085 : S; +module imports.imp16085b; +import imports.imp16085 : S; struct Fail { diff --git a/test/compilable/imports/protectionimp.d b/test/compilable/imports/protectionimp.d index 6c99cf325d9e..30ae3b301695 100644 --- a/test/compilable/imports/protectionimp.d +++ b/test/compilable/imports/protectionimp.d @@ -1,3 +1,4 @@ +module imports.protectionimp; private { void privF() {} diff --git a/test/compilable/imports/test11563core_bitop.d b/test/compilable/imports/test11563core_bitop.d index c808d164b2ed..431476c0d5c7 100644 --- a/test/compilable/imports/test11563core_bitop.d +++ b/test/compilable/imports/test11563core_bitop.d @@ -1 +1 @@ -module test11563core_bitop; +module imports.test11563core_bitop; diff --git a/test/compilable/imports/test15857a.d b/test/compilable/imports/test15857a.d index 9362e06143e6..524a50f289b4 100644 --- a/test/compilable/imports/test15857a.d +++ b/test/compilable/imports/test15857a.d @@ -1,2 +1,3 @@ +module imports.test15857a; public import imports.test15857b; public import imports.test15857c; diff --git a/test/compilable/imports/test15857b.d b/test/compilable/imports/test15857b.d index 511ef9f9a77b..6f03e2ad8e57 100644 --- a/test/compilable/imports/test15857b.d +++ b/test/compilable/imports/test15857b.d @@ -1 +1,2 @@ +module imports.test15857b; void bar15857(int) {} diff --git a/test/compilable/imports/test15857c.d b/test/compilable/imports/test15857c.d index 8652d8ea26d3..3c50a38df07b 100644 --- a/test/compilable/imports/test15857c.d +++ b/test/compilable/imports/test15857c.d @@ -1 +1,2 @@ +module imports.test15857c; void bar15857(string) {} diff --git a/test/compilable/imports/test71.d b/test/compilable/imports/test71.d index 1e91b3fcb12e..4380b83219f8 100644 --- a/test/compilable/imports/test71.d +++ b/test/compilable/imports/test71.d @@ -1,4 +1,4 @@ -module imports_test71; +module imports.test71; import imports = object; void foo() diff --git a/test/compilable/test15925.d b/test/compilable/test15925.d index 638444883258..d7f5ede55bcd 100644 --- a/test/compilable/test15925.d +++ b/test/compilable/test15925.d @@ -1,8 +1,9 @@ -/* REQUIRED_ARGS: -transition=import -transition=checkimports +/* REQUIRED_ARGS: -transition=import -transition=checkimports -Icompilable/imports PERMUTE_ARGS: TEST_OUTPUT: --- -compilable/test15925.d(17): Deprecation: local import search method found variable `imp15925.X` instead of nothing +compilable/test15925.d(12): Deprecation: module `imp15925` from file compilable/imports/imp15925.d should be imported with 'import imp15925;' +compilable/test15925.d(18): Deprecation: local import search method found variable `imp15925.X` instead of nothing --- */ diff --git a/test/compilable/test313f.d b/test/compilable/test313f.d index e758e37c9dbf..bdbfa374d5d4 100644 --- a/test/compilable/test313f.d +++ b/test/compilable/test313f.d @@ -1,7 +1,8 @@ // REQUIRED_ARGS: -de -import imports.f313; +// EXTRA_SOURCES: imports/f313.d +import foo.bar; void test() { - imports.f313.bug(); + foo.bar.bug(); } diff --git a/test/compilable/test314.d b/test/compilable/test314.d index b7c15e39ca58..707f066eab74 100644 --- a/test/compilable/test314.d +++ b/test/compilable/test314.d @@ -1,11 +1,12 @@ // REQUIRED_ARGS: -de +// EXTRA_SOURCES: imports/a314.d module imports.test314; // package imports -import imports.a314; +import imports.pkg.a314; void main() { - imports.a314.bug("This should work.\n"); + imports.pkg.a314.bug("This should work.\n"); renamed.bug("This should work.\n"); bug("This should work.\n"); } diff --git a/test/d_do_test.d b/test/d_do_test.d index f9665a04d176..d4e6caaccb64 100755 --- a/test/d_do_test.d +++ b/test/d_do_test.d @@ -459,24 +459,45 @@ bool collectExtraSources (in string input_dir, in string output_dir, in string[] } // compare output string to reference string, but ignore places -// marked by $n$ that contain compiler generated unique numbers +// marked by $n$ that contain compiler generated unique numbers and +// also ignore dir seperators '/' bool compareOutput(string output, string refoutput) { import std.ascii : digits; import std.utf : byCodeUnit; for ( ; ; ) { + bool skipDirSeparator = false; auto pos = refoutput.indexOf("$n$"); if (pos < 0) - return refoutput == output; + { + pos = refoutput.indexOf("/"); + if (pos < 0) + { + pos = refoutput.indexOf("\\"); + if (pos < 0) + return refoutput == output; + } + skipDirSeparator = true; + } if (output.length < pos) return false; if (refoutput[0..pos] != output[0..pos]) return false; - refoutput = refoutput[pos + 3 ..$]; - output = output[pos..$]; - auto p = output.byCodeUnit.countUntil!(e => !digits.canFind(e)); - output = output[p..$]; + if (skipDirSeparator) + { + refoutput = refoutput[pos + 1 .. $]; + if (output[pos] != '/' && output[pos] != '\\') + return false; + output = output[pos + 1 .. $]; + } + else + { + refoutput = refoutput[pos + 3 ..$]; + output = output[pos..$]; + auto p = output.byCodeUnit.countUntil!(e => !digits.canFind(e)); + output = output[p..$]; + } } } diff --git a/test/fail_compilation/badimport.d b/test/fail_compilation/badimport.d new file mode 100644 index 000000000000..fb0a4952f7d0 --- /dev/null +++ b/test/fail_compilation/badimport.d @@ -0,0 +1,10 @@ +/* +EXTRA_SOURCES: imports/nomodname.d +REQUIRED_ARGS: -Ifail_compilation -de +PERMUTE_ARGS: +TEST_OUTPUT: +--- +fail_compilation/badimport.d(10): Error: module `nomodname` from file fail_compilation/imports/nomodname.d must be imported with 'import nomodname;' +--- +*/ +import imports.nomodname; diff --git a/test/fail_compilation/badimport2.d b/test/fail_compilation/badimport2.d new file mode 100644 index 000000000000..071445b01c81 --- /dev/null +++ b/test/fail_compilation/badimport2.d @@ -0,0 +1,10 @@ +/* +EXTRA_SOURCES: imports/incompletemodname.d +REQUIRED_ARGS: -Ifail_compilation -de +PERMUTE_ARGS: +TEST_OUTPUT: +--- +fail_compilation/badimport2.d(10): Error: module `incompletemodname` from file fail_compilation/imports/incompletemodname.d must be imported with 'import incompletemodname;' +--- +*/ +import imports.incompletemodname; diff --git a/test/fail_compilation/badimport3.d b/test/fail_compilation/badimport3.d new file mode 100644 index 000000000000..ea825e139342 --- /dev/null +++ b/test/fail_compilation/badimport3.d @@ -0,0 +1,10 @@ +/* +COMPILED_IMPORTS: imports/incompletemodname.d +REQUIRED_ARGS: -Ifail_compilation +PERMUTE_ARGS: +TEST_OUTPUT: +--- +fail_compilation/badimport3.d(10): Error: module `wrongpkg.wrongpkgname` from file fail_compilation/imports/wrongpkgname.d must be imported with 'import wrongpkg.wrongpkgname;' +--- +*/ +import imports.wrongpkgname; diff --git a/test/fail_compilation/badimport4.d b/test/fail_compilation/badimport4.d new file mode 100644 index 000000000000..acf46708c63c --- /dev/null +++ b/test/fail_compilation/badimport4.d @@ -0,0 +1,10 @@ +/* +EXRTRA_SOURCES: imports/wrong_mod_name.d +REQUIRED_ARGS: -Ifail_compilation/imports +PERMUTE_ARGS: +TEST_OUTPUT: +--- +fail_compilation/badimport4.d(10): Error: module `wrong_mod_name_bleh` from file fail_compilation/imports/wrong_mod_name.d must be imported with 'import wrong_mod_name_bleh;' +--- +*/ +import wrong_mod_name; diff --git a/test/fail_compilation/dip22b.d b/test/fail_compilation/dip22b.d index 538408ace43a..682181b662f6 100644 --- a/test/fail_compilation/dip22b.d +++ b/test/fail_compilation/dip22b.d @@ -1,8 +1,9 @@ /* +EXTRA_SOURCES: imports/dip22c.d REQUIRED_ARGS: -de TEST_OUTPUT: --- -fail_compilation/dip22b.d(12): Deprecation: `pkg.dip22c.Foo` is not visible from module `dip22` +fail_compilation/dip22b.d(13): Deprecation: `pkg.dip22c.Foo` is not visible from module `dip22` --- */ module pkg.dip22; diff --git a/test/fail_compilation/fail10528.d b/test/fail_compilation/fail10528.d index 1b26d1778c0f..f44e3ccacaa5 100644 --- a/test/fail_compilation/fail10528.d +++ b/test/fail_compilation/fail10528.d @@ -1,18 +1,18 @@ /* TEST_OUTPUT: --- -fail_compilation/fail10528.d(23): Error: module `fail10528` variable `a10528.a` is `private` -fail_compilation/fail10528.d(23): Deprecation: `a10528.a` is not visible from module `fail10528` -fail_compilation/fail10528.d(24): Error: `a10528.a` is not visible from module `fail10528` -fail_compilation/fail10528.d(26): Error: module `fail10528` enum member `a10528.b` is `private` -fail_compilation/fail10528.d(26): Deprecation: `a10528.b` is not visible from module `fail10528` -fail_compilation/fail10528.d(27): Error: `a10528.b` is not visible from module `fail10528` -fail_compilation/fail10528.d(29): Deprecation: `a10528.S.c` is not visible from module `fail10528` -fail_compilation/fail10528.d(29): Error: variable `a10528.S.c` is not accessible from module `fail10528` -fail_compilation/fail10528.d(30): Error: variable `a10528.S.c` is not accessible from module `fail10528` -fail_compilation/fail10528.d(32): Deprecation: `a10528.C.d` is not visible from module `fail10528` -fail_compilation/fail10528.d(32): Error: variable `a10528.C.d` is not accessible from module `fail10528` -fail_compilation/fail10528.d(33): Error: variable `a10528.C.d` is not accessible from module `fail10528` +fail_compilation/fail10528.d(23): Error: module `fail10528` variable `imports.a10528.a` is `private` +fail_compilation/fail10528.d(23): Deprecation: `imports.a10528.a` is not visible from module `fail10528` +fail_compilation/fail10528.d(24): Error: `imports.a10528.a` is not visible from module `fail10528` +fail_compilation/fail10528.d(26): Error: module `fail10528` enum member `imports.a10528.b` is `private` +fail_compilation/fail10528.d(26): Deprecation: `imports.a10528.b` is not visible from module `fail10528` +fail_compilation/fail10528.d(27): Error: `imports.a10528.b` is not visible from module `fail10528` +fail_compilation/fail10528.d(29): Deprecation: `imports.a10528.S.c` is not visible from module `fail10528` +fail_compilation/fail10528.d(29): Error: variable `imports.a10528.S.c` is not accessible from module `fail10528` +fail_compilation/fail10528.d(30): Error: variable `imports.a10528.S.c` is not accessible from module `fail10528` +fail_compilation/fail10528.d(32): Deprecation: `imports.a10528.C.d` is not visible from module `fail10528` +fail_compilation/fail10528.d(32): Error: variable `imports.a10528.C.d` is not accessible from module `fail10528` +fail_compilation/fail10528.d(33): Error: variable `imports.a10528.C.d` is not accessible from module `fail10528` --- */ diff --git a/test/fail_compilation/fail17625.d b/test/fail_compilation/fail17625.d index da1736656797..c91466d672a8 100644 --- a/test/fail_compilation/fail17625.d +++ b/test/fail_compilation/fail17625.d @@ -1,8 +1,8 @@ /* TEST_OUTPUT: --- -fail_compilation/fail17625.d(16): Deprecation: `b17625.boo` is not visible from module `fail17625` -fail_compilation/fail17625.d(16): Error: function `b17625.boo` is not accessible from module `fail17625` +fail_compilation/fail17625.d(16): Deprecation: `imports.b17625.boo` is not visible from module `fail17625` +fail_compilation/fail17625.d(16): Error: function `imports.b17625.boo` is not accessible from module `fail17625` --- */ diff --git a/test/fail_compilation/fail320.d b/test/fail_compilation/fail320.d index 737b337e7d55..6c2a592e9c98 100644 --- a/test/fail_compilation/fail320.d +++ b/test/fail_compilation/fail320.d @@ -1,7 +1,9 @@ /* TEST_OUTPUT: --- -fail_compilation/fail320.d(10): Error: no overload matches for `foo` +fail_compilation/fail320.d(10): Deprecation: module `fail320a` from file fail_compilation/imports/fail320a.d should be imported with 'import fail320a;' +fail_compilation/fail320.d(11): Deprecation: module `fail320b` from file fail_compilation/imports/fail320b.d should be imported with 'import fail320b;' +fail_compilation/fail320.d(12): Error: no overload matches for `foo` --- */ diff --git a/test/fail_compilation/ice10727a.d b/test/fail_compilation/ice10727a.d index a7529dc63cde..ef6455cbf23a 100644 --- a/test/fail_compilation/ice10727a.d +++ b/test/fail_compilation/ice10727a.d @@ -2,7 +2,7 @@ /* TEST_OUTPUT: --- -fail_compilation/imports/foo10727a.d(34): Error: undefined identifier `Frop` +fail_compilation/imports/foo10727a.d(36): Error: undefined identifier `Frop` --- */ diff --git a/test/fail_compilation/ice10727b.d b/test/fail_compilation/ice10727b.d index 958b50693294..0eb23e359dc7 100644 --- a/test/fail_compilation/ice10727b.d +++ b/test/fail_compilation/ice10727b.d @@ -2,7 +2,7 @@ /* TEST_OUTPUT: --- -fail_compilation/imports/foo10727b.d(25): Error: undefined identifier `Frop` +fail_compilation/imports/foo10727b.d(27): Error: undefined identifier `Frop` --- */ diff --git a/test/fail_compilation/ice11513a.d b/test/fail_compilation/ice11513a.d index 576c84550cfe..88504bd47063 100644 --- a/test/fail_compilation/ice11513a.d +++ b/test/fail_compilation/ice11513a.d @@ -1,4 +1,5 @@ /* +EXTRA_SOURCES: imports/ice11513x.d TEST_OUTPUT: --- fail_compilation/imports/ice11513x.d(1): Error: package name 'ice11513a' conflicts with usage as a module name in file fail_compilation/ice11513a.d @@ -7,4 +8,4 @@ fail_compilation/imports/ice11513x.d(1): Error: package name 'ice11513a' conflic module ice11513a; -import imports.ice11513x; +import ice11513a.imports; diff --git a/test/fail_compilation/ice11513b.d b/test/fail_compilation/ice11513b.d index dab09b87e87e..2415c9df9c5b 100644 --- a/test/fail_compilation/ice11513b.d +++ b/test/fail_compilation/ice11513b.d @@ -1,4 +1,5 @@ /* +EXTRA_SOURCES: imports/ice11513y.d TEST_OUTPUT: --- fail_compilation/imports/ice11513y.d(1): Error: package name 'ice11513b' conflicts with usage as a module name in file fail_compilation/ice11513b.d @@ -7,4 +8,4 @@ fail_compilation/imports/ice11513y.d(1): Error: package name 'ice11513b' conflic module ice11513b; -import imports.ice11513y; +import ice11513b.imports.ice11513y; diff --git a/test/fail_compilation/ice11919.d b/test/fail_compilation/ice11919.d index 52258e3566aa..d06bac4ea305 100644 --- a/test/fail_compilation/ice11919.d +++ b/test/fail_compilation/ice11919.d @@ -2,8 +2,8 @@ TEST_OUTPUT: --- fail_compilation/ice11919.d(17): Error: cannot interpret `foo` at compile time -fail_compilation/imports/a11919.d(4): Error: template instance `a11919.doBar!(Foo).doBar.zoo!(t)` error instantiating -fail_compilation/imports/a11919.d(11): instantiated from here: `doBar!(Foo)` +fail_compilation/imports/a11919.d(5): Error: template instance `imports.a11919.doBar!(Foo).doBar.zoo!(t)` error instantiating +fail_compilation/imports/a11919.d(12): instantiated from here: `doBar!(Foo)` fail_compilation/ice11919.d(25): instantiated from here: `doBar!(Bar)` --- */ diff --git a/test/fail_compilation/ice9865.d b/test/fail_compilation/ice9865.d index f8c0b98de374..809b47e89f6e 100644 --- a/test/fail_compilation/ice9865.d +++ b/test/fail_compilation/ice9865.d @@ -1,7 +1,8 @@ /* TEST_OUTPUT: --- -fail_compilation/ice9865.d(8): Error: alias `ice9865.Baz` recursive alias declaration +fail_compilation/ice9865.d(9): Deprecation: module `ice9865b` from file fail_compilation/imports/ice9865b.d should be imported with 'import ice9865b;' +fail_compilation/ice9865.d(9): Error: alias `ice9865.Baz` recursive alias declaration --- */ diff --git a/test/fail_compilation/imports/a10528.d b/test/fail_compilation/imports/a10528.d index 8d2e1dbaa777..76e71a67f7f2 100644 --- a/test/fail_compilation/imports/a10528.d +++ b/test/fail_compilation/imports/a10528.d @@ -1,3 +1,4 @@ +module imports.a10528; private enum string a = "asdfgh"; private enum { b = "asdfgh" } diff --git a/test/fail_compilation/imports/a11919.d b/test/fail_compilation/imports/a11919.d index 983147dee6d6..d6ece073e65d 100644 --- a/test/fail_compilation/imports/a11919.d +++ b/test/fail_compilation/imports/a11919.d @@ -1,3 +1,4 @@ +module imports.a11919; void doBar(T)(T t) { static if (t.tupleof.length) diff --git a/test/fail_compilation/imports/a17625.d b/test/fail_compilation/imports/a17625.d index d8a457c3e8d6..58980965ee7e 100644 --- a/test/fail_compilation/imports/a17625.d +++ b/test/fail_compilation/imports/a17625.d @@ -1,3 +1,3 @@ -module a17625; +module imports.a17625; private int boo() { return 69; } diff --git a/test/fail_compilation/imports/a17630.d b/test/fail_compilation/imports/a17630.d index c10484175d41..3bd6d55e2911 100644 --- a/test/fail_compilation/imports/a17630.d +++ b/test/fail_compilation/imports/a17630.d @@ -1,3 +1,3 @@ -module a17630; +module imports.a17630; import b17630; diff --git a/test/fail_compilation/imports/a18219.d b/test/fail_compilation/imports/a18219.d index 1a88493ef15e..d10a7134c1ff 100644 --- a/test/fail_compilation/imports/a18219.d +++ b/test/fail_compilation/imports/a18219.d @@ -1,4 +1,4 @@ -module a18219; +module imports.a18219; struct AST { diff --git a/test/fail_compilation/imports/a18243.d b/test/fail_compilation/imports/a18243.d index 73df7511cebc..002f853fea0b 100644 --- a/test/fail_compilation/imports/a18243.d +++ b/test/fail_compilation/imports/a18243.d @@ -1,4 +1,4 @@ -module a18243; +module imports.a18243; import std.math : isNaN; diff --git a/test/fail_compilation/imports/b17625.d b/test/fail_compilation/imports/b17625.d index 02946b0c506e..6c212c6ac450 100644 --- a/test/fail_compilation/imports/b17625.d +++ b/test/fail_compilation/imports/b17625.d @@ -1,3 +1,3 @@ -module b17625; +module imports.b17625; private int boo() { return 45; } diff --git a/test/fail_compilation/imports/dip22b.d b/test/fail_compilation/imports/dip22b.d index 1e0e526ca88a..b5551458969d 100644 --- a/test/fail_compilation/imports/dip22b.d +++ b/test/fail_compilation/imports/dip22b.d @@ -1,3 +1,3 @@ module imports.dip22b; // this public import only exports symbols that are visible within this module -public import imports.dip22c; +public import pkg.dip22c; diff --git a/test/fail_compilation/imports/foo10727a.d b/test/fail_compilation/imports/foo10727a.d index af0f1006cc86..d14002e982b6 100644 --- a/test/fail_compilation/imports/foo10727a.d +++ b/test/fail_compilation/imports/foo10727a.d @@ -1,3 +1,5 @@ +module imports.foo10727a; + struct CirBuff(T) { import imports.stdtraits10727 : isArray; diff --git a/test/fail_compilation/imports/foo10727b.d b/test/fail_compilation/imports/foo10727b.d index 4c51cac7b941..dbeb2cc90534 100644 --- a/test/fail_compilation/imports/foo10727b.d +++ b/test/fail_compilation/imports/foo10727b.d @@ -1,3 +1,5 @@ +module imports.foo10727b; + struct CirBuff(T) { import imports.stdtraits10727 : isArray; diff --git a/test/fail_compilation/imports/incompletemodname.d b/test/fail_compilation/imports/incompletemodname.d new file mode 100644 index 000000000000..11001eec0a6e --- /dev/null +++ b/test/fail_compilation/imports/incompletemodname.d @@ -0,0 +1,3 @@ +// The point of this module is that it should be called imports.incompletemodname +// but it omits the "imports" in it's name. +module incompletemodname; diff --git a/test/fail_compilation/imports/nomodname.d b/test/fail_compilation/imports/nomodname.d new file mode 100644 index 000000000000..e6a3f5e5e1ed --- /dev/null +++ b/test/fail_compilation/imports/nomodname.d @@ -0,0 +1 @@ +// intentionally no module declaration diff --git a/test/fail_compilation/imports/stdtraits10727.d b/test/fail_compilation/imports/stdtraits10727.d index 7c56120fc1a1..81fe88925dff 100644 --- a/test/fail_compilation/imports/stdtraits10727.d +++ b/test/fail_compilation/imports/stdtraits10727.d @@ -1,3 +1,5 @@ +module imports.stdtraits10727; + template StaticArrayTypeOf(T) { inout(U[n]) idx(U, size_t n)( inout(U[n]) ); diff --git a/test/fail_compilation/imports/test13152a.d b/test/fail_compilation/imports/test13152a.d index a91ff0df7853..f285efb30bd6 100644 --- a/test/fail_compilation/imports/test13152a.d +++ b/test/fail_compilation/imports/test13152a.d @@ -1,3 +1,4 @@ +module imports.test13152a; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152b.d b/test/fail_compilation/imports/test13152b.d index a91ff0df7853..0a91e3d31cae 100644 --- a/test/fail_compilation/imports/test13152b.d +++ b/test/fail_compilation/imports/test13152b.d @@ -1,3 +1,4 @@ +module imports.test13152b; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152c.d b/test/fail_compilation/imports/test13152c.d index a91ff0df7853..8811b78c35c1 100644 --- a/test/fail_compilation/imports/test13152c.d +++ b/test/fail_compilation/imports/test13152c.d @@ -1,3 +1,4 @@ +module imports.test13152c; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152d.d b/test/fail_compilation/imports/test13152d.d index a91ff0df7853..4ebbbe791843 100644 --- a/test/fail_compilation/imports/test13152d.d +++ b/test/fail_compilation/imports/test13152d.d @@ -1,3 +1,4 @@ +module imports.test13152d; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152e.d b/test/fail_compilation/imports/test13152e.d index a91ff0df7853..db7a927e5aa5 100644 --- a/test/fail_compilation/imports/test13152e.d +++ b/test/fail_compilation/imports/test13152e.d @@ -1,3 +1,4 @@ +module imports.test13152e; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152f.d b/test/fail_compilation/imports/test13152f.d index a91ff0df7853..f0970efc1edd 100644 --- a/test/fail_compilation/imports/test13152f.d +++ b/test/fail_compilation/imports/test13152f.d @@ -1,3 +1,4 @@ +module imports.test13152f; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152g.d b/test/fail_compilation/imports/test13152g.d index a91ff0df7853..2e60fdd34599 100644 --- a/test/fail_compilation/imports/test13152g.d +++ b/test/fail_compilation/imports/test13152g.d @@ -1,3 +1,4 @@ +module imports.test13152g; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152h.d b/test/fail_compilation/imports/test13152h.d index a91ff0df7853..1284c966db07 100644 --- a/test/fail_compilation/imports/test13152h.d +++ b/test/fail_compilation/imports/test13152h.d @@ -1,3 +1,4 @@ +module imports.test13152h; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152i.d b/test/fail_compilation/imports/test13152i.d index a91ff0df7853..0728b596d696 100644 --- a/test/fail_compilation/imports/test13152i.d +++ b/test/fail_compilation/imports/test13152i.d @@ -1,3 +1,4 @@ +module imports.test13152i; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152j.d b/test/fail_compilation/imports/test13152j.d index a91ff0df7853..33c8a21d84e8 100644 --- a/test/fail_compilation/imports/test13152j.d +++ b/test/fail_compilation/imports/test13152j.d @@ -1,3 +1,4 @@ +module imports.test13152j; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152k.d b/test/fail_compilation/imports/test13152k.d index a91ff0df7853..3c3fedbf263b 100644 --- a/test/fail_compilation/imports/test13152k.d +++ b/test/fail_compilation/imports/test13152k.d @@ -1,3 +1,4 @@ +module imports.test13152k; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152l.d b/test/fail_compilation/imports/test13152l.d index a91ff0df7853..2a2b859981b8 100644 --- a/test/fail_compilation/imports/test13152l.d +++ b/test/fail_compilation/imports/test13152l.d @@ -1,3 +1,4 @@ +module imports.test13152l; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152m.d b/test/fail_compilation/imports/test13152m.d index a91ff0df7853..ae0a851481e7 100644 --- a/test/fail_compilation/imports/test13152m.d +++ b/test/fail_compilation/imports/test13152m.d @@ -1,3 +1,4 @@ +module imports.test13152m; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152n.d b/test/fail_compilation/imports/test13152n.d index a91ff0df7853..b8cd1bb1b90d 100644 --- a/test/fail_compilation/imports/test13152n.d +++ b/test/fail_compilation/imports/test13152n.d @@ -1,3 +1,4 @@ +module imports.test13152n; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152o.d b/test/fail_compilation/imports/test13152o.d index a91ff0df7853..08dd9c5fe7cc 100644 --- a/test/fail_compilation/imports/test13152o.d +++ b/test/fail_compilation/imports/test13152o.d @@ -1,3 +1,4 @@ +module imports.test13152o; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152p.d b/test/fail_compilation/imports/test13152p.d index a91ff0df7853..8bbd87cbbfde 100644 --- a/test/fail_compilation/imports/test13152p.d +++ b/test/fail_compilation/imports/test13152p.d @@ -1,3 +1,4 @@ +module imports.test13152p; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152q.d b/test/fail_compilation/imports/test13152q.d index a91ff0df7853..57fc454fce22 100644 --- a/test/fail_compilation/imports/test13152q.d +++ b/test/fail_compilation/imports/test13152q.d @@ -1,3 +1,4 @@ +module imports.test13152q; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152r.d b/test/fail_compilation/imports/test13152r.d index a91ff0df7853..2ac032ded9d4 100644 --- a/test/fail_compilation/imports/test13152r.d +++ b/test/fail_compilation/imports/test13152r.d @@ -1,3 +1,4 @@ +module imports.test13152r; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152s.d b/test/fail_compilation/imports/test13152s.d index a91ff0df7853..b571c1d61f1c 100644 --- a/test/fail_compilation/imports/test13152s.d +++ b/test/fail_compilation/imports/test13152s.d @@ -1,3 +1,4 @@ +module imports.test13152s; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152t.d b/test/fail_compilation/imports/test13152t.d index a91ff0df7853..dcb3f53b7709 100644 --- a/test/fail_compilation/imports/test13152t.d +++ b/test/fail_compilation/imports/test13152t.d @@ -1,3 +1,4 @@ +module imports.test13152t; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152u.d b/test/fail_compilation/imports/test13152u.d index a91ff0df7853..1f47127595d0 100644 --- a/test/fail_compilation/imports/test13152u.d +++ b/test/fail_compilation/imports/test13152u.d @@ -1,3 +1,4 @@ +module imports.test13152u; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152v.d b/test/fail_compilation/imports/test13152v.d index a91ff0df7853..ff92345d40fe 100644 --- a/test/fail_compilation/imports/test13152v.d +++ b/test/fail_compilation/imports/test13152v.d @@ -1,3 +1,4 @@ +module imports.test13152v; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152w.d b/test/fail_compilation/imports/test13152w.d index a91ff0df7853..867f5e72e326 100644 --- a/test/fail_compilation/imports/test13152w.d +++ b/test/fail_compilation/imports/test13152w.d @@ -1,3 +1,4 @@ +module imports.test13152w; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152x.d b/test/fail_compilation/imports/test13152x.d index a91ff0df7853..6837e1a3d351 100644 --- a/test/fail_compilation/imports/test13152x.d +++ b/test/fail_compilation/imports/test13152x.d @@ -1,3 +1,4 @@ +module imports.test13152x; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152y.d b/test/fail_compilation/imports/test13152y.d index a91ff0df7853..a1b47bfab5f2 100644 --- a/test/fail_compilation/imports/test13152y.d +++ b/test/fail_compilation/imports/test13152y.d @@ -1,3 +1,4 @@ +module imports.test13152y; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test13152z.d b/test/fail_compilation/imports/test13152z.d index a91ff0df7853..94f3d7cf589c 100644 --- a/test/fail_compilation/imports/test13152z.d +++ b/test/fail_compilation/imports/test13152z.d @@ -1,3 +1,4 @@ +module imports.test13152z; public import imports.test13152a; public import imports.test13152b; public import imports.test13152c; diff --git a/test/fail_compilation/imports/test64b.d b/test/fail_compilation/imports/test64b.d new file mode 100644 index 000000000000..d2566b89d3b6 --- /dev/null +++ b/test/fail_compilation/imports/test64b.d @@ -0,0 +1,4 @@ +module imports.test64b; + +const char[] file2 = "File2"; + diff --git a/test/fail_compilation/imports/wrong_mod_name.d b/test/fail_compilation/imports/wrong_mod_name.d new file mode 100644 index 000000000000..ba43d991dcc2 --- /dev/null +++ b/test/fail_compilation/imports/wrong_mod_name.d @@ -0,0 +1 @@ +module wrong_mod_name_bleh; diff --git a/test/fail_compilation/imports/wrongpkgname.d b/test/fail_compilation/imports/wrongpkgname.d new file mode 100644 index 000000000000..2a44710aafc9 --- /dev/null +++ b/test/fail_compilation/imports/wrongpkgname.d @@ -0,0 +1 @@ +module wrongpkg.wrongpkgname; diff --git a/test/fail_compilation/test64.d b/test/fail_compilation/test64.d index 982e6506d6de..cd3237ead9af 100644 --- a/test/fail_compilation/test64.d +++ b/test/fail_compilation/test64.d @@ -1,4 +1,5 @@ /* +EXTRA_SOURCES: imports/test64b.d imports/test64a.d TEST_OUTPUT: --- fail_compilation/imports/test64a.d(1): Error: module `imports` from file fail_compilation/imports/test64a.d conflicts with package name imports @@ -9,7 +10,7 @@ fail_compilation/imports/test64a.d(1): Error: module `imports` from file fail_co //import std.stdio; -import imports.test64a; +import imports; int main(string[] args) { diff --git a/test/runnable/extra-files/lib846.d b/test/runnable/extra-files/lib846.d index 65547765e22c..e0c391865023 100644 --- a/test/runnable/extra-files/lib846.d +++ b/test/runnable/extra-files/lib846.d @@ -1,4 +1,4 @@ -module link846a; +module lib846; template ElemTypeOf(T) { diff --git a/test/runnable/imports/a12037.d b/test/runnable/imports/a12037.d index 7c25d874c42c..120f5f5f709b 100644 --- a/test/runnable/imports/a12037.d +++ b/test/runnable/imports/a12037.d @@ -1,4 +1,4 @@ -module imports.aXXXXX; +module imports.a12037; auto min(A, B)(A a, B b) { return a < b ? a : b; } alias TypeTuple(T...) = T; diff --git a/test/runnable/imports/a9741.d b/test/runnable/imports/a9741.d index d10e6ac4c539..491fffc2d8d3 100644 --- a/test/runnable/imports/a9741.d +++ b/test/runnable/imports/a9741.d @@ -1,4 +1,4 @@ -module imports.a9741b; +module imports.a9741; template ShowAttributes(alias X) { diff --git a/test/runnable/imports/bar10378.d b/test/runnable/imports/bar10378.d index f4d3bcb5b9b0..816845491a2d 100644 --- a/test/runnable/imports/bar10378.d +++ b/test/runnable/imports/bar10378.d @@ -1,4 +1,4 @@ -module bar; +module imports.bar10378; void writeln() { } diff --git a/test/runnable/imports/link13043a.d b/test/runnable/imports/link13043a.d index fe5bedb8a4db..41bb5bab759f 100644 --- a/test/runnable/imports/link13043a.d +++ b/test/runnable/imports/link13043a.d @@ -1,4 +1,4 @@ -module imports.lin13043a; +module imports.link13043a; struct QualifiedNameTests { diff --git a/test/runnable/imports/std15017variant.d b/test/runnable/imports/std15017variant.d index 4ffce52df3c4..f6f7f5ea404e 100644 --- a/test/runnable/imports/std15017variant.d +++ b/test/runnable/imports/std15017variant.d @@ -1,4 +1,4 @@ -module imports.std15017; +module imports.std15017variant; struct VariantN(size_t maxDataSize) {