From 6675bb3e732b5dccc250419755acb35cf7f8155c Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 2 Jun 2017 21:38:52 +0200 Subject: [PATCH] Add E0603 error code --- src/librustc_resolve/diagnostics.rs | 29 +++++++++++++++++++ src/librustc_resolve/lib.rs | 2 +- src/test/compile-fail/E0603.rs | 17 +++++++++++ .../ui/resolve/privacy-struct-ctor.stderr | 10 +++---- 4 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 src/test/compile-fail/E0603.rs diff --git a/src/librustc_resolve/diagnostics.rs b/src/librustc_resolve/diagnostics.rs index fa6ea9dba43..1a5cf89f969 100644 --- a/src/librustc_resolve/diagnostics.rs +++ b/src/librustc_resolve/diagnostics.rs @@ -1578,6 +1578,35 @@ fn print_on_failure(state: &State) { ``` "##, +E0603: r##" +A private item was used outside its scope. + +Erroneous code example: + +```compile_fail,E0603 +mod SomeModule { + const PRIVATE: u32 = 0x_a_bad_1dea_u32; // This const is private, so we + // can't use it outside of the + // `SomeModule` module. +} + +println!("const value: {}", SomeModule::PRIVATE); // error: constant `CONSTANT` + // is private +``` + +In order to fix this error, you need to make the item public by using the `pub` +keyword. Example: + +``` +mod SomeModule { + pub const PRIVATE: u32 = 0x_a_bad_1dea_u32; // We set it public by using the + // `pub` keyword. +} + +println!("const value: {}", SomeModule::PRIVATE); // ok! +``` +"##, + } register_diagnostics! { diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index a40c191f7bd..b23cce6d425 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -3428,7 +3428,7 @@ fn report_errors(&mut self) { for &PrivacyError(span, name, binding) in &self.privacy_errors { if !reported_spans.insert(span) { continue } - self.session.span_err(span, &format!("{} `{}` is private", binding.descr(), name)); + span_err!(self.session, span, E0603, "{} `{}` is private", binding.descr(), name); } } diff --git a/src/test/compile-fail/E0603.rs b/src/test/compile-fail/E0603.rs new file mode 100644 index 00000000000..1cc9f6bfa7d --- /dev/null +++ b/src/test/compile-fail/E0603.rs @@ -0,0 +1,17 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +mod SomeModule { + const PRIVATE: u32 = 0x_a_bad_1dea_u32; +} + +fn main() { + SomeModule::PRIVATE; //~ ERROR E0603 +} diff --git a/src/test/ui/resolve/privacy-struct-ctor.stderr b/src/test/ui/resolve/privacy-struct-ctor.stderr index b21b10c63b0..a1ec5f0b713 100644 --- a/src/test/ui/resolve/privacy-struct-ctor.stderr +++ b/src/test/ui/resolve/privacy-struct-ctor.stderr @@ -35,31 +35,31 @@ error[E0423]: expected value, found struct `xcrate::S` help: possible better candidate is found in another module, you can import it into scope | use m::S; -error: tuple struct `Z` is private +error[E0603]: tuple struct `Z` is private --> $DIR/privacy-struct-ctor.rs:25:9 | 25 | n::Z; //~ ERROR tuple struct `Z` is private | ^^^^ -error: tuple struct `S` is private +error[E0603]: tuple struct `S` is private --> $DIR/privacy-struct-ctor.rs:35:5 | 35 | m::S; //~ ERROR tuple struct `S` is private | ^^^^ -error: tuple struct `Z` is private +error[E0603]: tuple struct `Z` is private --> $DIR/privacy-struct-ctor.rs:39:5 | 39 | m::n::Z; //~ ERROR tuple struct `Z` is private | ^^^^^^^ -error: tuple struct `S` is private +error[E0603]: tuple struct `S` is private --> $DIR/privacy-struct-ctor.rs:41:5 | 41 | xcrate::m::S; //~ ERROR tuple struct `S` is private | ^^^^^^^^^^^^ -error: tuple struct `Z` is private +error[E0603]: tuple struct `Z` is private --> $DIR/privacy-struct-ctor.rs:45:5 | 45 | xcrate::m::n::Z; //~ ERROR tuple struct `Z` is private