#![allow(dead_code)] #![cfg(feature = "suggestions")] use darling::{FromDeriveInput, FromMeta}; use syn::parse_quote; #[derive(Debug, FromDeriveInput)] #[darling(attributes(suggest))] struct Lorem { ipsum: String, dolor: Dolor, // This field is included to make sure that skipped fields aren't suggested. #[darling(skip)] amet: bool, } #[derive(Debug, FromMeta)] struct Dolor { sit: bool, } #[test] fn suggest_dolor() { let input: syn::DeriveInput = parse_quote! { #[suggest(ipsum = "Hello", dolorr(sit))] pub struct Foo; }; let result = Lorem::from_derive_input(&input).unwrap_err(); assert_eq!(2, result.len()); assert!(format!("{}", result).contains("Did you mean")); } #[test] fn dont_suggest_skipped_field() { let input: syn::DeriveInput = parse_quote! { #[suggest(ipsum = "Hello", dolor(sit), amt)] pub struct Foo; }; let result = Lorem::from_derive_input(&input).unwrap_err(); assert_eq!(1, result.len()); assert!(!format!("{}", result).contains("amet")); }