Fix #7982 - roo javascript completion
[roobuilder] / src / Palete / LanguageClient.vala
1 /**
2   generic interface to language server
3   ?? first of will be for vala... but later?
4   based on gvls-client-jsonrpc (loosly)
5   and vala-language-server
6  
7
8 */
9
10 namespace Palete {
11
12         public enum  LanguageClientAction {
13                 INIT,
14                 LAUNCH,
15                 ACCEPT,
16                 
17                 DIAG,
18                 OPEN,
19                 SAVE,
20                 CLOSE,
21                 CHANGE,
22                 TERM,
23                 COMPLETE,
24                 COMPLETE_REPLY,
25                 
26                 RESTART,
27                 ERROR,
28                 ERROR_START,
29                 ERROR_RPC,
30                 ERROR_REPLY,
31
32                 EXIT,
33         }
34
35         public abstract class LanguageClient :   Jsonrpc.Server {
36         
37                 public Project.Project project;
38                 
39          
40  
41
42         
43                 public signal void log(LanguageClientAction action, string message);
44                 
45                 
46                 protected LanguageClient(Project.Project project)
47                 {
48                         // extend versions will proably call initialize to start and connect to server.
49                         this.project = project;
50
51                         
52                 
53                 }
54                  
55                 
56                 
57                 /**
58                 utility method to build variant based queries
59                 */
60                 public Variant buildDict (...) {
61                         var builder = new GLib.VariantBuilder (new GLib.VariantType ("a{sv}"));
62                         var l = va_list ();
63                         while (true) {
64                                 string? key = l.arg ();
65                                 if (key == null) {
66                                         break;
67                                 }
68                                 Variant val = l.arg ();
69                                 builder.add ("{sv}", key, val);
70                         }
71                         return builder.end ();
72                 }
73                  
74                 
75                 
76  
77                 
78                 
79                 public abstract  void initialize_server();
80  
81                 
82                 public abstract void document_open (JsRender.JsRender file) ; 
83                 public abstract void document_save (JsRender.JsRender file); 
84                 public abstract void document_close (JsRender.JsRender file);
85                 public abstract void document_change (JsRender.JsRender file );
86                 public abstract void document_change_force (JsRender.JsRender file, string contents );
87                 public abstract void exit () throws GLib.Error;
88                 public abstract async void shutdown () throws GLib.Error;
89                 public abstract async Lsp.CompletionList?  completion(JsRender.JsRender file, int line, int offset , int triggerType = 1) throws GLib.Error;
90                 public abstract async Gee.ArrayList<Lsp.DocumentSymbol> syntax (JsRender.JsRender file) throws GLib.Error;
91                 
92                 
93         }
94         
95 }