#![allow(clippy::needless_lifetimes, clippy::uninlined_format_args)] #[macro_use] mod macros; use syn::{parse_quote, TraitItemFn}; #[test] fn test_by_value() { let TraitItemFn { sig, .. } = parse_quote! { fn by_value(self: Self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { colon_token: Some, ty: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }) "#); } #[test] fn test_by_mut_value() { let TraitItemFn { sig, .. } = parse_quote! { fn by_mut(mut self: Self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { mutability: Some, colon_token: Some, ty: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }) "#); } #[test] fn test_by_ref() { let TraitItemFn { sig, .. } = parse_quote! { fn by_ref(self: &Self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { colon_token: Some, ty: Type::Reference { elem: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }, }) "#); } #[test] fn test_by_box() { let TraitItemFn { sig, .. } = parse_quote! { fn by_box(self: Box); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { colon_token: Some, ty: Type::Path { path: Path { segments: [ PathSegment { ident: "Box", arguments: PathArguments::AngleBracketed { args: [ GenericArgument::Type(Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }), ], }, }, ], }, }, }) "#); } #[test] fn test_by_pin() { let TraitItemFn { sig, .. } = parse_quote! { fn by_pin(self: Pin); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { colon_token: Some, ty: Type::Path { path: Path { segments: [ PathSegment { ident: "Pin", arguments: PathArguments::AngleBracketed { args: [ GenericArgument::Type(Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }), ], }, }, ], }, }, }) "#); } #[test] fn test_explicit_type() { let TraitItemFn { sig, .. } = parse_quote! { fn explicit_type(self: Pin); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { colon_token: Some, ty: Type::Path { path: Path { segments: [ PathSegment { ident: "Pin", arguments: PathArguments::AngleBracketed { args: [ GenericArgument::Type(Type::Path { path: Path { segments: [ PathSegment { ident: "MyType", }, ], }, }), ], }, }, ], }, }, }) "#); } #[test] fn test_value_shorthand() { let TraitItemFn { sig, .. } = parse_quote! { fn value_shorthand(self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { ty: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }) "#); } #[test] fn test_mut_value_shorthand() { let TraitItemFn { sig, .. } = parse_quote! { fn mut_value_shorthand(mut self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { mutability: Some, ty: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }) "#); } #[test] fn test_ref_shorthand() { let TraitItemFn { sig, .. } = parse_quote! { fn ref_shorthand(&self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { reference: Some(None), ty: Type::Reference { elem: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }, }) "#); } #[test] fn test_ref_shorthand_with_lifetime() { let TraitItemFn { sig, .. } = parse_quote! { fn ref_shorthand(&'a self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { reference: Some(Some(Lifetime { ident: "a", })), ty: Type::Reference { lifetime: Some(Lifetime { ident: "a", }), elem: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }, }) "#); } #[test] fn test_ref_mut_shorthand() { let TraitItemFn { sig, .. } = parse_quote! { fn ref_mut_shorthand(&mut self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { reference: Some(None), mutability: Some, ty: Type::Reference { mutability: Some, elem: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }, }) "#); } #[test] fn test_ref_mut_shorthand_with_lifetime() { let TraitItemFn { sig, .. } = parse_quote! { fn ref_mut_shorthand(&'a mut self); }; snapshot!(&sig.inputs[0], @r#" FnArg::Receiver(Receiver { reference: Some(Some(Lifetime { ident: "a", })), mutability: Some, ty: Type::Reference { lifetime: Some(Lifetime { ident: "a", }), mutability: Some, elem: Type::Path { path: Path { segments: [ PathSegment { ident: "Self", }, ], }, }, }, }) "#); }