@@ -266,70 +266,7 @@ let rec extractFunctionType2 ?typeArgContext ~env ~package typ =
266
266
in
267
267
loop ?typeArgContext ~env [] typ
268
268
269
- (* * Pulls out a type we can complete from a type expr. *)
270
- let rec extractType ~env ~package (t : Types.type_expr ) =
271
- match t.desc with
272
- | Tlink t1 | Tsubst t1 | Tpoly (t1 , [] ) -> extractType ~env ~package t1
273
- | Tconstr (Path. Pident {name = "option" } , [payloadTypeExpr ], _ ) ->
274
- Some (Toption (env, TypeExpr payloadTypeExpr))
275
- | Tconstr (Path. Pident {name = "promise" } , [payloadTypeExpr ], _ ) ->
276
- Some (Tpromise (env, payloadTypeExpr))
277
- | Tconstr (Path. Pident {name = "array" } , [payloadTypeExpr ], _ ) ->
278
- Some (Tarray (env, TypeExpr payloadTypeExpr))
279
- | Tconstr (Path. Pident {name = "result" } , [okType ; errorType ], _ ) ->
280
- Some (Tresult {env; okType; errorType})
281
- | Tconstr (Path. Pident {name = "bool" } , [] , _ ) -> Some (Tbool env)
282
- | Tconstr (Path. Pident {name = "string" } , [] , _ ) -> Some (Tstring env)
283
- | Tconstr (Path. Pident {name = "exn" } , [] , _ ) -> Some (Texn env)
284
- | Tconstr (Pident {name = "function$" } , [t ; _ ], _ ) -> (
285
- (* Uncurried functions. *)
286
- match extractFunctionType t ~env ~package with
287
- | args , tRet when args <> [] ->
288
- Some (Tfunction {env; args; typ = t; uncurried = true ; returnType = tRet})
289
- | _args , _tRet -> None )
290
- | Tconstr (path , typeArgs , _ ) -> (
291
- match References. digConstructor ~env ~package path with
292
- | Some (env , {item = {decl = {type_manifest = Some t1 ; type_params} } } ) ->
293
- t1
294
- |> instantiateType ~type Params:type_params ~type Args
295
- |> extractType ~env ~package
296
- | Some (env , {name; item = {decl; kind = Type. Variant constructors } } ) ->
297
- Some
298
- (Tvariant
299
- {env; constructors; variantName = name.txt; variantDecl = decl})
300
- | Some (env , {item = {kind = Record fields } } ) ->
301
- Some (Trecord {env; fields; definition = `TypeExpr t})
302
- | Some (env , {item = {name = "t" } } ) -> Some (TtypeT {env; path})
303
- | None -> None
304
- | _ -> None )
305
- | Ttuple expressions -> Some (Tuple (env, expressions, t))
306
- | Tvariant {row_fields} ->
307
- let constructors =
308
- row_fields
309
- |> List. map (fun (label , field ) ->
310
- {
311
- name = label;
312
- displayName = Utils. printMaybeExoticIdent ~allow Uident:true label;
313
- args =
314
- (* Multiple arguments are represented as a Ttuple, while a single argument is just the type expression itself. *)
315
- (match field with
316
- | Types. Rpresent (Some typeExpr ) -> (
317
- match typeExpr.desc with
318
- | Ttuple args -> args
319
- | _ -> [typeExpr])
320
- | _ -> [] );
321
- })
322
- in
323
- Some (Tpolyvariant {env; constructors; typeExpr = t})
324
- | Tarrow _ -> (
325
- match extractFunctionType t ~env ~package with
326
- | args , tRet when args <> [] ->
327
- Some
328
- (Tfunction {env; args; typ = t; uncurried = false ; returnType = tRet})
329
- | _args , _tRet -> None )
330
- | _ -> None
331
-
332
- let rec extractType2 ?(printOpeningDebug = true )
269
+ let rec extractType ?(printOpeningDebug = true )
333
270
?(typeArgContext : typeArgContext option )
334
271
?(typeArgContextFromTypeManifest : typeArgContext option ) ~env ~package
335
272
(t : Types.type_expr ) =
@@ -346,7 +283,6 @@ let rec extractType2 ?(printOpeningDebug = true)
346
283
if Debug. verbose () && printOpeningDebug then
347
284
Printf. printf " [extract_type]--> %s"
348
285
(debugLogTypeArgContext typeArgContext));
349
- let extractType = extractType2 in
350
286
let instantiateType = instantiateType2 in
351
287
match t.desc with
352
288
| Tlink t1 | Tsubst t1 | Tpoly (t1 , [] ) ->
@@ -604,14 +540,14 @@ let extractTypeFromResolvedType (typ : Type.t) ~env ~full =
604
540
| Abstract _ | Open -> (
605
541
match typ.decl.type_manifest with
606
542
| None -> None
607
- | Some t -> t |> extractType ~env ~package: full.package)
543
+ | Some t -> t |> extractType ~env ~package: full.package |> getExtractedType )
608
544
609
545
(* * The context we just came from as we resolve the nested structure. *)
610
546
type ctx = Rfield of string (* * A record field of name *)
611
547
612
548
let rec resolveNested ?typeArgContext ~env ~full ~nested ?ctx
613
549
(typ : completionType ) =
614
- let extractType = extractType2 ?typeArgContext in
550
+ let extractType = extractType ?typeArgContext in
615
551
if Debug. verbose () then
616
552
Printf. printf
617
553
" [nested]--> running nested in env: %s. Has type arg ctx: %b\n "
@@ -826,7 +762,8 @@ let rec resolveNestedPatternPath (typ : innerType) ~env ~full ~nested =
826
762
if Debug. verbose () then print_endline " [nested_pattern_path]" ;
827
763
let t =
828
764
match typ with
829
- | TypeExpr t -> t |> extractType ~env ~package: full.package
765
+ | TypeExpr t ->
766
+ t |> extractType ~env ~package: full.package |> getExtractedType
830
767
| ExtractedType t -> Some t
831
768
in
832
769
match nested with
@@ -884,6 +821,7 @@ let rec resolveNestedPatternPath (typ : innerType) ~env ~full ~nested =
884
821
| Some typ ->
885
822
typ
886
823
|> extractType ~env ~package: full.package
824
+ |> getExtractedType
887
825
|> Utils.Option. flatMap (fun typ ->
888
826
ExtractedType typ
889
827
|> resolveNestedPatternPath ~env ~full ~nested ))
@@ -893,6 +831,7 @@ let rec resolveNestedPatternPath (typ : innerType) ~env ~full ~nested =
893
831
| Some typ ->
894
832
typ
895
833
|> extractType ~env ~package: full.package
834
+ |> getExtractedType
896
835
|> Utils.Option. flatMap (fun typ ->
897
836
ExtractedType typ
898
837
|> resolveNestedPatternPath ~env ~full ~nested ))
@@ -1026,7 +965,8 @@ module Codegen = struct
1026
965
let extractedType =
1027
966
match innerType with
1028
967
| ExtractedType t -> Some t
1029
- | TypeExpr t -> extractType t ~env ~package: full.package
968
+ | TypeExpr t ->
969
+ extractType t ~env ~package: full.package |> getExtractedType
1030
970
in
1031
971
let expandedBranches =
1032
972
match extractedType with
@@ -1045,9 +985,11 @@ module Codegen = struct
1045
985
|> List. map (fun (pat : Parsetree.pattern ) ->
1046
986
mkConstructPat ~payload: pat " Some" )))
1047
987
| Tresult {okType; errorType} ->
1048
- let extractedOkType = okType |> extractType ~env ~package: full.package in
988
+ let extractedOkType =
989
+ okType |> extractType ~env ~package: full.package |> getExtractedType
990
+ in
1049
991
let extractedErrorType =
1050
- errorType |> extractType ~env ~package: full.package
992
+ errorType |> extractType ~env ~package: full.package |> getExtractedType
1051
993
in
1052
994
let expandedOkBranches =
1053
995
match extractedOkType with
0 commit comments