From b3a1d56ebe34276916f34ffb0fed34d406f73c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Sat, 9 Jun 2018 16:08:47 -0700 Subject: [PATCH] Add code to incorrect `pub` restriction error --- src/libsyntax/diagnostic_list.rs | 1 + src/libsyntax/parse/parser.rs | 7 ++++--- src/test/ui/pub/pub-restricted.stderr | 9 +++++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs index b6748c40fc4..20318854758 100644 --- a/src/libsyntax/diagnostic_list.rs +++ b/src/libsyntax/diagnostic_list.rs @@ -398,4 +398,5 @@ register_diagnostics! { E0693, // incorrect `repr(align)` attribute format E0694, // an unknown tool name found in scoped attributes E0697, // invalid ABI + E0698, // incorrect visibility restriction } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index f38f4cc7137..afb0931f950 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -5986,12 +5986,13 @@ impl<'a> Parser<'a> { `pub(super)`: visible only in the current module's parent `pub(in path::to::module)`: visible only on the specified path"##; let path = self.parse_path(PathStyle::Mod)?; - let path_span = self.prev_span; + let sp = self.prev_span; let help_msg = format!("make this visible only to module `{}` with `in`", path); self.expect(&token::CloseDelim(token::Paren))?; // `)` - let mut err = self.span_fatal_help(path_span, msg, suggestion); + let mut err = struct_span_err!(self.sess.span_diagnostic, sp, E0698, "{}", msg); + err.help(suggestion); err.span_suggestion_with_applicability( - path_span, &help_msg, format!("in {}", path), Applicability::MachineApplicable + sp, &help_msg, format!("in {}", path), Applicability::MachineApplicable ); err.emit(); // emit diagnostic, but continue with public visibility } diff --git a/src/test/ui/pub/pub-restricted.stderr b/src/test/ui/pub/pub-restricted.stderr index 7005088965d..114732c39f2 100644 --- a/src/test/ui/pub/pub-restricted.stderr +++ b/src/test/ui/pub/pub-restricted.stderr @@ -1,4 +1,4 @@ -error: incorrect visibility restriction +error[E0698]: incorrect visibility restriction --> $DIR/pub-restricted.rs:15:6 | LL | pub (a) fn afn() {} //~ incorrect visibility restriction @@ -9,7 +9,7 @@ LL | pub (a) fn afn() {} //~ incorrect visibility restriction `pub(super)`: visible only in the current module's parent `pub(in path::to::module)`: visible only on the specified path -error: incorrect visibility restriction +error[E0698]: incorrect visibility restriction --> $DIR/pub-restricted.rs:16:6 | LL | pub (b) fn bfn() {} //~ incorrect visibility restriction @@ -20,7 +20,7 @@ LL | pub (b) fn bfn() {} //~ incorrect visibility restriction `pub(super)`: visible only in the current module's parent `pub(in path::to::module)`: visible only on the specified path -error: incorrect visibility restriction +error[E0698]: incorrect visibility restriction --> $DIR/pub-restricted.rs:32:14 | LL | pub (a) invalid: usize, //~ incorrect visibility restriction @@ -31,7 +31,7 @@ LL | pub (a) invalid: usize, //~ incorrect visibility restriction `pub(super)`: visible only in the current module's parent `pub(in path::to::module)`: visible only on the specified path -error: incorrect visibility restriction +error[E0698]: incorrect visibility restriction --> $DIR/pub-restricted.rs:41:6 | LL | pub (xyz) fn xyz() {} //~ incorrect visibility restriction @@ -50,3 +50,4 @@ LL | pub (in x) non_parent_invalid: usize, //~ ERROR visibilities can on error: aborting due to 5 previous errors +For more information about this error, try `rustc --explain E0698`.