mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-10 22:54:12 +00:00
Merge pull request #2 from DioxusLabs/jk/fix-component-macro-on-breaking
Fix: quick tweak to allow #[component] macro working
This commit is contained in:
commit
8e08c736df
2 changed files with 8 additions and 11 deletions
|
@ -47,7 +47,7 @@ fn get_props_struct(component_body: &ComponentBody) -> ItemStruct {
|
|||
} = sig;
|
||||
|
||||
// Skip first arg since that's the context
|
||||
let struct_fields = inputs.iter().skip(1).map(move |f| {
|
||||
let struct_fields = inputs.iter().map(move |f| {
|
||||
match f {
|
||||
FnArg::Receiver(_) => unreachable!(), // Unreachable because of ComponentBody parsing
|
||||
FnArg::Typed(pt) => {
|
||||
|
@ -74,9 +74,9 @@ fn get_props_struct(component_body: &ComponentBody) -> ItemStruct {
|
|||
};
|
||||
|
||||
let struct_attrs = if first_lifetime.is_some() {
|
||||
quote! { #[derive(Props)] }
|
||||
quote! { #[derive(Props, Clone)] }
|
||||
} else {
|
||||
quote! { #[derive(Props, PartialEq)] }
|
||||
quote! { #[derive(Props, Clone, PartialEq)] }
|
||||
};
|
||||
|
||||
let struct_generics = if first_lifetime.is_some() {
|
||||
|
@ -245,7 +245,7 @@ fn get_function(component_body: &ComponentBody) -> ItemFn {
|
|||
let struct_ident = Ident::new(&format!("{fn_ident}Props"), fn_ident.span());
|
||||
|
||||
// Skip first arg since that's the context
|
||||
let struct_field_names = inputs.iter().skip(1).filter_map(|f| match f {
|
||||
let struct_field_names = inputs.iter().filter_map(|f| match f {
|
||||
FnArg::Receiver(_) => unreachable!(), // ComponentBody prohibits receiver parameters.
|
||||
FnArg::Typed(pt) => Some(&pt.pat),
|
||||
});
|
||||
|
@ -256,7 +256,7 @@ fn get_function(component_body: &ComponentBody) -> ItemFn {
|
|||
None
|
||||
};
|
||||
|
||||
let (scope_lifetime, fn_generics) = if let Some(lt) = first_lifetime {
|
||||
let (_scope_lifetime, fn_generics) = if let Some(lt) = first_lifetime {
|
||||
(quote! { #lt, }, generics.clone())
|
||||
} else {
|
||||
let lifetime: LifetimeParam = parse_quote! { 'a };
|
||||
|
@ -296,7 +296,7 @@ fn get_function(component_body: &ComponentBody) -> ItemFn {
|
|||
#asyncness #vis fn #fn_ident #fn_generics (__props: #struct_ident #generics_no_bounds) #fn_output
|
||||
#where_clause
|
||||
{
|
||||
let #struct_ident { #(#struct_field_names),* } = &__props;
|
||||
let #struct_ident { #(#struct_field_names),* } = __props;
|
||||
#fn_block
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,11 +39,8 @@ pub fn derive_typed_builder(input: TokenStream) -> TokenStream {
|
|||
|
||||
/// The rsx! macro makes it easy for developers to write jsx-style markup in their components.
|
||||
#[proc_macro]
|
||||
pub fn rsx(s: TokenStream) -> TokenStream {
|
||||
match syn::parse::<rsx::CallBody>(s) {
|
||||
Err(err) => err.to_compile_error().into(),
|
||||
Ok(body) => body.to_token_stream().into(),
|
||||
}
|
||||
pub fn rsx(tokens: TokenStream) -> TokenStream {
|
||||
render(tokens)
|
||||
}
|
||||
|
||||
/// The render! macro makes it easy for developers to write jsx-style markup in their components.
|
||||
|
|
Loading…
Reference in a new issue