From 5d8fa13934f8e1aecf7b966a6fa997caa6b463e5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Tue, 16 Jun 2020 02:26:05 +0200
Subject: [PATCH] [server] kernel-main

---
 src/plugins/server/Makefile.in    | 10 ++--
 src/plugins/server/kernel_main.ml | 82 +++++++++++++++----------------
 src/plugins/server/states.ml      |  4 +-
 3 files changed, 46 insertions(+), 50 deletions(-)

diff --git a/src/plugins/server/Makefile.in b/src/plugins/server/Makefile.in
index 30c90997cbe..2c59c4cb72b 100644
--- a/src/plugins/server/Makefile.in
+++ b/src/plugins/server/Makefile.in
@@ -45,9 +45,9 @@ PLUGIN_CMO:= \
 	main request states \
 	server_batch \
 	kernel_main \
-	kernel_project \
-	kernel_ast \
-	kernel_properties
+#	kernel_project \
+#	kernel_ast \
+#	kernel_properties
 
 PLUGIN_DISTRIBUTED:=$(PLUGIN_ENABLE)
 PLUGIN_DISTRIB_EXTERNAL:= Makefile.in configure.ac configure
@@ -84,8 +84,8 @@ SERVER_API= \
 	package.mli server_doc.mli \
 	syntax.mli data.mli request.mli states.mli \
 	kernel_main.mli \
-	kernel_ast.mli \
-	kernel_properties.mli
+#	kernel_ast.mli \
+#	kernel_properties.mli
 
 define Capitalize
 $(shell printf "%s%s" \
diff --git a/src/plugins/server/kernel_main.ml b/src/plugins/server/kernel_main.ml
index 5ff7e8d94f5..3fe87efe0b4 100644
--- a/src/plugins/server/kernel_main.ml
+++ b/src/plugins/server/kernel_main.ml
@@ -21,34 +21,34 @@
 (**************************************************************************)
 
 open Data
-module Sy = Syntax
 module Md = Markdown
+module Pkg = Package
 module Senv = Server_parameters
 
 (* -------------------------------------------------------------------------- *)
 (* --- Frama-C Kernel Services                                            --- *)
 (* -------------------------------------------------------------------------- *)
 
-let page = Server_doc.page `Kernel ~title:"Kernel Services" ~filename:"kernel.md" ()
+let package = Pkg.package ~title:"Kernel Services" ~name:"kernel" ()
 
 (* -------------------------------------------------------------------------- *)
 (* --- Config                                                             --- *)
 (* -------------------------------------------------------------------------- *)
 
 let () =
-  let get_config = Request.signature
-      ~page ~kind:`GET ~name:"kernel.getConfig"
-      ~descr:(Md.plain "Frama-C Kernel configuration")
-      ~input:(module Junit) () in
+  let signature = Request.signature ~input:(module Junit) () in
   let result name descr =
-    Request.result get_config ~name ~descr:(Md.plain descr) (module Jstring) in
+    Request.result signature ~name ~descr:(Md.plain descr) (module Jstring) in
   let set_version = result "version" "Frama-C version" in
   let set_datadir = result "datadir" "Shared directory (FRAMAC_SHARE)" in
   let set_libdir = result "libdir" "Lib directory (FRAMAC_LIB)" in
-  let set_pluginpath = Request.result get_config
+  let set_pluginpath = Request.result signature
       ~name:"pluginpath" ~descr:(Md.plain "Plugin directories (FRAMAC_PLUGIN)")
       (module Jstring.Jlist) in
-  Request.register_sig get_config
+  Request.register_sig
+    ~package ~kind:`GET ~name:"getConfig"
+    ~descr:(Md.plain "Frama-C Kernel configuration")
+    signature
     begin fun rq () ->
       set_version rq Fc_config.version ;
       set_datadir rq Fc_config.datadir ;
@@ -61,18 +61,13 @@ let () =
 (* -------------------------------------------------------------------------- *)
 
 let () =
-  let signature =
-    Request.signature ~page ~kind:`SET ~name:"kernel.load"
-      ~descr:(Md.plain "Load a save file")
-      ~input:(module Jstring)
-      ~output:(module Jstring.Joption)
-      ()
-  in
-  let load _rq file =
-    try Project.load_all (Filepath.Normalized.of_string file); None
-    with Project.IOError err -> Some err
-  in
-  Request.register_sig signature load
+  Request.register ~package ~kind:`SET ~name:"load"
+    ~descr:(Md.plain "Load a save file. Returns an error, if not successfull.")
+    ~input:(module Jstring)
+    ~output:(module Jstring.Joption)
+    (fun file ->
+       try Project.load_all (Filepath.Normalized.of_string file); None
+       with Project.IOError err -> Some err)
 
 (* -------------------------------------------------------------------------- *)
 (* --- File Positions                                                     --- *)
@@ -82,15 +77,14 @@ module LogSource = Collection
     (struct
       type t = Filepath.position
 
-      let synopsis =
-        Sy.record [ "dir", Sy.string; "base", Sy.string;
-                    "file", Sy.string; "line", Sy.int ]
-
-      let syntax = Sy.publish ~page:Data.page ~name:"source" ~synopsis
+      let jtype = Pkg.datatype ~package ~name:"source"
           ~descr:(Md.plain "Source file positions.")
-          ~details:Md.([Block [Text (plain "The file path is normalized, \
-                                            and the line number starts at one.")]])
-          ()
+          (Jrecord [
+              "dir", Jstring;
+              "base", Jstring;
+              "file", Jstring;
+              "line", Jnumber;
+            ])
 
       let to_json p =
         let path = Filepath.(Normalized.to_pretty_string p.pos_path) in
@@ -123,13 +117,10 @@ module LogSource = Collection
 module LogKind = Collection
     (struct
 
-      let kinds = Enum.dictionary ~page
-          ~name:"logkind" ~title:"Log Kind"
-          ~descr:(Md.plain "Frama-C message category.")
-          ()
+      let kinds = Enum.dictionary ()
 
       let t_kind value name descr =
-        Enum.tag kinds ~name ~descr:(Md.plain descr) ~value ()
+        Enum.tag ~name ~descr:(Md.plain descr) ~value kinds
 
       let t_error = t_kind Log.Error "ERROR" "User Error"
       let t_warning = t_kind Log.Warning "WARNING" "User Warning"
@@ -146,8 +137,10 @@ module LogKind = Collection
         | Log.Failure -> t_failure
         | Log.Debug -> t_debug
 
-      let data = Enum.publish kinds ~tag ()
-      let () = Request.dictionary kinds
+      let data = Request.dictionary ~package
+          ~name:"logkind"
+          ~descr:(Md.plain "Log messages categories.")
+          kinds
 
       include (val data : S with type t = Log.kind)
     end)
@@ -161,8 +154,7 @@ module LogEvent = Collection
 
       type rlog
 
-      let jlog : rlog Record.signature = Record.signature ~page
-          ~name:"log" ~descr:(Md.plain "Message event record.") ()
+      let jlog : rlog Record.signature = Record.signature ()
 
       let kind = Record.field jlog ~name:"kind"
           ~descr:(Md.plain "Message kind") (module LogKind)
@@ -175,10 +167,14 @@ module LogEvent = Collection
       let source = Record.option jlog ~name:"source"
           ~descr:(Md.plain "Source file position") (module LogSource)
 
-      module R = (val (Record.publish jlog) : Record.S with type r = rlog)
+      let data = Record.publish ~package ~name:"log"
+              ~descr:(Md.plain "Message event record.") jlog
+
+      module R : Record.S with type r = rlog = (val data)
 
       type t = Log.event
-      let syntax = R.syntax
+
+      let jtype = R.jtype
 
       let to_json evt =
         R.default |>
@@ -236,14 +232,16 @@ let () =
 (* --- Log Requests                                                       --- *)
 (* -------------------------------------------------------------------------- *)
 
+(* TODO:LC: shall have an array here. *)
+
 let () = Request.register
-    ~page ~kind:`SET ~name:"kernel.setLogs"
+    ~package ~kind:`SET ~name:"setLogs"
     ~descr:(Md.plain "Turn logs monitoring on/off")
     ~input:(module Jbool) ~output:(module Junit)
     set_monitoring
 
 let () = Request.register
-    ~page ~kind:`GET ~name:"kernel.getLogs"
+    ~package ~kind:`GET ~name:"getLogs"
     ~descr:(Md.plain "Flush the last emitted logs since last call (max 100)")
     ~input:(module Junit) ~output:(module LogEvent.Jlist)
     begin fun () ->
diff --git a/src/plugins/server/states.ml b/src/plugins/server/states.ml
index 486617a1231..d2b486c50e3 100644
--- a/src/plugins/server/states.ml
+++ b/src/plugins/server/states.ml
@@ -71,7 +71,6 @@ let register_state (type a) ~package ~name ~descr
   let open Markdown in
   let module D = (val data) in
   let href = link ~name () in
-  let descr = Markdown.par descr in
   let () = Package.declare
       ~package ~name ~descr D_state in
   let signal = Request.signal
@@ -268,7 +267,6 @@ let register_array ~package ~name ~descr ~key
     model =
   let open Markdown in
   let href = link ~name () in
-  let descr = Markdown.par descr in
   let columns = List.rev !model in
   let fields = Package.{
       fd_name = "key" ;
@@ -281,7 +279,7 @@ let register_array ~package ~name ~descr ~key
       ~descr:(plain "Signal for array" @ href) in
   let row = Package.declare_id
       ~package ~name:(name ^ "Row")
-      ~descr:(par (plain "Data rows for array" @ href))
+      ~descr:(plain "Data rows for array" @ href)
       (D_record fields) in
   let getter =
     List.map Package.(fun (fd,to_js) -> fd.fd_name , to_js) columns in
-- 
GitLab