Переглянути джерело

[notebook] Improved multi-snippet autocomplete

This takes care of an issue where all autocompleters are called for all snippets when editing a single snippet. With the Ace support for session autocompleters it will now only call the completer that belongs to the snippet.

This also allows us to drop some of the odd work-arounds, and I'v dropped the extraCompleters from the binding as it doesn't seem to be in use anymore.
Johan Ahlen 10 роки тому
батько
коміт
127332c2d9

+ 14 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete.js

@@ -31,6 +31,20 @@ function Autocompleter(options) {
   self.assistHelper = options.assistHelper;
   self.assistHelper = options.assistHelper;
 }
 }
 
 
+// ACE Format for autocompleter
+Autocompleter.prototype.getCompletions = function (editor, session, pos, prefix, callback) {
+  var self = this;
+
+  var before = editor.getTextBeforeCursor(";");
+  var after = editor.getTextAfterCursor(";");
+
+  editor.showSpinner();
+  self.autocomplete(before, after, function(result) {
+    editor.hideSpinner();
+    callback(null, result);
+  });
+};
+
 Autocompleter.prototype.callAutocompleteApi = function (tableName, nested, success, failure) {
 Autocompleter.prototype.callAutocompleteApi = function (tableName, nested, success, failure) {
   var self = this;
   var self = this;
   var path = self.assistHelper.activeDatabase();
   var path = self.assistHelper.activeDatabase();

+ 4 - 55
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -1653,7 +1653,6 @@ ko.bindingHandlers.aceEditor = {
     var onPaste = options.onPaste || function () {};
     var onPaste = options.onPaste || function () {};
     var onAfterExec = options.onAfterExec || function () {};
     var onAfterExec = options.onAfterExec || function () {};
     var onExecute = options.onExecute || function () {};
     var onExecute = options.onExecute || function () {};
-    var autocompleter = options.autocompleter;
     var assistHelper = options.assistHelper;
     var assistHelper = options.assistHelper;
 
 
     $el.text(options.value());
     $el.text(options.value());
@@ -1698,6 +1697,10 @@ ko.bindingHandlers.aceEditor = {
 
 
     editor.setOptions(editorOptions);
     editor.setOptions(editorOptions);
 
 
+    if (options.autocompleter) {
+      editor.session.setCompleters([options.autocompleter]);
+    }
+
     var placeHolderElement = null;
     var placeHolderElement = null;
     var placeHolderVisible = false;
     var placeHolderVisible = false;
     if (options.placeholder) {
     if (options.placeholder) {
@@ -1907,53 +1910,6 @@ ko.bindingHandlers.aceEditor = {
       }
       }
     });
     });
 
 
-    function newCompleter(items) {
-      return {
-        getCompletions: function (editor, session, pos, prefix, callback) {
-          callback(null, items);
-        }
-      }
-    }
-
-    var originalCompleters = editor.completers.slice();
-
-    var sql_terms = /\b(FROM|TABLE|STATS|REFRESH|METADATA|DESCRIBE|ORDER BY|ON|WHERE|SELECT|LIMIT|GROUP|SORT)\b/g;
-
-    var refreshAutoComplete = function (callback) {
-      editor.completers = originalCompleters.slice();
-      if (options.extraCompleters && options.extraCompleters().length > 0) {
-        options.extraCompleters().forEach(function (complete) {
-          editor.completers.push(complete);
-        });
-      }
-
-      if (typeof autocompleter != "undefined" && autocompleter != null && (
-          editor.session.getMode().$id == "ace/mode/hive" ||
-          editor.session.getMode().$id == "ace/mode/impala" ||
-          editor.session.getMode().$id == "ace/mode/sql")) {
-        var before = editor.getTextBeforeCursor(";");
-        var after = editor.getTextAfterCursor(";");
-        editor.showSpinner();
-        autocompleter.autocomplete(before, after, function(result) {
-          editor.hideSpinner();
-          if (result.length > 0) {
-            editor.completers.push(newCompleter(result));
-          }
-          callback();
-        });
-      } else {
-        callback();
-      }
-    };
-
-    var originalExec = editor.commands.byName.startAutocomplete.exec;
-
-    editor.commands.byName.startAutocomplete.exec = function (editor) {
-      refreshAutoComplete(function() {
-        originalExec(editor);
-      });
-    };
-
     editor.previousSize = 0;
     editor.previousSize = 0;
 
 
     window.setInterval(function(){
     window.setInterval(function(){
@@ -2063,7 +2019,6 @@ ko.bindingHandlers.aceEditor = {
     });
     });
 
 
     editor.$blockScrolling = Infinity
     editor.$blockScrolling = Infinity
-    element.originalCompleters = editor.completers;
     options.aceInstance(editor);
     options.aceInstance(editor);
   },
   },
   update: function (element, valueAccessor) {
   update: function (element, valueAccessor) {
@@ -2071,12 +2026,6 @@ ko.bindingHandlers.aceEditor = {
     if (options.aceInstance()) {
     if (options.aceInstance()) {
       var editor = options.aceInstance();
       var editor = options.aceInstance();
       editor.session.setMode(options.mode);
       editor.session.setMode(options.mode);
-      editor.completers = element.originalCompleters.slice();
-      if (options.extraCompleters && options.extraCompleters().length > 0) {
-        options.extraCompleters().forEach(function (complete) {
-          editor.completers.push(complete);
-        });
-      }
     }
     }
   }
   }
 };
 };

+ 0 - 1
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -143,7 +143,6 @@ var Snippet = function (vm, notebook, snippet) {
 
 
   //Ace stuff
   //Ace stuff
   self.ace = ko.observable(null);
   self.ace = ko.observable(null);
-  self.completers = ko.observableArray([]);
   self.errors = ko.observableArray([]);
   self.errors = ko.observableArray([]);
 
 
   self.statement_raw = ko.observable(typeof snippet.statement_raw != "undefined" && snippet.statement_raw != null ? snippet.statement_raw : '');
   self.statement_raw = ko.observable(typeof snippet.statement_raw != "undefined" && snippet.statement_raw != null ? snippet.statement_raw : '');

+ 0 - 1
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -469,7 +469,6 @@ from desktop.views import _ko
           onExecute: execute,
           onExecute: execute,
           aceInstance: ace,
           aceInstance: ace,
           mode: viewSettings().aceMode,
           mode: viewSettings().aceMode,
-          extraCompleters: completers,
           errors: errors,
           errors: errors,
           autocompleter: autocompleter,
           autocompleter: autocompleter,
           assistHelper: assistHelper,
           assistHelper: assistHelper,