diff options
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | Cargo.toml.orig | 2 | ||||
-rw-r--r-- | METADATA | 8 | ||||
-rw-r--r-- | TEST_MAPPING | 7 | ||||
-rw-r--r-- | src/lib.rs | 11 | ||||
-rw-r--r-- | src/pin_project/args.rs | 13 | ||||
-rw-r--r-- | src/pin_project/attribute.rs | 4 | ||||
-rw-r--r-- | src/pin_project/derive.rs | 38 | ||||
-rw-r--r-- | src/pinned_drop.rs | 10 | ||||
-rw-r--r-- | src/utils.rs | 6 |
10 files changed, 53 insertions, 48 deletions
@@ -13,7 +13,7 @@ [package] edition = "2018" name = "pin-project-internal" -version = "1.0.1" +version = "1.0.2" authors = ["Taiki Endo <te316e89@gmail.com>"] description = "Implementation detail of the `pin-project` crate.\n" homepage = "https://github.com/taiki-e/pin-project" diff --git a/Cargo.toml.orig b/Cargo.toml.orig index 4a4d1d2..0f018e8 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig @@ -1,6 +1,6 @@ [package] name = "pin-project-internal" -version = "1.0.1" +version = "1.0.2" authors = ["Taiki Endo <te316e89@gmail.com>"] edition = "2018" license = "Apache-2.0 OR MIT" @@ -7,13 +7,13 @@ third_party { } url { type: ARCHIVE - value: "https://static.crates.io/crates/pin-project-internal/pin-project-internal-1.0.1.crate" + value: "https://static.crates.io/crates/pin-project-internal/pin-project-internal-1.0.2.crate" } - version: "1.0.1" + version: "1.0.2" license_type: NOTICE last_upgrade_date { year: 2020 - month: 10 - day: 26 + month: 11 + day: 18 } } diff --git a/TEST_MAPPING b/TEST_MAPPING index 89ed5be..195e52f 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING @@ -4,13 +4,6 @@ { "host": true, "name": "pin-project-internal_host_test_src_lib" - }, - { - "host": true, - "name": "futures-util_host_test_src_lib" - }, - { - "name": "futures-util_device_test_src_lib" } ] } @@ -1,6 +1,6 @@ //! Implementation detail of the `pin-project` crate. - **do not use directly** -#![doc(html_root_url = "https://docs.rs/pin-project-internal/1.0.1")] +#![doc(html_root_url = "https://docs.rs/pin-project-internal/1.0.2")] #![doc(test( no_crate_inject, attr(deny(warnings, rust_2018_idioms, single_use_lifetimes), allow(dead_code)) @@ -8,11 +8,14 @@ #![warn(unsafe_code)] #![warn(future_incompatible, rust_2018_idioms, single_use_lifetimes, unreachable_pub)] #![warn(clippy::all, clippy::default_trait_access)] -// mem::take and #[non_exhaustive] requires Rust 1.40, matches! requires Rust 1.42 +// mem::take, #[non_exhaustive], and Option::{as_deref, as_deref_mut} require Rust 1.40, +// matches! requires Rust 1.42, str::{strip_prefix, strip_suffix} requires Rust 1.45 #![allow( clippy::mem_replace_with_default, clippy::manual_non_exhaustive, - clippy::match_like_matches_macro + clippy::option_as_ref_deref, + clippy::match_like_matches_macro, + clippy::manual_strip )] #![allow(clippy::needless_doctest_main)] @@ -302,7 +305,7 @@ use proc_macro::TokenStream; /// #[pin_project] /// struct Struct<T> { /// field: T, -/// #[pin] +/// #[pin] // <------ This `#[pin]` is required to make `Struct` to `!Unpin`. /// _pin: PhantomPinned, /// } /// ``` diff --git a/src/pin_project/args.rs b/src/pin_project/args.rs index 38e43d4..c321260 100644 --- a/src/pin_project/args.rs +++ b/src/pin_project/args.rs @@ -3,7 +3,7 @@ use quote::quote; use syn::{ parse::{Parse, ParseStream}, spanned::Spanned, - *, + Attribute, Error, Ident, Result, Token, }; use super::PIN; @@ -45,11 +45,11 @@ pub(super) fn parse_args(attrs: &[Attribute]) -> Result<Args> { // As the `#[pin]` attribute generated by `#[pin_project]` // has the same span as `#[pin_project]`, it is possible // that a useless error message will be generated. + // So, use the span of `prev_attr` if it is not a valid attribute. let res = syn::parse2::<Input>(attr.tokens.clone()).unwrap().0; let span = match (prev_res, res) { (Some(_), _) => attr, - (_, Some(_)) => prev_attr, - (None, None) => prev_attr, + (None, _) => prev_attr, }; Err(error!(span, "duplicate #[pin] attribute")) } else { @@ -236,6 +236,7 @@ pub(super) enum ProjReplace { span: Span, }, /// `project_replace = <ident>`. + #[allow(dead_code)] // false positive that fixed in Rust 1.38 Named { span: Span, ident: Ident, @@ -246,12 +247,12 @@ impl ProjReplace { /// Return the span of this argument. pub(super) fn span(&self) -> Option<Span> { match self { - ProjReplace::None => None, - ProjReplace::Named { span, .. } | ProjReplace::Unnamed { span, .. } => Some(*span), + Self::None => None, + Self::Named { span, .. } | Self::Unnamed { span, .. } => Some(*span), } } pub(super) fn ident(&self) -> Option<&Ident> { - if let ProjReplace::Named { ident, .. } = self { Some(ident) } else { None } + if let Self::Named { ident, .. } = self { Some(ident) } else { None } } } diff --git a/src/pin_project/attribute.rs b/src/pin_project/attribute.rs index 7945aba..92ed547 100644 --- a/src/pin_project/attribute.rs +++ b/src/pin_project/attribute.rs @@ -2,7 +2,7 @@ use proc_macro2::TokenStream; use quote::quote; use syn::{ parse::{Parse, ParseStream}, - *, + Attribute, Result, Token, Visibility, }; use super::PIN; @@ -36,7 +36,7 @@ pub(super) fn parse_attribute(args: &TokenStream, input: TokenStream) -> Result< }) } -#[allow(dead_code)] // https://github.com/rust-lang/rust/issues/56750 +#[allow(dead_code)] // false positive that fixed in Rust 1.39 struct Input { attrs: Vec<Attribute>, body: TokenStream, diff --git a/src/pin_project/derive.rs b/src/pin_project/derive.rs index 1a598b7..63cd142 100644 --- a/src/pin_project/derive.rs +++ b/src/pin_project/derive.rs @@ -1,6 +1,10 @@ use proc_macro2::{Delimiter, Group, Span, TokenStream}; use quote::{format_ident, quote, quote_spanned, ToTokens}; -use syn::{visit_mut::VisitMut, *}; +use syn::{ + parse_quote, token, visit_mut::VisitMut, Attribute, Data, DataEnum, DeriveInput, Error, Field, + Fields, FieldsNamed, FieldsUnnamed, Generics, Ident, Index, Lifetime, LifetimeDef, Meta, + MetaList, NestedMeta, Result, Token, Type, Variant, Visibility, WhereClause, +}; use super::{ args::{parse_args, Args, ProjReplace, UnpinImpl}, @@ -101,6 +105,9 @@ fn global_allowed_lints() -> TokenStream { #[allow(explicit_outlives_requirements)] // https://github.com/rust-lang/rust/issues/60993 #[allow(single_use_lifetimes)] // https://github.com/rust-lang/rust/issues/55058 #[allow(unreachable_pub)] // This lint warns `pub` field in private struct. + // This lint warns of `clippy::*` generated by external macros. + // We allow this lint for compatibility with older compilers. + #[allow(clippy::unknown_clippy_lints)] #[allow(clippy::pattern_type_mismatch)] #[allow(clippy::redundant_pub_crate)] // This lint warns `pub(crate)` field in private struct. } @@ -118,20 +125,20 @@ fn proj_allowed_lints(kind: TypeKind) -> (TokenStream, TokenStream, TokenStream) }; let global_allowed_lints = global_allowed_lints(); let proj_mut = quote! { + #global_allowed_lints #[allow(dead_code)] // This lint warns unused fields/variants. #[allow(clippy::mut_mut)] // This lint warns `&mut &mut <ty>`. #[allow(clippy::type_repetition_in_bounds)] // https://github.com/rust-lang/rust-clippy/issues/4326} - #global_allowed_lints }; let proj_ref = quote! { + #global_allowed_lints #[allow(dead_code)] // This lint warns unused fields/variants. #[allow(clippy::type_repetition_in_bounds)] // https://github.com/rust-lang/rust-clippy/issues/4326 - #global_allowed_lints }; let proj_own = quote! { + #global_allowed_lints #[allow(dead_code)] // This lint warns unused fields/variants. #large_enum_variant - #global_allowed_lints }; (proj_mut, proj_ref, proj_own) } @@ -500,7 +507,6 @@ fn visit_variants(cx: &mut Context<'_>, variants: &Variants) -> Result<Projected }, }; - let orig_ident = cx.orig.ident; let proj_ident = &cx.proj.mut_ident; let proj_ref_ident = &cx.proj.ref_ident; proj_variants.extend(quote! { @@ -513,19 +519,13 @@ fn visit_variants(cx: &mut Context<'_>, variants: &Variants) -> Result<Projected #ident #proj_own_fields, }); proj_arms.extend(quote! { - #orig_ident::#ident #proj_pat => { - #proj_ident::#ident #proj_body - } + Self::#ident #proj_pat => #proj_ident::#ident #proj_body, }); proj_ref_arms.extend(quote! { - #orig_ident::#ident #proj_pat => { - #proj_ref_ident::#ident #proj_body - } + Self::#ident #proj_pat => #proj_ref_ident::#ident #proj_body, }); proj_own_arms.extend(quote! { - #orig_ident::#ident #proj_pat => { - #proj_own_body - } + Self::#ident #proj_pat => { #proj_own_body } }); } @@ -545,6 +545,10 @@ fn visit_fields( fields: &Fields, delim: Delimiter, ) -> Result<ProjectedFields> { + fn surround(delim: Delimiter, tokens: TokenStream) -> TokenStream { + Group::new(delim, tokens).into_token_stream() + } + let mut proj_pat = TokenStream::new(); let mut proj_body = TokenStream::new(); let mut proj_fields = TokenStream::new(); @@ -553,7 +557,7 @@ fn visit_fields( let mut proj_move = TokenStream::new(); let mut pinned_bindings = Vec::with_capacity(fields.len()); - for (i, Field { attrs, vis, ident, colon_token, ty, .. }) in fields.iter().enumerate() { + for (i, Field { attrs, vis, ident, colon_token, ty }) in fields.iter().enumerate() { let binding = ident.clone().unwrap_or_else(|| format_ident!("_{}", i)); proj_pat.extend(quote!(#binding,)); if attrs.position_exact(PIN)?.is_some() { @@ -596,10 +600,6 @@ fn visit_fields( } } - fn surround(delim: Delimiter, tokens: TokenStream) -> TokenStream { - Group::new(delim, tokens).into_token_stream() - } - let proj_pat = surround(delim, proj_pat); let proj_body = surround(delim, proj_body); let proj_fields = surround(delim, proj_fields); diff --git a/src/pinned_drop.rs b/src/pinned_drop.rs index 86b0f47..ecf52dd 100644 --- a/src/pinned_drop.rs +++ b/src/pinned_drop.rs @@ -1,6 +1,10 @@ use proc_macro2::TokenStream; -use quote::{quote, ToTokens}; -use syn::{spanned::Spanned, visit_mut::VisitMut, *}; +use quote::{format_ident, quote, ToTokens}; +use syn::{ + parse_quote, spanned::Spanned, visit_mut::VisitMut, Error, FnArg, GenericArgument, ImplItem, + ItemImpl, Pat, PatIdent, Path, PathArguments, Result, ReturnType, Signature, Token, Type, + TypePath, TypeReference, +}; use crate::utils::{parse_as_empty, prepend_underscore_to_self, ReplaceReceiver, SliceExt}; @@ -196,7 +200,7 @@ fn expand_impl(item: &mut ItemImpl) { // `fn drop(mut self: Pin<&mut Self>)` -> `fn __drop_inner<T>(mut __self: Pin<&mut Receiver>)` let drop_inner = { let mut drop_inner = method.clone(); - let ident = Ident::new("__drop_inner", drop_inner.sig.ident.span()); + let ident = format_ident!("__drop_inner"); // Add a dummy `__drop_inner` function to prevent users call outer `__drop_inner`. drop_inner.block.stmts.insert(0, parse_quote!(fn #ident() {})); drop_inner.sig.ident = ident; diff --git a/src/utils.rs b/src/utils.rs index 2fd8a61..fe1bf35 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -3,9 +3,13 @@ use quote::{quote, quote_spanned, ToTokens}; use std::{iter::FromIterator, mem}; use syn::{ parse::{Parse, ParseBuffer, ParseStream}, + parse_quote, punctuated::Punctuated, + token, visit_mut::{self, VisitMut}, - *, + Attribute, ExprPath, ExprStruct, Generics, Ident, Item, Lifetime, LifetimeDef, Macro, PatPath, + PatStruct, PatTupleStruct, Path, PathArguments, PredicateType, QSelf, Result, Token, Type, + TypeParamBound, TypePath, Variant, Visibility, WherePredicate, }; pub(crate) type Variants = Punctuated<Variant, Token![,]>; |