about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorTyler Mandry <tmandry@gmail.com>2019-10-29 12:01:31 -0700
committerGitHub <noreply@github.com>2019-10-29 12:01:31 -0700
commit3f50a0dec89d1ae06b83ab4a1d9df0fadf5d6458 (patch)
treea52b210265da4389d8c332d0619dab8f55022525 /src
parentd3d28a49209a21628fda0245b631e5fc3465be1a (diff)
parent9869e5b969553699af4f50433170827d4e440e60 (diff)
downloadrust-3f50a0dec89d1ae06b83ab4a1d9df0fadf5d6458.tar.gz
rust-3f50a0dec89d1ae06b83ab4a1d9df0fadf5d6458.zip
Rollup merge of #65405 - GuillaumeGomez:long-err-explanation-E0740, r=Dylan-DPC
Create new error E0742 and add long error explanation

Part of #61137.

Creates E0742 error code and add its long error explanation.
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/build_reduced_graph.rs6
-rw-r--r--src/librustc_resolve/error_codes.rs39
-rw-r--r--src/test/ui/privacy/restricted/relative-2018.stderr3
-rw-r--r--src/test/ui/privacy/restricted/test.stderr4
-rw-r--r--src/test/ui/proc-macro/issue-50493.stderr5
-rw-r--r--src/test/ui/pub/pub-restricted.stderr5
-rw-r--r--src/test/ui/resolve/resolve-bad-visibility.stderr5
7 files changed, 55 insertions, 12 deletions
diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs
index c18bdfad22c..648c5104b1a 100644
--- a/src/librustc_resolve/build_reduced_graph.rs
+++ b/src/librustc_resolve/build_reduced_graph.rs
@@ -256,9 +256,9 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
                                 if self.r.is_accessible_from(vis, parent_scope.module) {
                                     vis
                                 } else {
-                                    let msg =
-                                        "visibilities can only be restricted to ancestor modules";
-                                    self.r.session.span_err(path.span, msg);
+                                    struct_span_err!(self.r.session, path.span, E0742,
+                                        "visibilities can only be restricted to ancestor modules")
+                                        .emit();
                                     ty::Visibility::Public
                                 }
                             }
diff --git a/src/librustc_resolve/error_codes.rs b/src/librustc_resolve/error_codes.rs
index 9515c87ce4b..9937f27931f 100644
--- a/src/librustc_resolve/error_codes.rs
+++ b/src/librustc_resolve/error_codes.rs
@@ -1910,6 +1910,7 @@ E0671: r##"
 
 Const parameters cannot depend on type parameters.
 The following is therefore invalid:
+
 ```compile_fail,E0741
 #![feature(const_generics)]
 
@@ -1933,6 +1934,44 @@ struct Foo<X = Box<Self>> {
 ```
 "##,
 
+E0742: r##"
+Visibility is restricted to a module which isn't an ancestor of the current
+item.
+
+Erroneous code example:
+
+```compile_fail,E0742,edition2018
+pub mod Sea {}
+
+pub (in crate::Sea) struct Shark; // error!
+
+fn main() {}
+```
+
+To fix this error, we need to move the `Shark` struct inside the `Sea` module:
+
+```edition2018
+pub mod Sea {
+    pub (in crate::Sea) struct Shark; // ok!
+}
+
+fn main() {}
+```
+
+Of course, you can do it as long as the module you're referring to is an
+ancestor:
+
+```edition2018
+pub mod Earth {
+    pub mod Sea {
+        pub (in crate::Earth) struct Shark; // ok!
+    }
+}
+
+fn main() {}
+```
+"##,
+
 ;
 //  E0153, unused error code
 //  E0157, unused error code
diff --git a/src/test/ui/privacy/restricted/relative-2018.stderr b/src/test/ui/privacy/restricted/relative-2018.stderr
index 61effc463e9..54fee085ee9 100644
--- a/src/test/ui/privacy/restricted/relative-2018.stderr
+++ b/src/test/ui/privacy/restricted/relative-2018.stderr
@@ -1,4 +1,4 @@
-error: visibilities can only be restricted to ancestor modules
+error[E0742]: visibilities can only be restricted to ancestor modules
   --> $DIR/relative-2018.rs:7:12
    |
 LL |     pub(in ::core) struct S4;
@@ -14,3 +14,4 @@ LL |     pub(in a::b) struct S5;
 
 error: aborting due to 2 previous errors
 
+For more information about this error, try `rustc --explain E0742`.
diff --git a/src/test/ui/privacy/restricted/test.stderr b/src/test/ui/privacy/restricted/test.stderr
index a23973d0853..e6a61fbefb0 100644
--- a/src/test/ui/privacy/restricted/test.stderr
+++ b/src/test/ui/privacy/restricted/test.stderr
@@ -4,7 +4,7 @@ error[E0433]: failed to resolve: maybe a missing crate `bad`?
 LL |     pub(in bad::path) mod m1 {}
    |            ^^^ maybe a missing crate `bad`?
 
-error: visibilities can only be restricted to ancestor modules
+error[E0742]: visibilities can only be restricted to ancestor modules
   --> $DIR/test.rs:51:12
    |
 LL |     pub(in foo) mod m2 {}
@@ -78,5 +78,5 @@ LL |     u.h();
 
 error: aborting due to 12 previous errors
 
-Some errors have detailed explanations: E0364, E0433, E0603, E0616, E0624.
+Some errors have detailed explanations: E0364, E0433, E0603, E0616, E0624, E0742.
 For more information about an error, try `rustc --explain E0364`.
diff --git a/src/test/ui/proc-macro/issue-50493.stderr b/src/test/ui/proc-macro/issue-50493.stderr
index 28c61a2f52f..6b8724457a6 100644
--- a/src/test/ui/proc-macro/issue-50493.stderr
+++ b/src/test/ui/proc-macro/issue-50493.stderr
@@ -1,4 +1,4 @@
-error: visibilities can only be restricted to ancestor modules
+error[E0742]: visibilities can only be restricted to ancestor modules
   --> $DIR/issue-50493.rs:8:12
    |
 LL |     pub(in restricted) field: usize,
@@ -12,4 +12,5 @@ LL | #[derive(Derive)]
 
 error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0616`.
+Some errors have detailed explanations: E0616, E0742.
+For more information about an error, try `rustc --explain E0616`.
diff --git a/src/test/ui/pub/pub-restricted.stderr b/src/test/ui/pub/pub-restricted.stderr
index 596264ba16b..56ff104b4fe 100644
--- a/src/test/ui/pub/pub-restricted.stderr
+++ b/src/test/ui/pub/pub-restricted.stderr
@@ -53,7 +53,7 @@ LL | pub (xyz) fn xyz() {}
            `pub(super)`: visible only in the current module's parent
            `pub(in path::to::module)`: visible only on the specified path
 
-error: visibilities can only be restricted to ancestor modules
+error[E0742]: visibilities can only be restricted to ancestor modules
   --> $DIR/pub-restricted.rs:25:17
    |
 LL |         pub (in x) non_parent_invalid: usize,
@@ -61,4 +61,5 @@ LL |         pub (in x) non_parent_invalid: usize,
 
 error: aborting due to 6 previous errors
 
-For more information about this error, try `rustc --explain E0704`.
+Some errors have detailed explanations: E0704, E0742.
+For more information about an error, try `rustc --explain E0704`.
diff --git a/src/test/ui/resolve/resolve-bad-visibility.stderr b/src/test/ui/resolve/resolve-bad-visibility.stderr
index d2fb7c7a9e6..43af38cf491 100644
--- a/src/test/ui/resolve/resolve-bad-visibility.stderr
+++ b/src/test/ui/resolve/resolve-bad-visibility.stderr
@@ -10,7 +10,7 @@ error[E0577]: expected module, found trait `Tr`
 LL | pub(in Tr) struct Z;
    |        ^^ not a module
 
-error: visibilities can only be restricted to ancestor modules
+error[E0742]: visibilities can only be restricted to ancestor modules
   --> $DIR/resolve-bad-visibility.rs:6:8
    |
 LL | pub(in std::vec) struct F;
@@ -30,4 +30,5 @@ LL | pub(in too_soon) struct H;
 
 error: aborting due to 5 previous errors
 
-For more information about this error, try `rustc --explain E0433`.
+Some errors have detailed explanations: E0433, E0742.
+For more information about an error, try `rustc --explain E0433`.