@@ -505,6 +505,7 @@ impl<'a> ConvertToAst<(&ast::Program, BindgenAttrs, &'a Option<ast::ImportModule
505
505
false ,
506
506
None ,
507
507
false ,
508
+ Some ( & [ "default" ] ) ,
508
509
) ?
509
510
. 0 ;
510
511
let catch = opts. catch ( ) . is_some ( ) ;
@@ -793,14 +794,18 @@ impl ConvertToAst<BindgenAttrs> for syn::ItemFn {
793
794
false ,
794
795
None ,
795
796
false ,
797
+ None ,
796
798
) ?;
797
799
attrs. check_used ( ) ;
798
800
Ok ( ret. 0 )
799
801
}
800
802
}
801
803
802
- pub ( crate ) fn is_js_keyword ( keyword : & str ) -> bool {
803
- JS_KEYWORDS . contains ( & keyword)
804
+ pub ( crate ) fn is_js_keyword ( keyword : & str , skip : Option < & [ & str ] > ) -> bool {
805
+ JS_KEYWORDS
806
+ . iter ( )
807
+ . filter ( |keyword| skip. filter ( |skip| skip. contains ( keyword) ) . is_none ( ) )
808
+ . any ( |this| * this == keyword)
804
809
}
805
810
806
811
/// Construct a function (and gets the self type if appropriate) for our AST from a syn function.
@@ -814,6 +819,7 @@ fn function_from_decl(
814
819
allow_self : bool ,
815
820
self_ty : Option < & Ident > ,
816
821
is_from_impl : bool ,
822
+ skip_keywords : Option < & [ & str ] > ,
817
823
) -> Result < ( ast:: Function , Option < ast:: MethodSelf > ) , Diagnostic > {
818
824
if sig. variadic . is_some ( ) {
819
825
bail_span ! ( sig. variadic, "can't #[wasm_bindgen] variadic functions" ) ;
@@ -852,7 +858,7 @@ fn function_from_decl(
852
858
let replace_colliding_arg = |i : & mut syn:: PatType | {
853
859
if let syn:: Pat :: Ident ( ref mut i) = * i. pat {
854
860
let ident = i. ident . to_string ( ) ;
855
- if is_js_keyword ( ident. as_str ( ) ) {
861
+ if is_js_keyword ( ident. as_str ( ) , skip_keywords ) {
856
862
i. ident = Ident :: new ( format ! ( "_{}" , ident) . as_str ( ) , i. ident . span ( ) ) ;
857
863
}
858
864
}
@@ -889,29 +895,33 @@ fn function_from_decl(
889
895
syn:: ReturnType :: Type ( _, ty) => Some ( replace_self ( * ty) ) ,
890
896
} ;
891
897
892
- let ( name, name_span, renamed_via_js_name) = if let Some ( ( js_name, js_name_span) ) =
893
- opts. js_name ( )
894
- {
895
- let kind = operation_kind ( opts) ;
896
- let prefix = match kind {
897
- OperationKind :: Setter ( _) => "set_" ,
898
- _ => "" ,
899
- } ;
900
- let name = if prefix. is_empty ( ) && opts. method ( ) . is_none ( ) && is_js_keyword ( js_name) {
901
- format ! ( "_{}" , js_name)
898
+ let ( name, name_span, renamed_via_js_name) =
899
+ if let Some ( ( js_name, js_name_span) ) = opts. js_name ( ) {
900
+ let kind = operation_kind ( opts) ;
901
+ let prefix = match kind {
902
+ OperationKind :: Setter ( _) => "set_" ,
903
+ _ => "" ,
904
+ } ;
905
+ let name = if prefix. is_empty ( )
906
+ && opts. method ( ) . is_none ( )
907
+ && is_js_keyword ( js_name, skip_keywords)
908
+ {
909
+ format ! ( "_{}" , js_name)
910
+ } else {
911
+ format ! ( "{}{}" , prefix, js_name)
912
+ } ;
913
+ ( name, js_name_span, true )
902
914
} else {
903
- format ! ( "{}{}" , prefix, js_name)
904
- } ;
905
- ( name, js_name_span, true )
906
- } else {
907
- let name =
908
- if !is_from_impl && opts. method ( ) . is_none ( ) && is_js_keyword ( & decl_name. to_string ( ) ) {
915
+ let name = if !is_from_impl
916
+ && opts. method ( ) . is_none ( )
917
+ && is_js_keyword ( & decl_name. to_string ( ) , skip_keywords)
918
+ {
909
919
format ! ( "_{}" , decl_name)
910
920
} else {
911
921
decl_name. to_string ( )
912
922
} ;
913
- ( name, decl_name. span ( ) , false )
914
- } ;
923
+ ( name, decl_name. span ( ) , false )
924
+ } ;
915
925
Ok ( (
916
926
ast:: Function {
917
927
arguments,
@@ -1188,6 +1198,7 @@ impl<'a> MacroParse<&ClassMarker> for &'a mut syn::ImplItemFn {
1188
1198
true ,
1189
1199
Some ( class) ,
1190
1200
true ,
1201
+ None ,
1191
1202
) ?;
1192
1203
let method_kind = if opts. constructor ( ) . is_some ( ) {
1193
1204
ast:: MethodKind :: Constructor
0 commit comments