src/Builder4/WindowRooView.bjs
[app.Builder.js] / src / Palete / CompletionProvider.vala
index 044ee93..36b9c99 100644 (file)
@@ -19,57 +19,84 @@ namespace Palete {
 
                public string get_name ()
                {
-                 return  "test";
+                 return  "roojsbuilder";
                }
 
                public int get_priority ()
                {
-                 return 1;
+                 return 200;
                }
 
                public bool match (SourceCompletionContext context)
                {
-               
-                       return true;
+                       bool has_matches = false;
+                       this.fetchMatches(context, out has_matches);
+                       return has_matches;
                }
 
+               public List<SourceCompletionItem>? fetchMatches(SourceCompletionContext context, out bool has_matches)
+               {
+                    has_matches = false;
+
+                   if (this.windowstate == null) {
+                           this.windowstate = this.editor.window.windowstate;
+                   }
+               
+               
+                   var buffer = context.completion.view.buffer;
+                   var  mark = buffer.get_insert ();
+                   TextIter end;
+
+                   buffer.get_iter_at_mark (out end, mark);
+                   var endpos = end;
+               
+                   var searchpos = endpos;
+               
+                   searchpos.backward_find_char(is_space, null);
+                   searchpos.forward_char();
+                   var search = endpos.get_text(searchpos);
+                   print("got search %s\n", search);
+               
+                   if (search.length < 2) {
+                           return null;
+                   }
+               
+                   // now do our magic..
+                   var filtered_proposals = this.windowstate.file.palete().suggestComplete(
+                           this.windowstate.file,
+                           this.editor.node,
+                           this.editor.ptype,
+                           this.editor.key,
+                           search
+                   );
+               
+                   print("GOT %d results\n", (int) filtered_proposals.length()); 
+               
+                   if (filtered_proposals.length() < 2) {
+                       return null;
+                   }
+               
+                   filtered_proposals.sort((a, b) => {
+                           return ((string)(a.text)).collate((string)(b.text));
+                   });
+                   has_matches = true;
+                   return filtered_proposals;
+
+               }
+       
                public void populate (SourceCompletionContext context)
                {
-                       if (this.windowstate == null) {
-                               this.windowstate = this.editor.window.windowstate;
-                       }
-                       
-                       
-                       var buffer = context.completion.view.buffer;
-                       var  mark = buffer.get_insert ();
-                       TextIter end;
-
-                       buffer.get_iter_at_mark (out end, mark);
-                       var endpos = end;
-                       
-                       var searchpos = endpos;
-                       
-                       searchpos.backward_find_char(is_space, null);
-                       searchpos.forward_char();
-                       var search = endpos.get_text(searchpos);
-                       print("got search %s\n", search);
-                       
-                       if (search.length < 2) {
-                               return;
+                       bool has_matches = false;
+                       var filtered_proposals = this.fetchMatches(context, out has_matches);
+                       if (!has_matches) {
+                           context.add_proposals (this, null, true);
+                           return;
                        }
-                       // now do our magic..
-                       var filtered_proposals = this.windowstate.file.palete().suggestComplete(
-                               this.windowstate.file,
-                               this.editor.node,
-                               this.editor.ptype,
-                               this.editor.key,
-                               search
-                       );
-                       filtered_proposals.sort((a, b) => {
-                               return ((string)(a.text)).collate((string)(b.text));
-                       });
-                        
+                       // add proposals triggers a critical error in Gtk - try running gtksourceview/tests/test-completion.
+                       // see https://bugzilla.gnome.org/show_bug.cgi?id=758646
+                       var fe = GLib.Log.set_always_fatal(0); 
                        context.add_proposals (this, filtered_proposals, true);
+                       GLib.Log.set_always_fatal(fe);
                }
 
 
@@ -135,3 +162,4 @@ namespace Palete {
 
 
 } 
+