Skip to content

Commit b17f61d

Browse files
committed
refactor in prep for reuse
1 parent 5625b60 commit b17f61d

File tree

1 file changed

+33
-23
lines changed

1 file changed

+33
-23
lines changed

analysis/src/CompletionBackEnd.ml

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,6 +1455,34 @@ let getOpens ~debug ~rawOpens ~package ~env =
14551455
(* Last open takes priority *)
14561456
List.rev resolvedOpens
14571457

1458+
let getArgs ~env (t : Types.type_expr) ~full =
1459+
let rec getArgsLoop ~env (t : Types.type_expr) ~full ~currentArgumentPosition
1460+
=
1461+
match t.desc with
1462+
| Tlink t1 | Tsubst t1 | Tpoly (t1, []) ->
1463+
getArgsLoop ~full ~env ~currentArgumentPosition t1
1464+
| Tarrow ((Labelled l | Optional l), tArg, tRet, _) ->
1465+
(SharedTypes.Completable.Labelled l, tArg)
1466+
:: getArgsLoop ~full ~env ~currentArgumentPosition tRet
1467+
| Tarrow (Nolabel, tArg, tRet, _) ->
1468+
(Unlabelled {argumentPosition = currentArgumentPosition}, tArg)
1469+
:: getArgsLoop ~full ~env
1470+
~currentArgumentPosition:(currentArgumentPosition + 1)
1471+
tRet
1472+
| Tconstr (path, typeArgs, _) -> (
1473+
match References.digConstructor ~env ~package:full.package path with
1474+
| Some
1475+
( env,
1476+
{
1477+
item = {decl = {type_manifest = Some t1; type_params = typeParams}};
1478+
} ) ->
1479+
let t1 = t1 |> instantiateType ~typeParams ~typeArgs in
1480+
getArgsLoop ~full ~env ~currentArgumentPosition t1
1481+
| _ -> [])
1482+
| _ -> []
1483+
in
1484+
t |> getArgsLoop ~env ~full ~currentArgumentPosition:0
1485+
14581486
let processCompletable ~debug ~full ~scope ~env ~pos ~forHover
14591487
(completable : Completable.t) =
14601488
let package = full.package in
@@ -1830,29 +1858,11 @@ Note: The `@react.component` decorator requires the react-jsx config to be set i
18301858
if debug then
18311859
Printf.printf "Found type for function %s\n"
18321860
(typ |> Shared.typeToString);
1833-
let rec getLabels ~env (t : Types.type_expr) =
1834-
match t.desc with
1835-
| Tlink t1 | Tsubst t1 | Tpoly (t1, []) -> getLabels ~env t1
1836-
| Tarrow ((Labelled l | Optional l), tArg, tRet, _) ->
1837-
(l, tArg) :: getLabels ~env tRet
1838-
| Tarrow (Nolabel, _, tRet, _) -> getLabels ~env tRet
1839-
| Tconstr (path, typeArgs, _) -> (
1840-
match References.digConstructor ~env ~package path with
1841-
| Some
1842-
( env,
1843-
{
1844-
item =
1845-
{
1846-
decl =
1847-
{type_manifest = Some t1; type_params = typeParams};
1848-
};
1849-
} ) ->
1850-
let t1 = t1 |> instantiateType ~typeParams ~typeArgs in
1851-
getLabels ~env t1
1852-
| _ -> [])
1853-
| _ -> []
1854-
in
1855-
typ |> getLabels ~env
1861+
typ |> getArgs ~full ~env
1862+
|> List.filter_map (fun arg ->
1863+
match arg with
1864+
| SharedTypes.Completable.Labelled name, a -> Some (name, a)
1865+
| _ -> None)
18561866
| None -> []
18571867
in
18581868
let mkLabel (name, typ) =

0 commit comments

Comments
 (0)