@@ -475,6 +475,9 @@ type Type =
475475 | Intersection n -> n
476476
477477/// A pattern composed from a left hand-side pattern, a single text token/operator and a right hand-side pattern.
478+ /// Example (Or): ` A | B `
479+ /// Example (As): ` x as y `
480+ /// Example (ListCons): ` head :: tail `
478481type PatLeftMiddleRight ( lhs : Pattern , middle : Choice < SingleTextNode , string >, rhs : Pattern , range ) =
479482 inherit NodeBase( range)
480483
@@ -489,12 +492,14 @@ type PatLeftMiddleRight(lhs: Pattern, middle: Choice<SingleTextNode, string>, rh
489492 member val Middle = middle
490493 member val RightHandSide = rhs
491494
495+ /// Example: ` pat1 & pat2 & pat3 `
492496type PatAndsNode ( pats : Pattern list , range ) =
493497 inherit NodeBase( range)
494498
495499 override val Children : Node array = [| yield ! List.map Pattern.Node pats |]
496500 member val Patterns = pats
497501
502+ /// Example: ` [<Attr>] pat: Type ` (attributed/typed parameter pattern)
498503type PatParameterNode ( attributes : MultipleAttributeListNode option , pat : Pattern , t : Type option , range ) =
499504 inherit NodeBase( range)
500505
@@ -507,6 +512,7 @@ type PatParameterNode(attributes: MultipleAttributeListNode option, pat: Pattern
507512 member val Pattern = pat
508513 member val Type = t
509514
515+ /// Example: ` ( * ) ` (operator name used as a pattern in member definitions)
510516type PatNamedParenStarIdentNode
511517 (
512518 accessibility: SingleTextNode option,
@@ -528,6 +534,7 @@ type PatNamedParenStarIdentNode
528534 member val Name = name
529535 member val ClosingParen = closingParen
530536
537+ /// Example: ` x ` or ` private x ` (a simple named binding pattern)
531538type PatNamedNode ( accessibility : SingleTextNode option , name : SingleTextNode , range ) =
532539 inherit NodeBase( range)
533540
@@ -542,6 +549,7 @@ type NamePatPairNode(fieldName: IdentListNode, equals: SingleTextNode, pat: Patt
542549 member val Equals = equals
543550 member val Pattern = pat
544551
552+ /// Example: ` MyUnion(field1 = x; field2 = y) ` (named field patterns on a union case)
545553type PatNamePatPairsNode
546554 (
547555 identifier: IdentListNode,
@@ -566,6 +574,7 @@ type PatNamePatPairsNode
566574 member val Pairs = pairs
567575 member val ClosingParen = closingParen
568576
577+ /// Example: ` Some x ` or ` MyModule.MyDU value ` (a union case or long-ident pattern with optional sub-patterns)
569578type PatLongIdentNode
570579 (
571580 accessibility: SingleTextNode option,
@@ -587,6 +596,7 @@ type PatLongIdentNode
587596 member val TyparDecls = typarDecls
588597 member val Parameters = parameters
589598
599+ /// Example: ` (pat) ` (a parenthesised pattern)
590600type PatParenNode ( openingParen : SingleTextNode , pat : Pattern , closingParen : SingleTextNode , range ) =
591601 inherit NodeBase( range)
592602
@@ -596,6 +606,7 @@ type PatParenNode(openingParen: SingleTextNode, pat: Pattern, closingParen: Sing
596606 member val Pattern = pat
597607 member val ClosingParen = closingParen
598608
609+ /// Example: ` a, b, c ` (a tuple pattern)
599610type PatTupleNode ( items : Choice < Pattern , SingleTextNode > list , range ) =
600611 inherit NodeBase( range)
601612
@@ -607,12 +618,14 @@ type PatTupleNode(items: Choice<Pattern, SingleTextNode> list, range) =
607618
608619 member val Items = items
609620
621+ /// Example: ` struct (a, b) ` (a struct tuple pattern)
610622type PatStructTupleNode ( pats : Pattern list , range ) =
611623 inherit NodeBase( range)
612624
613625 override val Children : Node array = [| yield ! ( List.map Pattern.Node pats) |]
614626 member val Patterns = pats
615627
628+ /// Example: ` [a; b; c] ` (list pattern) or ` [| a; b; c |] ` (array pattern)
616629type PatArrayOrListNode ( openToken : SingleTextNode , pats : Pattern list , closeToken : SingleTextNode , range ) =
617630 inherit NodeBase( range)
618631
@@ -622,6 +635,7 @@ type PatArrayOrListNode(openToken: SingleTextNode, pats: Pattern list, closeToke
622635 member val Patterns = pats
623636 member val CloseToken = closeToken
624637
638+ /// Example: ` { Field1 = x; Field2 = y } ` (a record pattern)
625639type PatRecordNode ( openingNode : SingleTextNode , fields : NamePatPairNode list , closingNode : SingleTextNode , range ) =
626640 inherit NodeBase( range)
627641
@@ -630,6 +644,7 @@ type PatRecordNode(openingNode: SingleTextNode, fields: NamePatPairNode list, cl
630644 member val Fields = fields
631645 member val ClosingNode = closingNode
632646
647+ /// Example: ` :? SomeType ` (a type-test pattern)
633648type PatIsInstNode ( token : SingleTextNode , t : Type , range ) =
634649 inherit NodeBase( range)
635650 override val Children : Node array = [| yield token; yield Type.Node t |]
0 commit comments