@@ -192,6 +192,12 @@ let findActiveParameter ~argAtCursor ~args =
192
192
index := ! index + 1 ;
193
193
None )
194
194
195
+ type constructorInfo = {
196
+ docstring : string list ;
197
+ name : string ;
198
+ args : constructorArgs ;
199
+ }
200
+
195
201
let findConstructorArgs ~full ~env ~constructorName loc =
196
202
match
197
203
References. getLocItem ~debug: false ~full
@@ -200,10 +206,51 @@ let findConstructorArgs ~full ~env ~constructorName loc =
200
206
| None -> None
201
207
| Some {locType = Typed (_ , typExpr , _ )} -> (
202
208
match TypeUtils. extractType ~env ~package: full.package typExpr with
209
+ | Some ((Toption (_ , TypeExpr t ) as extractedType ), _ ) -> (
210
+ match constructorName with
211
+ | "Some" ->
212
+ Some
213
+ {
214
+ name = " Some" ;
215
+ docstring =
216
+ [
217
+ Markdown. codeBlock
218
+ (TypeUtils. extractedTypeToString extractedType);
219
+ ];
220
+ args = Args [(t, Location. none)];
221
+ }
222
+ | _ -> None )
223
+ | Some ((Tresult {okType; errorType} as extractedType ), _ ) -> (
224
+ match constructorName with
225
+ | "Ok" ->
226
+ Some
227
+ {
228
+ name = " Ok" ;
229
+ docstring =
230
+ [
231
+ Markdown. codeBlock
232
+ (TypeUtils. extractedTypeToString extractedType);
233
+ ];
234
+ args = Args [(okType, Location. none)];
235
+ }
236
+ | "Error" ->
237
+ Some
238
+ {
239
+ name = " Error" ;
240
+ docstring =
241
+ [
242
+ Markdown. codeBlock
243
+ (TypeUtils. extractedTypeToString extractedType);
244
+ ];
245
+ args = Args [(errorType, Location. none)];
246
+ }
247
+ | _ -> None )
203
248
| Some (Tvariant {constructors} , _ ) ->
204
249
constructors
205
250
|> List. find_opt (fun (c : Constructor.t ) ->
206
251
c.cname.txt = constructorName)
252
+ |> Option. map (fun (c : Constructor.t ) ->
253
+ {docstring = c.docstring; name = c.cname.txt; args = c.args})
207
254
| _ -> None )
208
255
| _ -> None
209
256
@@ -554,7 +601,7 @@ let signatureHelp ~path ~pos ~currentFile ~debug ~allowForConstructorPayloads =
554
601
(startOffset, endOffset) ))))
555
602
in
556
603
let label =
557
- constructor.cname.txt ^ " ("
604
+ constructor.name ^ " ("
558
605
^ (match argParts with
559
606
| None -> " "
560
607
| Some (`InlineRecord fields ) ->
@@ -659,7 +706,7 @@ let signatureHelp ~path ~pos ~currentFile ~debug ~allowForConstructorPayloads =
659
706
| _ -> - 1
660
707
in
661
708
662
- let constructorNameLength = String. length constructor.cname.txt in
709
+ let constructorNameLength = String. length constructor.name in
663
710
let params =
664
711
match argParts with
665
712
| None -> []
0 commit comments