@@ -237,7 +237,7 @@ module Ast =
237237 | SynPat.Attrib( pattern, _, _)
238238 | SynPat.Paren( pattern, _) -> add <| Pattern pattern
239239 | SynPat.Named(_) -> ()
240- | SynPat.Record( patternsAndIdentifier , _) -> List.revIter ( fun ( _ , _ , pattern ) -> pattern | > Pattern |> add) patternsAndIdentifier
240+ | SynPat.Record( patPairFieldList , _) -> patPairFieldList |> List.revIter(_. Pattern > > Pattern >> add)
241241 | SynPat.Const(_)
242242 | SynPat.Wild(_)
243243 | SynPat.FromParseError(_)
@@ -303,13 +303,6 @@ module Ast =
303303 | SynExpr.DotNamedIndexedPropertySet( expression, _, expression1, expression2, _)
304304 | SynExpr.For(_, _, _, _, expression, _, expression1, expression2, _) ->
305305 addMany [ Expression expression2; Expression expression1; Expression expression]
306- | SynExpr.LetOrUseBang(_, _, _, pattern, rightHandSide, andBangs, leftHandSide, _, _) ->
307- addMany [ Expression rightHandSide; Expression leftHandSide]
308- // TODO: is the the correct way to handle the new `and!` syntax?
309- List.iter ( fun ( SynExprAndBang ( _ , _ , _ , pattern , body , _ , _ )) ->
310- addMany [ Expression body; Pattern pattern]
311- ) andBangs
312- add <| Pattern pattern
313306 | SynExpr.ForEach(_, _, _, _, pattern, expression, expression1, _) ->
314307 addMany [ Expression expression1; Expression expression; Pattern pattern]
315308 | SynExpr.MatchLambda(_, _, matchClauses, _, _) ->
@@ -327,9 +320,22 @@ module Ast =
327320 | SynExpr.Upcast( expression, synType, _)
328321 | SynExpr.Downcast( expression, synType, _) ->
329322 addMany [ Type synType; Expression expression]
330- | SynExpr.LetOrUse(_, _, bindings, expression, _, _) ->
323+ // regular let or use
324+ | SynExpr.LetOrUse(_, _, _, false , bindings, expression, _, _) ->
331325 add <| Expression expression
332326 List.revIter ( Binding >> add) bindings
327+ // let! or use!
328+ | SynExpr.LetOrUse(_, _, _, true , bindings, leftHandSide, _, _) ->
329+ match bindings with
330+ | firstBinding :: andBangs ->
331+ match firstBinding with
332+ | SynBinding( headPat = pattern; expr = rightHandSide) ->
333+ addMany [ Expression rightHandSide; Expression leftHandSide]
334+ List.iter ( fun ( SynBinding ( headPat = pattern ; expr = body )) ->
335+ addMany [ Expression body; Pattern pattern]
336+ ) andBangs
337+ add <| Pattern pattern
338+ | [] -> () // error case. @@TODO@@ any other handling needed here?
333339 | SynExpr.Ident( ident) -> add <| Identifier([ ident.idText], ident.idRange)
334340 | SynExpr.LongIdent(_, SynLongIdent( ident, _, _), _, range) ->
335341 add <| Identifier( List.map ( fun ( identifier : Ident ) -> identifier.idText) ident, range)
@@ -414,7 +420,7 @@ module Ast =
414420 | SynArgPats.Pats( patterns) ->
415421 patterns |> List.revIter ( Pattern >> add)
416422 | SynArgPats.NamePatPairs( namePatterns, _, _) ->
417- namePatterns |> List.revIter ( fun ( _ , _ , pattern ) -> pattern | > Pattern | > add)
423+ namePatterns |> List.revIter (_. Pattern > > Pattern > > add)
418424
419425 let inline private typeRepresentationChildren node add =
420426 match node with
@@ -471,7 +477,7 @@ module Ast =
471477 | Else( expression)
472478 | Expression( expression) -> expressionChildren expression add
473479
474- | File( ParsedInput.ImplFile( ParsedImplFileInput(_, _, _, _, _, moduleOrNamespaces, _, _, _ ))) ->
480+ | File( ParsedInput.ImplFile( ParsedImplFileInput( contents = moduleOrNamespaces))) ->
475481 moduleOrNamespaces |> List.revIter ( ModuleOrNamespace >> add)
476482
477483 | UnionCase( unionCase) -> unionCaseChildren unionCase add
0 commit comments