Fix #8049 - language server hover and editor hover (not supported for gtkview / rooview)
[roobuilder] / src / Palete / HoverProvider.vala
1
2
3 namespace Palete {
4         public class HoverProvider : Object, GtkSource.HoverProvider
5         {
6                 public JsRender.JsRender file {
7                         get { return this.editor.file; }
8                         private set {}
9                 }
10                 Editor editor;
11                 public HoverProvider(Editor editor) 
12                 {
13                         this.editor = editor;
14                 }
15                 
16                 public async bool populate_async ( GtkSource.HoverContext context, GtkSource.HoverDisplay display, Cancellable? cancellable) throws Error 
17                 {
18                         
19
20                         global::Gtk.TextIter begin, end ,  pos;
21
22                         if (!context.get_bounds(out begin, out end)) {
23                                 return false;
24                         }
25                         var line = end.get_line();
26                         var offset =  end.get_line_offset();
27                         if (this.editor.prop != null) {
28                         //      tried line -1 (does not work)
29                                 GLib.debug("node pad = '%s' %d", this.editor.node.node_pad, this.editor.node.node_pad.length);
30                                 
31                                 line += this.editor.prop.start_line ; 
32                                 // this is based on Gtk using tabs (hence 1/2 chars);
33                                 offset += this.editor.node.node_pad.length;
34                                 // javascript listeners are indented 2 more spaces.
35                                 if (this.editor.prop.ptype == JsRender.NodePropType.LISTENER) {
36                                         offset += 2;
37                                 }
38                         } 
39                         var res = yield this.file.getLanguageServer().hover(this.file, line, offset);
40                         
41                         if ( res != null && res.contents.size > 0) {
42                                 var str = res.contents.get(0).value;
43                                 display.append(new global::Gtk.Label(str));
44                                 return true;
45                         } 
46                         return false;
47                 }
48                 public bool populate (GtkSource.HoverContext context, GtkSource.HoverDisplay display) throws Error
49                 {
50                         global::Gtk.TextIter begin, end;
51
52                         if (!context.get_bounds(out begin, out end)) {
53                                 return true;
54                         }
55                         GLib.debug("populate hover Word: %s" ,begin.get_text(end));return false;
56                         return true;
57                         
58                 }
59         }
60 }