11open Globals
22open Ast
33open DisplayTypes
4+ open DisplayTypes.DisplayMode
45open CompletionItem
56open Type
67open Genjson
78
89exception DisplayException of display_exception_kind
910
10- let raise_module_symbols s = raise (DisplayException (ModuleSymbols s))
11- let raise_metadata s = raise (DisplayException (Metadata s))
12- let raise_signatures l isig iarg kind = raise (DisplayException (DisplaySignatures ((l,isig,iarg,kind))))
1311let raise_hover item expected p = raise (DisplayException (DisplayHover ({hitem = item;hpos = p;hexpected = expected})))
14- let raise_positions pl = raise (DisplayException (DisplayPositions pl))
1512let raise_fields ckl cr subj = raise (DisplayException (DisplayFields ({fitems = ckl;fkind = cr;fsubject = subj})))
16- let raise_package sl = raise (DisplayException (DisplayPackage sl))
1713
1814(* global state *)
1915let last_completion_result = ref (Array. make 0 (CompletionItem. make (ITModule ([] ," " )) None ))
@@ -160,26 +156,6 @@ let arg_index signatures signature_index param_index =
160156
161157let to_json ctx de =
162158 match de with
163- | ModuleSymbols _
164- | Metadata _ -> die " " __LOC__
165- | DisplaySignatures (sigs ,isig ,iarg ,kind ) ->
166- (* We always want full info for signatures *)
167- let ctx = Genjson. create_context GMFull in
168- let fsig ((_ ,signature ),doc ) =
169- let fl = CompletionType. generate_function' ctx signature in
170- let fl = (match doc with None -> fl | Some d -> (" documentation" ,jstring (gen_doc_text d)) :: fl) in
171- jobject fl
172- in
173- let sigkind = match kind with
174- | SKCall -> 0
175- | SKArrayAccess -> 1
176- in
177- jobject [
178- " activeSignature" ,jint isig;
179- " activeParameter" ,jint (arg_index sigs isig iarg);
180- " signatures" ,jlist fsig sigs;
181- " kind" ,jint sigkind;
182- ]
183159 | DisplayHover hover ->
184160 let named_source_kind = function
185161 | WithType. FunctionArgument name -> (0 , name)
@@ -218,11 +194,51 @@ let to_json ctx de =
218194 " item" ,CompletionItem. to_json ctx None hover.hitem;
219195 " expected" ,expected;
220196 ]
221- | DisplayPositions pl ->
222- jarray (List. map generate_pos_as_location pl)
223197 | DisplayFields r ->
224198 fields_to_json ctx r.fitems r.fkind r.fsubject
225- | DisplayPackage pack ->
226- jarray (List. map jstring pack)
227- | DisplayNoResult ->
228- jnull
199+
200+ let send_json_result_raise (com :Common.context ) json =
201+ let rh = com.request_scope.result_handler in
202+ CompilerOutput. send_result_raise rh json
203+
204+ let send_module_symbols_raise com s =
205+ DisplayPosition. display_position#reset;
206+ send_json_result_raise com s
207+
208+ let send_hover_raise com item expected p =
209+ DisplayPosition. display_position#reset;
210+ let ctx = Genjson. create_context GMFull in
211+ send_json_result_raise com (to_json ctx (DisplayHover ({hitem = item;hpos = p;hexpected = expected})))
212+
213+ let send_signatures_raise com sigs isig iarg kind =
214+ DisplayPosition. display_position#reset;
215+ let ctx = Genjson. create_context GMFull in
216+ let fsig ((_ ,signature ),doc ) =
217+ let fl = CompletionType. generate_function' ctx signature in
218+ let fl = (match doc with None -> fl | Some d -> (" documentation" ,jstring (gen_doc_text d)) :: fl) in
219+ jobject fl
220+ in
221+ let sigkind = match kind with
222+ | SKCall -> 0
223+ | SKArrayAccess -> 1
224+ in
225+ send_json_result_raise com (jobject [
226+ " activeSignature" ,jint isig;
227+ " activeParameter" ,jint (arg_index sigs isig iarg);
228+ " signatures" ,jlist fsig sigs;
229+ " kind" ,jint sigkind;
230+ ])
231+
232+ let send_positions_raise com pl =
233+ DisplayPosition. display_position#reset;
234+ send_json_result_raise com (jarray (List. map generate_pos_as_location pl))
235+
236+ let send_package_raise com sl =
237+ DisplayPosition. display_position#reset;
238+ send_json_result_raise com (jarray (List. map jstring sl))
239+
240+ let send_no_result_raise (com :Common.context ) =
241+ let rh = com.request_scope.result_handler in
242+ match com.display.dms_kind with
243+ | DMDefault -> CompilerOutput. send_error_raise rh [jstring " No completion point" ]
244+ | _ -> CompilerOutput. send_result_raise rh jnull
0 commit comments