Auto merge of #116016 - jhpratt:kill-rustc-serialize, r=ehuss

Soft-destabilize `RustcEncodable` & `RustcDecodable`, remove from prelude in next edition

cc rust-lang/libs-team#272

Any use of `RustcEncodable` and `RustcDecodable` now triggers a deny-by-default lint. The derives have been removed from the 2024 prelude. I specifically chose **not** to document this in the module-level documentation, as the presence in existing preludes is not documented (which I presume is intentional).

This does not implement the proposed change for `rustfix`, which I will be looking into shortly.

With regard to the items in the preludes being stable, this should not be an issue because #15702 has been resolved.

r? libs-api
This commit is contained in:
bors 2024-03-27 07:30:36 +00:00
commit 0dcc1309d0
8 changed files with 156 additions and 40 deletions

View File

@ -1726,20 +1726,28 @@ pub(crate) mod builtin {
builtin # deref($pat)
}
/// Unstable implementation detail of the `rustc` compiler, do not use.
/// Derive macro for `rustc-serialize`. Should not be used in new code.
#[rustc_builtin_macro]
#[stable(feature = "rust1", since = "1.0.0")]
#[allow_internal_unstable(core_intrinsics, libstd_sys_internals, rt)]
#[unstable(
feature = "rustc_encodable_decodable",
issue = "none",
soft,
reason = "derive macro for `rustc-serialize`; should not be used in new code"
)]
#[deprecated(since = "1.52.0", note = "rustc-serialize is deprecated and no longer supported")]
#[doc(hidden)] // While technically stable, using it is unstable, and deprecated. Hide it.
pub macro RustcDecodable($item:item) {
/* compiler built-in */
}
/// Unstable implementation detail of the `rustc` compiler, do not use.
/// Derive macro for `rustc-serialize`. Should not be used in new code.
#[rustc_builtin_macro]
#[stable(feature = "rust1", since = "1.0.0")]
#[allow_internal_unstable(core_intrinsics, rt)]
#[unstable(
feature = "rustc_encodable_decodable",
issue = "none",
soft,
reason = "derive macro for `rustc-serialize`; should not be used in new code"
)]
#[deprecated(since = "1.52.0", note = "rustc-serialize is deprecated and no longer supported")]
#[doc(hidden)] // While technically stable, using it is unstable, and deprecated. Hide it.
pub macro RustcEncodable($item:item) {

View File

@ -1,9 +1,7 @@
//! The first version of the core prelude.
//! Items common to the prelude of all editions.
//!
//! See the [module-level documentation](super) for more.
#![stable(feature = "core_prelude", since = "1.4.0")]
// Re-exported core operators
#[stable(feature = "core_prelude", since = "1.4.0")]
#[doc(no_inline)]
@ -68,11 +66,6 @@ pub use crate::{
#[doc(no_inline)]
pub use crate::concat_bytes;
// Do not `doc(inline)` these `doc(hidden)` items.
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
#[allow(deprecated)]
pub use crate::macros::builtin::{RustcDecodable, RustcEncodable};
// Do not `doc(no_inline)` so that they become doc items on their own
// (no public module for them to be re-exported from).
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]

View File

@ -6,7 +6,26 @@
#![stable(feature = "core_prelude", since = "1.4.0")]
pub mod v1;
mod common;
/// The first version of the prelude of The Rust Standard Library.
///
/// See the [module-level documentation](self) for more.
#[stable(feature = "rust1", since = "1.0.0")]
pub mod v1 {
#[stable(feature = "rust1", since = "1.0.0")]
pub use super::common::*;
// Do not `doc(inline)` these `doc(hidden)` items.
#[unstable(
feature = "rustc_encodable_decodable",
issue = "none",
soft,
reason = "derive macro for `rustc-serialize`; should not be used in new code"
)]
#[allow(deprecated)]
pub use crate::macros::builtin::{RustcDecodable, RustcEncodable};
}
/// The 2015 version of the core prelude.
///
@ -46,14 +65,21 @@ pub mod rust_2021 {
pub use crate::convert::{TryFrom, TryInto};
}
/// The 2024 edition of the core prelude.
/// The 2024 version of the core prelude.
///
/// See the [module-level documentation](self) for more.
#[unstable(feature = "prelude_2024", issue = "121042")]
pub mod rust_2024 {
#[unstable(feature = "prelude_2024", issue = "121042")]
#[stable(feature = "rust1", since = "1.0.0")]
pub use super::common::*;
#[stable(feature = "prelude_2021", since = "1.55.0")]
#[doc(no_inline)]
pub use super::rust_2021::*;
pub use crate::iter::FromIterator;
#[stable(feature = "prelude_2021", since = "1.55.0")]
#[doc(no_inline)]
pub use crate::convert::{TryFrom, TryInto};
#[unstable(feature = "prelude_2024", issue = "121042")]
#[doc(no_inline)]

View File

@ -1,9 +1,7 @@
//! The first version of the prelude of The Rust Standard Library.
//! Items common to the prelude of all editions.
//!
//! See the [module-level documentation](super) for more.
#![stable(feature = "rust1", since = "1.0.0")]
// Re-exported core operators
#[stable(feature = "rust1", since = "1.0.0")]
#[doc(no_inline)]
@ -52,11 +50,6 @@ pub use core::prelude::v1::{
#[doc(no_inline)]
pub use core::prelude::v1::concat_bytes;
// Do not `doc(inline)` these `doc(hidden)` items.
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
#[allow(deprecated)]
pub use core::prelude::v1::{RustcDecodable, RustcEncodable};
// Do not `doc(no_inline)` so that they become doc items on their own
// (no public module for them to be re-exported from).
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]

View File

@ -93,7 +93,26 @@
#![stable(feature = "rust1", since = "1.0.0")]
pub mod v1;
mod common;
/// The first version of the prelude of The Rust Standard Library.
///
/// See the [module-level documentation](self) for more.
#[stable(feature = "rust1", since = "1.0.0")]
pub mod v1 {
#[stable(feature = "rust1", since = "1.0.0")]
pub use super::common::*;
// Do not `doc(inline)` these `doc(hidden)` items.
#[unstable(
feature = "rustc_encodable_decodable",
issue = "none",
soft,
reason = "derive macro for `rustc-serialize`; should not be used in new code"
)]
#[allow(deprecated)]
pub use core::prelude::v1::{RustcDecodable, RustcEncodable};
}
/// The 2015 version of the prelude of The Rust Standard Library.
///
@ -134,9 +153,8 @@ pub mod rust_2021 {
/// See the [module-level documentation](self) for more.
#[unstable(feature = "prelude_2024", issue = "121042")]
pub mod rust_2024 {
#[unstable(feature = "prelude_2024", issue = "121042")]
#[doc(no_inline)]
pub use super::v1::*;
#[stable(feature = "rust1", since = "1.0.0")]
pub use super::common::*;
#[unstable(feature = "prelude_2024", issue = "121042")]
#[doc(no_inline)]

View File

@ -1,12 +1,8 @@
#[crate_type="lib"]
// #13544
extern crate rustc_serialize;
#[derive(RustcEncodable)] pub struct A;
#[derive(RustcEncodable)] pub struct B(isize);
#[derive(RustcEncodable)] pub struct C { x: isize }
#[derive(RustcEncodable)] pub enum D {}
#[derive(RustcEncodable)] pub enum E { y }
#[derive(RustcEncodable)] pub enum F { z(isize) }
#[derive(Debug)] pub struct A;
#[derive(Debug)] pub struct B(isize);
#[derive(Debug)] pub struct C { x: isize }
#[derive(Debug)] pub enum D {}
#[derive(Debug)] pub enum E { y }
#[derive(Debug)] pub enum F { z(isize) }

View File

@ -0,0 +1,16 @@
#![crate_type = "lib"]
// This isn't intended to compile, so it's easiest to just ignore this error.
extern crate rustc_serialize; //~ERROR can't find crate for `rustc_serialize`
#[derive(
RustcEncodable,
//~^ ERROR use of unstable library feature 'rustc_encodable_decodable'
//~^^ WARNING this was previously accepted by the compiler
//~^^^ WARNING use of deprecated macro `RustcEncodable`
RustcDecodable,
//~^ ERROR use of unstable library feature 'rustc_encodable_decodable'
//~^^ WARNING this was previously accepted by the compiler
//~^^^ WARNING use of deprecated macro `RustcDecodable`
)]
struct S;

View File

@ -0,0 +1,66 @@
error[E0463]: can't find crate for `rustc_serialize`
--> $DIR/feature-gate-rustc_encodable_decodable.rs:4:1
|
LL | extern crate rustc_serialize;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
|
= help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview`
error: use of unstable library feature 'rustc_encodable_decodable': derive macro for `rustc-serialize`; should not be used in new code
--> $DIR/feature-gate-rustc_encodable_decodable.rs:7:5
|
LL | RustcEncodable,
| ^^^^^^^^^^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #64266 <https://github.com/rust-lang/rust/issues/64266>
= note: `#[deny(soft_unstable)]` on by default
warning: use of deprecated macro `RustcEncodable`: rustc-serialize is deprecated and no longer supported
--> $DIR/feature-gate-rustc_encodable_decodable.rs:7:5
|
LL | RustcEncodable,
| ^^^^^^^^^^^^^^
|
= note: `#[warn(deprecated)]` on by default
error: use of unstable library feature 'rustc_encodable_decodable': derive macro for `rustc-serialize`; should not be used in new code
--> $DIR/feature-gate-rustc_encodable_decodable.rs:11:5
|
LL | RustcDecodable,
| ^^^^^^^^^^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #64266 <https://github.com/rust-lang/rust/issues/64266>
warning: use of deprecated macro `RustcDecodable`: rustc-serialize is deprecated and no longer supported
--> $DIR/feature-gate-rustc_encodable_decodable.rs:11:5
|
LL | RustcDecodable,
| ^^^^^^^^^^^^^^
error: aborting due to 3 previous errors; 2 warnings emitted
For more information about this error, try `rustc --explain E0463`.
Future incompatibility report: Future breakage diagnostic:
error: use of unstable library feature 'rustc_encodable_decodable': derive macro for `rustc-serialize`; should not be used in new code
--> $DIR/feature-gate-rustc_encodable_decodable.rs:7:5
|
LL | RustcEncodable,
| ^^^^^^^^^^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #64266 <https://github.com/rust-lang/rust/issues/64266>
= note: `#[deny(soft_unstable)]` on by default
Future breakage diagnostic:
error: use of unstable library feature 'rustc_encodable_decodable': derive macro for `rustc-serialize`; should not be used in new code
--> $DIR/feature-gate-rustc_encodable_decodable.rs:11:5
|
LL | RustcDecodable,
| ^^^^^^^^^^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #64266 <https://github.com/rust-lang/rust/issues/64266>
= note: `#[deny(soft_unstable)]` on by default