Merge branch 'master' of http://git.roojs.com/roobuilder
[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                 DIAG_END,
19                 OPEN,
20                 SAVE,
21                 CLOSE,
22                 CHANGE,
23                 TERM,
24                 COMPLETE,
25                 COMPLETE_REPLY,
26                 
27                 RESTART,
28                 ERROR,
29                 ERROR_START,
30                 ERROR_RPC,
31                 ERROR_REPLY,
32
33                 EXIT,
34         }
35
36         public abstract class LanguageClient :   Jsonrpc.Server {
37         
38                 public Project.Project project;
39                 
40          
41  
42
43         
44                 public signal void log(LanguageClientAction action, string message);
45                 
46                 
47                 protected LanguageClient(Project.Project project)
48                 {
49                         // extend versions will proably call initialize to start and connect to server.
50                         this.project = project;
51
52                         
53                 
54                 }
55                  
56                 
57                 
58                 /**
59                 utility method to build variant based queries
60                 */
61                 public Variant buildDict (...) {
62                         var builder = new GLib.VariantBuilder (new GLib.VariantType ("a{sv}"));
63                         var l = va_list ();
64                         while (true) {
65                                 string? key = l.arg ();
66                                 if (key == null) {
67                                         break;
68                                 }
69                                 Variant val = l.arg ();
70                                 builder.add ("{sv}", key, val);
71                         }
72                         return builder.end ();
73                 }
74                  
75                 
76                 
77                 public abstract  void initialize_server();
78  
79                 
80                 public abstract void document_open (JsRender.JsRender file) ; 
81                 public abstract async void document_save (JsRender.JsRender file); 
82                 public abstract void document_close (JsRender.JsRender file);
83                 public abstract  void document_change (JsRender.JsRender file );
84                 public abstract async void document_change_force (JsRender.JsRender file, string contents );
85                 public abstract void exit () throws GLib.Error;
86                 public abstract async void shutdown () throws GLib.Error;
87                 public abstract async Lsp.CompletionList?  completion(JsRender.JsRender file, int line, int offset , int triggerType = 1) throws GLib.Error;
88                 public abstract async Lsp.Hover hover (JsRender.JsRender file, int line, int offset) throws GLib.Error;
89                 public abstract void queueDocumentSymbols (JsRender.JsRender file); 
90                 public abstract async Gee.ArrayList<Lsp.DocumentSymbol> documentSymbols (JsRender.JsRender file) throws GLib.Error;     
91                 public abstract async Gee.ArrayList<Lsp.SignatureInformation> signatureHelp (JsRender.JsRender file, int line, int offset) throws GLib.Error;
92                 public abstract async Gee.ArrayList<Lsp.SymbolInformation> symbol (string sym) throws GLib.Error;
93         }
94         
95 }