@@ -744,7 +744,7 @@ let qualify
744
744
List. map
745
745
decorators
746
746
~f:
747
- (qualify_decorator
747
+ (qualify_expression
748
748
~qualify_strings: DoNotQualify
749
749
~scope: { scope with use_forward_references = true })
750
750
in
@@ -778,7 +778,7 @@ let qualify
778
778
}
779
779
in
780
780
let decorators =
781
- List. map decorators ~f: (qualify_decorator ~qualify_strings: DoNotQualify ~scope )
781
+ List. map decorators ~f: (qualify_expression ~qualify_strings: DoNotQualify ~scope )
782
782
in
783
783
let body =
784
784
let qualifier = qualify_if_needed ~qualifier name in
@@ -797,21 +797,25 @@ let qualify
797
797
let return_annotation =
798
798
return_annotation >> | qualify_expression ~scope ~qualify_strings: Qualify
799
799
in
800
- let qualify_decorator
801
- ({ Decorator. name = { Node. value = name ; _ } ; _ } as decorator )
802
- =
803
- match name |> Reference. as_list |> List. rev with
804
- | [" staticmethod" ]
805
- | [" classmethod" ]
806
- | [" property" ]
807
- | " getter" :: _
808
- | " setter" :: _
809
- | "deleter" :: _ ->
800
+ let qualify_decorator decorator =
801
+ let is_reserved name =
802
+ match Reference. as_list name |> List. rev with
803
+ | [" staticmethod" ]
804
+ | [" classmethod" ]
805
+ | [" property" ]
806
+ | " getter" :: _
807
+ | " setter" :: _
808
+ | "deleter" :: _ ->
809
+ true
810
+ | _ -> false
811
+ in
812
+ match Decorator. from_expression decorator with
813
+ | Some { Decorator. name = { Node. value = name ; _ } ; _ } when is_reserved name ->
810
814
decorator
811
815
| _ ->
812
816
(* TODO (T41755857): Decorator qualification logic should be slightly more
813
817
involved than this. *)
814
- qualify_decorator ~qualify_strings: DoNotQualify ~scope decorator
818
+ qualify_expression ~qualify_strings: DoNotQualify ~scope decorator
815
819
in
816
820
let decorators = List. map decorators ~f: qualify_decorator in
817
821
let signature =
@@ -1252,11 +1256,6 @@ let qualify
1252
1256
| Constant _ -> value
1253
1257
in
1254
1258
{ expression with Node. value }
1255
- and qualify_decorator ~qualify_strings ~scope { Decorator. name; arguments } =
1256
- {
1257
- Decorator. name = Node. map name ~f: (qualify_reference ~scope );
1258
- arguments = arguments >> | List. map ~f: (qualify_argument ~qualify_strings ~scope );
1259
- }
1260
1259
and qualify_argument { Call.Argument. name; value } ~qualify_strings ~scope =
1261
1260
let name =
1262
1261
let rename identifier =
@@ -3093,15 +3092,11 @@ module AccessCollector = struct
3093
3092
List. fold base_arguments ~init: collected ~f: (fun sofar { Call.Argument. value; _ } ->
3094
3093
from_expression sofar value)
3095
3094
in
3096
- List. map decorators ~f: Decorator. to_expression
3097
- |> List. fold ~init: collected ~f: from_expression
3095
+ List. fold ~init: collected ~f: from_expression decorators
3098
3096
| Define
3099
3097
{ Define. signature = { Define.Signature. decorators; parameters; return_annotation; _ }; _ }
3100
3098
->
3101
- let collected =
3102
- List. map decorators ~f: Decorator. to_expression
3103
- |> List. fold ~init: collected ~f: from_expression
3104
- in
3099
+ let collected = List. fold ~init: collected ~f: from_expression decorators in
3105
3100
let collected =
3106
3101
List. fold
3107
3102
parameters
@@ -3828,11 +3823,15 @@ let inline_six_metaclass ({ Source.statements; _ } as source) =
3828
3823
let transform_class
3829
3824
~class_statement :({ Class. base_arguments; decorators; _ } as class_statement )
3830
3825
=
3831
- let is_six_add_metaclass_decorator { Decorator. name; _ } =
3832
- Identifier. equal (Node. value name |> Reference. show) " six.add_metaclass"
3826
+ let is_six_add_metaclass_decorator expression =
3827
+ match Decorator. from_expression expression with
3828
+ | Some ({ Decorator. name = { Node. value = name; _ }; _ } as decorator)
3829
+ when Reference. equal name (Reference. create_from_list [" six" ; " add_metaclass" ]) ->
3830
+ Either. First decorator
3831
+ | _ -> Either. Second expression
3833
3832
in
3834
3833
let six_add_metaclass_decorators, rest =
3835
- List. partition_tf decorators ~f: is_six_add_metaclass_decorator
3834
+ List. partition_map decorators ~f: is_six_add_metaclass_decorator
3836
3835
in
3837
3836
match six_add_metaclass_decorators with
3838
3837
| [
0 commit comments