From 4fa230c1b1eeee06c0a0fec4a9a346b8ec1c2992 Mon Sep 17 00:00:00 2001 From: mattdamon108 Date: Thu, 27 Oct 2022 18:21:36 +0900 Subject: [PATCH] fix props type constraint generalized --- cli/reactjs_jsx_v4.ml | 15 ++++++++++++--- tests/ppx/react/expected/sharedProps.res.txt | 16 ++++++++-------- tests/ppx/react/expected/sharedProps.resi.txt | 8 ++++---- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/cli/reactjs_jsx_v4.ml b/cli/reactjs_jsx_v4.ml index 3d1a4f30..819f2432 100644 --- a/cli/reactjs_jsx_v4.ml +++ b/cli/reactjs_jsx_v4.ml @@ -774,7 +774,10 @@ let transformStructureItem ~config mapper item = (Location.mkloc (Lident "props") pstr_loc) (match coreTypeOfAttr with | None -> makePropsTypeParams namedTypeList - | Some _ -> typVarsOfCoreType) + | Some _ -> ( + match typVarsOfCoreType with + | [] -> [] + | _ -> [Typ.any ()])) in (* type props<'x, 'y> = { x: 'x, y?: 'y, ... } *) let propsRecordType = @@ -1149,7 +1152,10 @@ let transformStructureItem ~config mapper item = makePropsTypeParams ~stripExplicitOption:true ~stripExplicitJsNullableOfRef:hasForwardRef namedTypeList - | Some _ -> typVarsOfCoreType))) + | Some _ -> ( + match typVarsOfCoreType with + | [] -> [] + | _ -> [Typ.any ()])))) expression in (* let make = ({id, name, ...}: props<'id, 'name, ...>) => { ... } *) @@ -1255,7 +1261,10 @@ let transformSignatureItem ~config _mapper item = (Location.mkloc (Lident "props") psig_loc) (match coreTypeOfAttr with | None -> makePropsTypeParams namedTypeList - | Some _ -> typVarsOfCoreType) + | Some _ -> ( + match typVarsOfCoreType with + | [] -> [] + | _ -> [Typ.any ()])) in let propsRecordType = makePropsRecordTypeSig ~coreTypeOfAttr ~typVarsOfCoreType "props" diff --git a/tests/ppx/react/expected/sharedProps.res.txt b/tests/ppx/react/expected/sharedProps.res.txt index 352e935a..c6e4bc24 100644 --- a/tests/ppx/react/expected/sharedProps.res.txt +++ b/tests/ppx/react/expected/sharedProps.res.txt @@ -14,7 +14,7 @@ module V4C1 = { module V4C2 = { type props<'a> = sharedProps<'a> - @react.component(: sharedProps<'a>) let make = ({x, y, _}: props<'a>) => React.string(x ++ y) + @react.component(: sharedProps<'a>) let make = ({x, y, _}: props<_>) => React.string(x ++ y) let make = { let \"SharedProps$V4C2" = (props: props<_>) => make(props) @@ -26,7 +26,7 @@ module V4C3 = { type props<'a> = sharedProps @react.component(: sharedProps) - let make = ({x, y, _}: props<'a>) => React.string(x ++ y) + let make = ({x, y, _}: props<_>) => React.string(x ++ y) let make = { let \"SharedProps$V4C3" = (props: props<_>) => make(props) @@ -54,13 +54,13 @@ module V4C5 = { module V4C6 = { type props<'a> = sharedProps<'a> - external make: React.componentLike, React.element> = "default" + external make: React.componentLike, React.element> = "default" } module V4C7 = { type props<'a> = sharedProps - external make: React.componentLike, React.element> = "default" + external make: React.componentLike, React.element> = "default" } module V4C8 = { @@ -85,7 +85,7 @@ module V4A1 = { module V4A2 = { type props<'a> = sharedProps<'a> - @react.component(: sharedProps<'a>) let make = ({x, y, _}: props<'a>) => React.string(x ++ y) + @react.component(: sharedProps<'a>) let make = ({x, y, _}: props<_>) => React.string(x ++ y) let make = { let \"SharedProps$V4A2" = (props: props<_>) => make(props) @@ -97,7 +97,7 @@ module V4A3 = { type props<'a> = sharedProps @react.component(: sharedProps) - let make = ({x, y, _}: props<'a>) => React.string(x ++ y) + let make = ({x, y, _}: props<_>) => React.string(x ++ y) let make = { let \"SharedProps$V4A3" = (props: props<_>) => make(props) @@ -125,13 +125,13 @@ module V4A5 = { module V4A6 = { type props<'a> = sharedProps<'a> - external make: React.componentLike, React.element> = "default" + external make: React.componentLike, React.element> = "default" } module V4A7 = { type props<'a> = sharedProps - external make: React.componentLike, React.element> = "default" + external make: React.componentLike, React.element> = "default" } module V4A8 = { diff --git a/tests/ppx/react/expected/sharedProps.resi.txt b/tests/ppx/react/expected/sharedProps.resi.txt index 5093039d..e87f202e 100644 --- a/tests/ppx/react/expected/sharedProps.resi.txt +++ b/tests/ppx/react/expected/sharedProps.resi.txt @@ -9,13 +9,13 @@ module V4C1: { module V4C2: { type props<'a> = sharedProps<'a> - let make: React.componentLike, React.element> + let make: React.componentLike, React.element> } module V4C3: { type props<'a> = sharedProps - let make: React.componentLike, React.element> + let make: React.componentLike, React.element> } module V4C4: { @@ -35,13 +35,13 @@ module V4A1: { module V4A2: { type props<'a> = sharedProps<'a> - let make: React.componentLike, React.element> + let make: React.componentLike, React.element> } module V4A3: { type props<'a> = sharedProps - let make: React.componentLike, React.element> + let make: React.componentLike, React.element> } module V4A4: {