Skip to content

Commit

Permalink
[flow][match] Add AST visitor for match as pattern target
Browse files Browse the repository at this point in the history
Summary:
Add AST visitor for match as pattern target.

Changelog: [internal]

Reviewed By: SamChou19815

Differential Revision: D69949443

fbshipit-source-id: 247f72b7a97f379e4e15b230513ec44f0e28318d
  • Loading branch information
gkz authored and facebook-github-bot committed Feb 21, 2025
1 parent 82ba68f commit 0b8cc59
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 13 deletions.
16 changes: 9 additions & 7 deletions src/parser/flow_ast_mapper.ml
Original file line number Diff line number Diff line change
Expand Up @@ -2740,19 +2740,21 @@ class ['loc] mapper =
let open Ast.MatchPattern.AsPattern in
let { pattern; target; comments } = as_pattern in
let pattern' = this#match_pattern pattern in
let target' =
match target with
| Binding (loc, binding) ->
id_loc this#match_binding_pattern loc binding target (fun x -> Binding (loc, x))
| Identifier ident ->
id (this#pattern_identifier ~kind:Ast.Variable.Const) ident target (fun x -> Identifier x)
in
let target' = this#match_as_pattern_target target in
let comments' = this#syntax_opt comments in
if pattern == pattern' && target == target' && comments == comments' then
as_pattern
else
{ pattern = pattern'; target = target'; comments = comments' }

method match_as_pattern_target (target : ('loc, 'loc) Ast.MatchPattern.AsPattern.target) =
let open Ast.MatchPattern.AsPattern in
match target with
| Binding (loc, binding) ->
id_loc this#match_binding_pattern loc binding target (fun x -> Binding (loc, x))
| Identifier ident ->
id (this#pattern_identifier ~kind:Ast.Variable.Const) ident target (fun x -> Identifier x)

method member _loc (expr : ('loc, 'loc) Ast.Expression.Member.t) =
let open Ast.Expression.Member in
let { _object; property; comments } = expr in
Expand Down
14 changes: 8 additions & 6 deletions src/parser_utils/flow_polymorphic_ast_mapper.ml
Original file line number Diff line number Diff line change
Expand Up @@ -2251,15 +2251,17 @@ class virtual ['M, 'T, 'N, 'U] mapper =
let open Ast.MatchPattern.AsPattern in
let { pattern; target; comments } = as_pattern in
let pattern' = this#match_pattern pattern in
let target' =
match target with
| Binding (loc, binding) ->
Binding (this#on_loc_annot loc, this#match_binding_pattern binding)
| Identifier id -> Identifier (this#pattern_identifier ~kind:Ast.Variable.Const id)
in
let target' = this#match_as_pattern_target target in
let comments' = this#syntax_opt comments in
{ pattern = pattern'; target = target'; comments = comments' }

method match_as_pattern_target (target : ('M, 'T) Ast.MatchPattern.AsPattern.target)
: ('N, 'U) Ast.MatchPattern.AsPattern.target =
let open Ast.MatchPattern.AsPattern in
match target with
| Binding (loc, binding) -> Binding (this#on_loc_annot loc, this#match_binding_pattern binding)
| Identifier id -> Identifier (this#pattern_identifier ~kind:Ast.Variable.Const id)

method member (_annot : 'T) (expr : ('M, 'T) Ast.Expression.Member.t)
: ('N, 'U) Ast.Expression.Member.t =
let open Ast.Expression.Member in
Expand Down
3 changes: 3 additions & 0 deletions src/parser_utils/flow_polymorphic_ast_mapper.mli
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,9 @@ class virtual ['M, 'T, 'N, 'U] mapper :
method match_as_pattern :
('M, 'T) Ast.MatchPattern.AsPattern.t -> ('N, 'U) Ast.MatchPattern.AsPattern.t

method match_as_pattern_target :
('M, 'T) Ast.MatchPattern.AsPattern.target -> ('N, 'U) Ast.MatchPattern.AsPattern.target

method member : 'T -> ('M, 'T) Ast.Expression.Member.t -> ('N, 'U) Ast.Expression.Member.t

method member_private_name : 'M Flow_ast.PrivateName.t -> 'N Ast.PrivateName.t
Expand Down

0 comments on commit 0b8cc59

Please sign in to comment.