}
void startServer()
{
- this.initProcess("/usr/bin/vala-language-server");
+ var exe = GLib.Environment.find_program_in_path( "vala-language-server");
+ if (exe == null) {
+ GLib.warning("could not find vala-language-server");
+
+ return;
+ }
+ this.initProcess(exe);
}
{
// extend versions will proably call initialize to start and connect to server.
base(project);
- this.open_files = new Gee.ArrayList<JsRender.JsRender>();
+
this.change_queue_id = GLib.Timeout.add_seconds(1, () => {
if (this.change_queue_file == null) {
return true;
}
+ if (this.getting_diagnostics) {
+ return true;
+ }
this.countdown--;
+
+
if (this.countdown < 0){
- this.document_change_force(this.change_queue_file, this.change_queue_file_source);
+ this.document_change_force.begin(this.change_queue_file, this.change_queue_file_source, (o, res) => {
+ this.document_change_force.end(res);
+ });
this.change_queue_file = null;
}
out return_value
);
GLib.debug ("LS replied with %s", Json.to_string (Json.gvariant_serialize (return_value), true));
+ this.open_files = new Gee.ArrayList<JsRender.JsRender>((a,b) => {
+ return a.path == b.path;
+ });
this.initialized = true;
+ this.getting_diagnostics = false;
return;
} catch (GLib.Error e) {
GLib.debug ("LS replied with error %s", e.message);
if (this.launcher == null) {
return;
}
+ this.getting_diagnostics = false;
this.in_close = true;
GLib.debug("onClose called");
public async void restartServer()
{
this.startServer();
- foreach(var f in this.open_files) {
- this.document_open(f);
- }
+
}
public bool isReady()
{
switch (method) {
case "textDocument/publishDiagnostics":
+ //GLib.debug("got notification %s : %s", method , Json.to_string (Json.gvariant_serialize (return_value), true));
this.onDiagnostic(return_value);
return;
default:
}
+ bool getting_diagnostics = false;
/***
*/
public void onDiagnostic(Variant? return_value)
{
-
+ //GLib.debug ("LS replied with %s", Json.to_string (Json.gvariant_serialize (return_value), true));
var dg = Json.gobject_deserialize (typeof (Lsp.Diagnostics), Json.gvariant_serialize (return_value)) as Lsp.Diagnostics;
+ GLib.debug("got diag for %s", dg.filename);
this.log(LanguageClientAction.DIAG, dg.filename);
+ if (this.project.path == dg.filename) {
+ this.getting_diagnostics = false;
+ this.log(LanguageClientAction.DIAG_END, "diagnostics done");
+ return;
+
+ }
+ this.getting_diagnostics =true;
var f = this.project.getByPath(dg.filename);
if (f == null) {
//GLib.debug("no file %s", dg.uri);
- this.project.updateErrorsforFile(null);
+ //this.project.updateErrorsforFile(null);
return;
}
- foreach(var v in f.errorsByType.values) {
- v.remove_all();
- }
- foreach(var diag in dg.diagnostics) {
- var ce = new CompileError.new_from_diagnostic(f, diag);
- if (!f.errorsByType.has_key(ce.category)) {
- f.errorsByType.set(ce.category, new GLib.ListStore(typeof(CompileError)));
- }
- f.errorsByType.get(ce.category).append(ce);
- }
- f.project.updateErrorsforFile(f);
+ //GLib.debug("got Diagnostics for %s", f.path);
+ f.updateErrors( dg.diagnostics );
+
}
if (!this.isReady()) {
return;
}
- if (!this.open_files.contains(file)) {
- this.open_files.add(file);
+ if (this.open_files.contains(file)) {
+ return;
}
+ this.open_files.add(file);
+
GLib.debug ("LS sent open");
try {
}
- public override void document_save (JsRender.JsRender file)
+ public override async void document_save (JsRender.JsRender file)
{
if (!this.isReady()) {
return;
}
// save only really flags the file on the server - to actually force a change update - we need to
// flag it as changed.
- this.document_change_force(file, file.toSource());
+ yield this.document_change_force(file, file.toSource());
this.change_queue_file = null;
GLib.debug ("LS send save");
- this.jsonrpc_client.send_notification (
+ yield this.jsonrpc_client.send_notification_async (
"textDocument/didSave",
args,
null
public override void document_change (JsRender.JsRender file )
{
if (this.change_queue_file != null && this.change_queue_file.path != file.path) {
- this.document_change_force(this.change_queue_file, this.change_queue_file_source);
+ this.document_change_force.begin(this.change_queue_file, this.change_queue_file_source, (o, res) => {
+ this.document_change_force.end(res);
+ });
}
this.countdown = 3;
}
- public override void document_change_force (JsRender.JsRender file, string contents)
+ public override async void document_change_force (JsRender.JsRender file, string contents)
{
+
+
if (!this.isReady()) {
return;
}
-
+ this.countdown = 9; // not really relivant..
+ this.change_queue_file = null; // this is more important..
+
+ if (!this.open_files.contains(file)) {
+ this.document_open(file);
+ }
- GLib.debug ("LS send change");
+ GLib.debug ("LS send change %s rev %d", file.path, file.version);
var ar = new Json.Array();
var obj = new Json.Object();
obj.set_string_member("text", contents);
node.set_array(ar);
this.log(LanguageClientAction.CHANGE, file.path);
try {
- this.jsonrpc_client.send_notification (
+ yield this.jsonrpc_client.send_notification_async (
"textDocument/didChange",
this.buildDict (
textDocument : this.buildDict ( ///TextDocumentItem;