@@ -112,7 +112,8 @@ let rec extractType ~env ~package (t : Types.type_expr) =
112112 match t.desc with
113113 | Tlink t1 | Tsubst t1 | Tpoly (t1 , [] ) -> extractType ~env ~package t1
114114 | Tconstr (Path. Pident {name = "option" } , [payloadTypeExpr ], _ ) ->
115- Some (Toption (env, payloadTypeExpr))
115+ payloadTypeExpr |> extractType ~env ~package
116+ |> Option. map (fun payloadTyp -> Toption (env, payloadTyp))
116117 | Tconstr (Path. Pident {name = "array" } , [payloadTypeExpr ], _ ) ->
117118 Some (Tarray (env, payloadTypeExpr))
118119 | Tconstr (Path. Pident {name = "bool" } , [] , _ ) -> Some (Tbool env)
@@ -299,10 +300,7 @@ let rec resolveNested (typ : completionType) ~env ~full ~nested =
299300 Some (Completable. RecordField {seenFields}) )
300301 | NVariantPayload {constructorName = " Some" ; itemNum = 0 }, Toption (env, typ)
301302 ->
302- typ
303- |> extractType ~env ~package: full.package
304- |> Utils.Option. flatMap (fun typ ->
305- typ |> resolveNested ~env ~full ~nested )
303+ typ |> resolveNested ~env ~full ~nested
306304 | NVariantPayload {constructorName; itemNum}, Tvariant {env; constructors}
307305 -> (
308306 match
@@ -400,18 +398,23 @@ let printRecordFromFields ?name (fields : field list) =
400398 |> String. concat " , " )
401399 ^ " }"
402400
403- let extractedTypeToString = function
401+ let rec extractedTypeToString = function
404402 | Tuple (_, _, typ)
405- | Toption (_, typ)
406403 | Tpolyvariant {typeExpr = typ}
407404 | Tfunction {typ}
408405 | Trecord {definition = `TypeExpr typ } ->
409406 Shared. typeToString typ
410407 | Tbool _ -> " bool"
411408 | Tstring _ -> " string"
412409 | Tarray (_ , innerTyp ) -> " array<" ^ Shared. typeToString innerTyp ^ " >"
410+ | Toption (_ , typ ) -> " option<" ^ extractedTypeToString typ ^ " >"
413411 | Tvariant {variantDecl; variantName} ->
414412 Shared. declToString variantName variantDecl
415413 | Trecord {definition = `NameOnly name ; fields} ->
416414 printRecordFromFields ~name fields
417- | TinlineRecord {fields} -> printRecordFromFields fields
415+ | TinlineRecord {fields} -> printRecordFromFields fields
416+
417+ let unwrapCompletionTypeIfOption (t : SharedTypes.completionType ) =
418+ match t with
419+ | Toption (_ , unwrapped ) -> unwrapped
420+ | _ -> t
0 commit comments