Skip to content

Commit

Permalink
Disable derive feature of syn dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
taiki-e committed Aug 27, 2024
1 parent 470e219 commit 89a8fb8
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 25 deletions.
2 changes: 1 addition & 1 deletion pin-project-internal/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ proc-macro = true
[dependencies]
proc-macro2 = "1.0.60"
quote = "1.0.25"
syn = { version = "2.0.1", features = ["full", "visit-mut"] }
syn = { version = "2.0.1", default-features = false, features = ["parsing", "printing", "clone-impls", "proc-macro", "full", "visit-mut"] }

[dev-dependencies]
pin-project = { path = ".." }
Expand Down
48 changes: 25 additions & 23 deletions pin-project-internal/src/pin_project/derive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
use proc_macro2::{Delimiter, Group, Span, TokenStream};
use quote::{format_ident, quote, quote_spanned, ToTokens};
use syn::{
parse_quote, punctuated::Punctuated, token, visit_mut::VisitMut, Attribute, Data, DataEnum,
DeriveInput, Error, Field, Fields, FieldsNamed, FieldsUnnamed, Generics, Ident, Index,
Lifetime, LifetimeParam, Meta, Result, Token, Type, Variant, Visibility, WhereClause,
parse_quote, punctuated::Punctuated, token, visit_mut::VisitMut, Attribute, Error, Field,
Fields, FieldsNamed, FieldsUnnamed, Generics, Ident, Index, Item, Lifetime, LifetimeParam,
Meta, Result, Token, Type, Variant, Visibility, WhereClause,
};

use super::{
Expand All @@ -18,30 +18,31 @@ use crate::utils::{
};

pub(super) fn parse_derive(input: TokenStream) -> Result<TokenStream> {
let mut input: DeriveInput = syn::parse2(input)?;
let mut input: Item = syn::parse2(input)?;

let mut cx;
let mut generate = GenerateTokens::default();

let ident = &input.ident;
let ty_generics = input.generics.split_for_impl().1;
let self_ty = parse_quote!(#ident #ty_generics);
let mut visitor = ReplaceReceiver(&self_ty);
visitor.visit_generics_mut(&mut input.generics);
visitor.visit_data_mut(&mut input.data);

match &input.data {
Data::Struct(data) => {
cx = Context::new(&input.attrs, &input.vis, ident, &mut input.generics, Struct)?;
parse_struct(&mut cx, &data.fields, &mut generate)?;
match &mut input {
Item::Struct(input) => {
let ident = &input.ident;
let ty_generics = input.generics.split_for_impl().1;
let self_ty = parse_quote!(#ident #ty_generics);
let mut visitor = ReplaceReceiver(&self_ty);
visitor.visit_item_struct_mut(input);
cx = Context::new(&input.attrs, &input.vis, &input.ident, &mut input.generics, Struct)?;
parse_struct(&mut cx, &input.fields, &mut generate)?;
}
Data::Enum(data) => {
cx = Context::new(&input.attrs, &input.vis, ident, &mut input.generics, Enum)?;
parse_enum(&mut cx, data, &mut generate)?;
}
Data::Union(_) => {
bail!(input, "#[pin_project] attribute may only be used on structs or enums");
Item::Enum(input) => {
let ident = &input.ident;
let ty_generics = input.generics.split_for_impl().1;
let self_ty = parse_quote!(#ident #ty_generics);
let mut visitor = ReplaceReceiver(&self_ty);
visitor.visit_item_enum_mut(input);
cx = Context::new(&input.attrs, &input.vis, &input.ident, &mut input.generics, Enum)?;
parse_enum(&mut cx, input.brace_token, &input.variants, &mut generate)?;
}
_ => bail!(input, "#[pin_project] attribute may only be used on structs or enums"),
}

Ok(generate.into_tokens(&cx))
Expand Down Expand Up @@ -416,7 +417,8 @@ fn parse_struct<'a>(

fn parse_enum<'a>(
cx: &mut Context<'a>,
DataEnum { brace_token, variants, .. }: &'a DataEnum,
brace_token: token::Brace,
variants: &'a Punctuated<Variant, Token![,]>,
generate: &mut GenerateTokens,
) -> Result<()> {
if let ProjReplace::Unnamed { span } = &cx.project_replace {
Expand All @@ -433,7 +435,7 @@ fn parse_enum<'a>(
// Do this first for a better error message.
ensure_not_packed(&cx.orig, None)?;

validate_enum(*brace_token, variants)?;
validate_enum(brace_token, variants)?;

let ProjectedVariants {
proj_variants,
Expand Down
2 changes: 1 addition & 1 deletion tests/auxiliary/macro/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ proc-macro = true
[dependencies]
proc-macro2 = "1"
quote = "1"
syn = { version = "2", features = ["full"] }
syn = { version = "2", default-features = false, features = ["parsing", "printing", "proc-macro", "full"] }

[lints]
workspace = true

0 comments on commit 89a8fb8

Please sign in to comment.