From c6c1d8fa869774afd32dc5250bb32f641f03cbba Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 27 Dec 2018 15:20:32 -0500 Subject: [PATCH] Work around deprecation of str::trim_left_matches --- serde_derive/src/de.rs | 21 ++------------------ serde_derive/src/dummy.rs | 32 ++++++++++++++++++++++++++++++ serde_derive/src/internals/attr.rs | 4 ++++ serde_derive/src/lib.rs | 1 + serde_derive/src/ser.rs | 21 ++------------------ 5 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 serde_derive/src/dummy.rs diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 7d0ce6a0..9906e769 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -5,11 +5,11 @@ use syn::spanned::Spanned; use syn::{self, Ident, Index, Member}; use bound; +use dummy; use fragment::{Expr, Fragment, Match, Stmts}; use internals::ast::{Container, Data, Field, Style, Variant}; use internals::{attr, Ctxt, Derive}; use pretend; -use try; use std::collections::BTreeSet; @@ -25,11 +25,6 @@ pub fn expand_derive_deserialize(input: &syn::DeriveInput) -> Result Result TokenStream { + let try_replacement = try::replacement(); + + let dummy_const = Ident::new( + &format!("_IMPL_{}_FOR_{}", trait_, unraw(ty)), + Span::call_site(), + ); + + quote! { + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] + const #dummy_const: () = { + #[allow(unknown_lints)] + #[cfg_attr(feature = "cargo-clippy", allow(useless_attribute))] + #[allow(rust_2018_idioms)] + extern crate serde as _serde; + #try_replacement + #code + }; + } +} + +#[allow(deprecated)] +fn unraw(ident: &Ident) -> String { + // str::trim_start_matches was added in 1.30, trim_left_matches deprecated + // in 1.33. We currently support rustc back to 1.15 so we need to continue + // to use the deprecated one. + ident.to_string().trim_left_matches("r#").to_owned() +} diff --git a/serde_derive/src/internals/attr.rs b/serde_derive/src/internals/attr.rs index da66ac0f..a89c0ce0 100644 --- a/serde_derive/src/internals/attr.rs +++ b/serde_derive/src/internals/attr.rs @@ -95,7 +95,11 @@ pub struct Name { deserialize: String, } +#[allow(deprecated)] fn unraw(ident: &Ident) -> String { + // str::trim_start_matches was added in 1.30, trim_left_matches deprecated + // in 1.33. We currently support rustc back to 1.15 so we need to continue + // to use the deprecated one. ident.to_string().trim_left_matches("r#").to_owned() } diff --git a/serde_derive/src/lib.rs b/serde_derive/src/lib.rs index 276dc420..11e018a8 100644 --- a/serde_derive/src/lib.rs +++ b/serde_derive/src/lib.rs @@ -69,6 +69,7 @@ mod bound; mod fragment; mod de; +mod dummy; mod pretend; mod ser; mod try; diff --git a/serde_derive/src/ser.rs b/serde_derive/src/ser.rs index bb6fb316..4f372e2c 100644 --- a/serde_derive/src/ser.rs +++ b/serde_derive/src/ser.rs @@ -3,11 +3,11 @@ use syn::spanned::Spanned; use syn::{self, Ident, Index, Member}; use bound; +use dummy; use fragment::{Fragment, Match, Stmts}; use internals::ast::{Container, Data, Field, Style, Variant}; use internals::{attr, Ctxt, Derive}; use pretend; -use try; pub fn expand_derive_serialize(input: &syn::DeriveInput) -> Result> { let ctxt = Ctxt::new(); @@ -21,11 +21,6 @@ pub fn expand_derive_serialize(input: &syn::DeriveInput) -> Result Result