@@ -509,6 +509,7 @@ let completionWithParser1 ~currentFile ~debug ~offset ~path ~posCursor ~text =
509
509
| Ppat_var {txt} -> commitFoundPat ~prefix: txt ()
510
510
| Ppat_construct ({txt = Lident prefix } , None) ->
511
511
commitFoundPat ~prefix ()
512
+ | Ppat_variant (prefix , None) -> commitFoundPat ~prefix: (" #" ^ prefix) ()
512
513
| Ppat_tuple patterns -> (
513
514
match patterns |> findPatTupleItemWithCursor ~pos: posBeforeCursor with
514
515
| Some itemNum -> appendNestedPat (Completable. PTupleItem {itemNum})
@@ -604,6 +605,45 @@ let completionWithParser1 ~currentFile ~debug ~offset ~path ~posCursor ~text =
604
605
appendNestedPat
605
606
(Completable. PVariantPayload
606
607
{constructorName = getUnqualifiedName txt; payloadNum}))
608
+ | Ppat_variant
609
+ ( txt,
610
+ Some {ppat_loc; ppat_desc = Ppat_construct ({txt = Lident " ()" }, _)}
611
+ )
612
+ when ppat_loc
613
+ |> CursorPosition. classifyLoc ~pos: posBeforeCursor
614
+ = HasCursor ->
615
+ (* Empty payload *)
616
+ appendNestedPat
617
+ (Completable. PPolyvariantPayload
618
+ {constructorName = txt; payloadNum = 0 });
619
+ commitFoundPat ~prefix: " " ()
620
+ | Ppat_variant
621
+ ( txt,
622
+ Some
623
+ {
624
+ ppat_loc;
625
+ ppat_desc =
626
+ Ppat_var _ | Ppat_record _ | Ppat_construct _ | Ppat_variant _;
627
+ } )
628
+ when ppat_loc
629
+ |> CursorPosition. classifyLoc ~pos: posBeforeCursor
630
+ = HasCursor ->
631
+ (* Single payload *)
632
+ appendNestedPat
633
+ (Completable. PPolyvariantPayload
634
+ {constructorName = txt; payloadNum = 0 })
635
+ | Ppat_variant (txt, Some {ppat_loc; ppat_desc = Ppat_tuple tupleItems})
636
+ when ppat_loc
637
+ |> CursorPosition. classifyLoc ~pos: posBeforeCursor
638
+ = HasCursor -> (
639
+ (* Multiple payloads with cursor in item *)
640
+ (* TODO: New item with comma *)
641
+ match tupleItems |> findPatTupleItemWithCursor ~pos: posBeforeCursor with
642
+ | None -> ()
643
+ | Some payloadNum ->
644
+ appendNestedPat
645
+ (Completable. PPolyvariantPayload {constructorName = txt; payloadNum})
646
+ )
607
647
| _ -> ()
608
648
in
609
649
let case (iterator : Ast_iterator.iterator ) (case : Parsetree.case ) =
0 commit comments