@@ -75,6 +75,7 @@ pub fn derive_godot_class(item: venial::Item) -> ParseResult<TokenStream> {
7575 let mut create_fn = quote ! { None } ;
7676 let mut recreate_fn = quote ! { None } ;
7777 let mut is_instantiable = true ;
78+ let deprecations = & fields. deprecations ;
7879
7980 match struct_cfg. init_strategy {
8081 InitStrategy :: Generated => {
@@ -137,6 +138,7 @@ pub fn derive_godot_class(item: venial::Item) -> ParseResult<TokenStream> {
137138 #godot_exports_impl
138139 #user_class_impl
139140 #init_expecter
141+ #( #deprecations ) *
140142
141143 :: godot:: sys:: plugin_add!( __GODOT_PLUGIN_REGISTRY in #prv; #prv:: ClassPlugin {
142144 class_name: #class_name_obj,
@@ -214,7 +216,7 @@ fn make_godot_init_impl(class_name: &Ident, fields: &Fields) -> TokenStream {
214216 let rest_init = fields. all_fields . iter ( ) . map ( |field| {
215217 let field_name = field. name . clone ( ) ;
216218 let value_expr = field
217- . default
219+ . default_val
218220 . clone ( )
219221 . unwrap_or_else ( || quote ! { :: std:: default :: Default :: default ( ) } ) ;
220222
@@ -399,6 +401,7 @@ fn parse_fields(
399401) -> ParseResult < Fields > {
400402 let mut all_fields = vec ! [ ] ;
401403 let mut base_field = Option :: < Field > :: None ;
404+ let mut deprecations = vec ! [ ] ;
402405
403406 // Attributes on struct fields
404407 for ( named_field, _punct) in named_fields {
@@ -425,9 +428,23 @@ fn parse_fields(
425428 ) ;
426429 }
427430
431+ // #[init(val = expr)]
432+ if let Some ( default) = parser. handle_expr ( "val" ) ? {
433+ field. default_val = Some ( default) ;
434+ }
435+
428436 // #[init(default = expr)]
429437 if let Some ( default) = parser. handle_expr ( "default" ) ? {
430- field. default = Some ( default) ;
438+ if field. default_val . is_some ( ) {
439+ return bail ! (
440+ parser. span( ) ,
441+ "Cannot use both `val` and `default` keys in #[init]; prefer using `val`"
442+ ) ;
443+ }
444+ field. default_val = Some ( default) ;
445+ deprecations. push ( quote ! {
446+ :: godot:: __deprecated:: emit_deprecated_warning!( init_default) ;
447+ } )
431448 }
432449
433450 // #[init(node = "NodePath")]
@@ -442,7 +459,7 @@ fn parse_fields(
442459 ) ;
443460 }
444461
445- if field. default . is_some ( ) {
462+ if field. default_val . is_some ( ) {
446463 return bail ! (
447464 parser. span( ) ,
448465 "The key `node` in attribute #[init] is mutually exclusive with the key `default`\n \
@@ -452,7 +469,7 @@ fn parse_fields(
452469 ) ;
453470 }
454471
455- field. default = Some ( quote ! {
472+ field. default_val = Some ( quote ! {
456473 OnReady :: node( #node_path)
457474 } ) ;
458475 }
@@ -491,7 +508,7 @@ fn parse_fields(
491508 if field. is_onready
492509 || field. var . is_some ( )
493510 || field. export . is_some ( )
494- || field. default . is_some ( )
511+ || field. default_val . is_some ( )
495512 {
496513 return bail ! (
497514 named_field,
@@ -516,6 +533,7 @@ fn parse_fields(
516533 Ok ( Fields {
517534 all_fields,
518535 base_field,
536+ deprecations
519537 } )
520538}
521539
0 commit comments