@@ -2256,20 +2256,6 @@ module V4 = struct
2256
2256
(argToType ~newtypes ~type Constraints)
2257
2257
[] namedArgList
2258
2258
in
2259
- (* let _ = ref *)
2260
- let vbIgnoreUnusedRef =
2261
- Vb. mk (Pat. any () ) (Exp. ident (Location. mknoloc (Lident " ref" )))
2262
- in
2263
- (* let ref = ref->Js.Nullable.fromOption *)
2264
- let vbRefFromOption =
2265
- Vb. mk
2266
- (Pat. var @@ Location. mknoloc " ref" )
2267
- (Exp. apply
2268
- (Exp. ident
2269
- (Location. mknoloc
2270
- (Ldot (Ldot (Lident " Js" , " Nullable" ), " fromOption" ))))
2271
- [(Nolabel , Exp. ident (Location. mknoloc @@ Lident " ref" ))])
2272
- in
2273
2259
let namedArgWithDefaultValueList =
2274
2260
List. filter_map argWithDefaultValue namedArgList
2275
2261
in
@@ -2299,30 +2285,14 @@ module V4 = struct
2299
2285
else [] )
2300
2286
in
2301
2287
let innerExpression =
2302
- if hasForwardRef then
2303
- Exp. apply
2304
- (Exp. ident @@ Location. mknoloc @@ Lident " make" )
2305
- [
2306
- ( Nolabel ,
2307
- Exp. record
2308
- [
2309
- ( Location. mknoloc @@ Lident " ref" ,
2310
- Exp. apply ~attrs: optionalAttr
2311
- (Exp. ident
2312
- (Location. mknoloc
2313
- (Ldot
2314
- (Ldot (Lident " Js" , " Nullable" ), " toOption" ))))
2315
- [
2316
- ( Nolabel ,
2317
- Exp. ident (Location. mknoloc @@ Lident " ref" ) );
2318
- ] );
2319
- ]
2320
- (Some (Exp. ident (Location. mknoloc @@ Lident " props" ))) );
2321
- ]
2322
- else
2323
- Exp. apply
2324
- (Exp. ident (Location. mknoloc @@ Lident " make" ))
2325
- [(Nolabel , Exp. ident (Location. mknoloc @@ Lident " props" ))]
2288
+ Exp. apply
2289
+ (Exp. ident (Location. mknoloc @@ Lident " make" ))
2290
+ ([(Nolabel , Exp. ident (Location. mknoloc @@ Lident " props" ))]
2291
+ @
2292
+ match hasForwardRef with
2293
+ | true ->
2294
+ [(Nolabel , Exp. ident (Location. mknoloc @@ Lident " ref" ))]
2295
+ | false -> [] )
2326
2296
in
2327
2297
let fullExpression =
2328
2298
(* React component name should start with uppercase letter *)
@@ -2355,10 +2325,13 @@ module V4 = struct
2355
2325
]
2356
2326
(Exp. ident ~loc: emptyLoc {loc = emptyLoc; txt = Lident txt})
2357
2327
in
2358
- let rec returnedExpression patterns ({pexp_desc} as expr ) =
2328
+ let rec returnedExpression patternsWithLabel patternsWithNolabel
2329
+ ({pexp_desc} as expr ) =
2359
2330
match pexp_desc with
2360
- | Pexp_newtype (_ , expr ) -> returnedExpression patterns expr
2361
- | Pexp_constraint (expr , _ ) -> returnedExpression patterns expr
2331
+ | Pexp_newtype (_ , expr ) ->
2332
+ returnedExpression patternsWithLabel patternsWithNolabel expr
2333
+ | Pexp_constraint (expr , _ ) ->
2334
+ returnedExpression patternsWithLabel patternsWithNolabel expr
2362
2335
| Pexp_fun
2363
2336
( _arg_label,
2364
2337
_default,
@@ -2367,7 +2340,7 @@ module V4 = struct
2367
2340
Ppat_construct ({txt = Lident " ()" }, _) | Ppat_any ;
2368
2341
},
2369
2342
expr ) ->
2370
- (patterns , expr)
2343
+ (patternsWithLabel, patternsWithNolabel , expr)
2371
2344
| Pexp_fun (arg_label , _default , {ppat_loc; ppat_desc} , expr ) -> (
2372
2345
if isLabelled arg_label || isOptional arg_label then
2373
2346
returnedExpression
@@ -2376,43 +2349,39 @@ module V4 = struct
2376
2349
~attrs:
2377
2350
(if isOptional arg_label then optionalAttr else [] )
2378
2351
{txt = getLabel arg_label; loc = ppat_loc} )
2379
- :: patterns )
2380
- expr
2352
+ :: patternsWithLabel )
2353
+ patternsWithNolabel expr
2381
2354
else
2382
2355
(* Special case of nolabel arg "ref" in forwardRef fn *)
2383
2356
(* let make = React.forwardRef(ref => body) *)
2384
2357
match ppat_desc with
2385
- | Ppat_var {txt}
2386
- | Ppat_constraint ({ppat_desc = Ppat_var {txt}}, _)
2387
- when txt = " ref" ->
2388
- returnedExpression
2358
+ | Ppat_var {txt} ->
2359
+ returnedExpression patternsWithLabel
2389
2360
(( {loc = ppat_loc; txt = Lident txt},
2390
2361
Pat. var ~attrs: optionalAttr {txt; loc = ppat_loc} )
2391
- :: patterns )
2362
+ :: patternsWithNolabel )
2392
2363
expr
2393
- | _ -> returnedExpression patterns expr)
2394
- | _ -> (patterns, expr)
2364
+ | _ ->
2365
+ returnedExpression patternsWithLabel patternsWithNolabel expr)
2366
+ | _ -> (patternsWithLabel, patternsWithNolabel, expr)
2367
+ in
2368
+ let patternsWithLabel, patternsWithNolabel, expression =
2369
+ returnedExpression [] [] expression
2395
2370
in
2396
- let patternsWithLid, expression = returnedExpression [] expression in
2397
2371
let pattern =
2398
- match patternsWithLid with
2372
+ match patternsWithLabel with
2399
2373
| [] -> Pat. any ()
2400
- | _ -> Pat. record (List. rev patternsWithLid ) Open
2374
+ | _ -> Pat. record (List. rev patternsWithLabel ) Open
2401
2375
in
2402
- (* add patttern matching for optional prop value *)
2376
+ (* add pattern matching for optional prop value *)
2403
2377
let expression =
2404
2378
if List. length vbMatchList = 0 then expression
2405
2379
else Exp. let_ Nonrecursive vbMatchList expression
2406
2380
in
2407
- (* add let _ = ref to ignore unused warning *)
2408
2381
let expression =
2409
- match hasForwardRef with
2410
- | true ->
2411
- let expression =
2412
- Exp. let_ Nonrecursive [vbIgnoreUnusedRef] expression
2413
- in
2414
- Exp. let_ Nonrecursive [vbRefFromOption] expression
2415
- | false -> expression
2382
+ List. fold_left
2383
+ (fun expr (_ , pattern ) -> Exp. fun_ Nolabel None pattern expr)
2384
+ expression patternsWithNolabel
2416
2385
in
2417
2386
let expression =
2418
2387
Exp. fun_ Nolabel None
0 commit comments