");",
" ",
"var hover = this.el.get_hover();",
- "hover.add_provider(new Palete.HoverProvider());",
+ "hover.add_provider(new Palete.HoverProvider(_this));",
"",
"//this.el.completion.unblock_interactive();",
"this.el.completion.select_on_show = true; // select",
);
var hover = this.el.get_hover();
- hover.add_provider(new Palete.HoverProvider());
+ hover.add_provider(new Palete.HoverProvider(_this));
//this.el.completion.unblock_interactive();
this.el.completion.select_on_show = true; // select
}
public class MarkedString : Object {
+ public MarkedString(string language, string value)
+ {
+ this.language = language;
+ this.value = value;
+ GLib.debug("new marked string %s : %s", language, value);
+ }
public string language { get; set; }
public string value { get; set; }
}
return node;
}
- public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node) {
- error ("deserialization not supported");
+ public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node)
+ {
+ if (property_name == "contents") {
+ value = GLib.Value (typeof(Gee.ArrayList));
+ if (property_node.get_node_type () != Json.NodeType.ARRAY) {
+ warning ("unexpected property node type for 'arguments' %s", property_node.get_node_type ().to_string ());
+ return false;
+ }
+ var contents = new Gee.ArrayList<MarkedString>();
+
+ property_node.get_array ().foreach_element ((array, index, element) => {
+ try {
+ var add = new MarkedString(
+ array.get_object_element(index).get_string_member("language"),
+ array.get_object_element(index).get_string_member("value")
+ );
+
+ contents.add ( add );
+ } catch (Error e) {
+ warning ("argument %u to command could not be deserialized: %s", index, e.message);
+ }
+ });
+ value.set_object (contents);
+ return true;
+ }
+
+ return default_deserialize_property (property_name, out value, pspec, property_node);
}
}
namespace Palete {
public class HoverProvider : Object, GtkSource.HoverProvider
{
+ public JsRender.JsRender file {
+ get { return this.editor.file; }
+ private set {}
+ }
+ Editor editor;
+ public HoverProvider(Editor editor)
+ {
+ this.editor = editor;
+ }
public async bool populate_async ( GtkSource.HoverContext context, GtkSource.HoverDisplay display, Cancellable? cancellable) throws Error
{
if (!context.get_bounds(out begin, out end)) {
return false;
}
-
- context.get_iter(out pos);
-
- GLib.debug("populate hover async Word: %s || %s" ,begin.get_text(pos) , pos.get_text(end) );
- display.append(new global::Gtk.Label("test"));
- return true;
+ var line = end.get_line();
+ var offset = end.get_line_offset();
+ if (this.editor.prop != null) {
+ // tried line -1 (does not work)
+ GLib.debug("node pad = '%s' %d", this.editor.node.node_pad, this.editor.node.node_pad.length);
+
+ line += this.editor.prop.start_line ;
+ // this is based on Gtk using tabs (hence 1/2 chars);
+ offset += this.editor.node.node_pad.length;
+ // javascript listeners are indented 2 more spaces.
+ if (this.editor.prop.ptype == JsRender.NodePropType.LISTENER) {
+ offset += 2;
+ }
+ }
+ var res = yield this.file.getLanguageServer().hover(this.file, line, offset);
+
+ if ( res != null && res.contents.size > 0) {
+ var str = res.contents.get(0).value;
+ display.append(new global::Gtk.Label(str));
+ return true;
+ }
+ return false;
}
public bool populate (GtkSource.HoverContext context, GtkSource.HoverDisplay display) throws Error
{
public abstract async void shutdown () throws GLib.Error;
public abstract async Lsp.CompletionList? completion(JsRender.JsRender file, int line, int offset , int triggerType = 1) throws GLib.Error;
public abstract async Gee.ArrayList<Lsp.DocumentSymbol> syntax (JsRender.JsRender file) throws GLib.Error;
-
+ public abstract async Lsp.Hover hover (JsRender.JsRender file, int line, int offset) throws GLib.Error;
}
var ret = new Gee.ArrayList<Lsp.DocumentSymbol>();
return ret;
}
+ public override async Lsp.Hover hover (JsRender.JsRender file, int line, int offset) throws GLib.Error {
+ return new Lsp.Hover();
+ }
}
}
\ No newline at end of file
var ret = new Gee.ArrayList<Lsp.DocumentSymbol>();
return ret;
}
+ public override async Lsp.Hover hover (JsRender.JsRender file, int line, int offset) throws GLib.Error {
+ return new Lsp.Hover();
+ }
}
GLib.debug ("LS replied with %s", Json.to_string (Json.gvariant_serialize (return_value), true));
var json = Json.gvariant_serialize (return_value);
- var add= Json.gobject_deserialize ( typeof (Lsp.Hover), ar.get_element(i)) as Lsp.Hover
- return ret ;
+ ret = Json.gobject_deserialize ( typeof (Lsp.Hover), json) as Lsp.Hover;
+
+ return ret;