Автозаполнение редактора ACE удаляет локальные переменные

Я использую редактор туза, и я включил basicautocompletion, и я беру данные с другого сервера, чтобы получить предложения. Все работает нормально, но я хочу удалить локальные предложения из окна предложений.

Вот мой код:

var langTools = ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");

editor.setTheme("ace/theme/xcode");
var TextMode = require("ace/mode/text").Mode;
editor.getSession().setUseWrapMode(true);

editor.setOptions({
  enableBasicAutocompletion: true,
});

var qtags = {
getCompletions: function(editor, session, pos, prefix, callback) {
  $.getJSON(jsonURL,
    function(tagList) {
      callback(null, tagList.map(function(qtag) {
        return {name: qtag.name, value: "#"+qtag.name+"() ", meta: "qtag"}
      }));
    })
  }
}
langTools.addCompleter(qtags);

Вот как это выглядит:

Пример

Я пробовал эту строку, чтобы удалить все завершающие компоненты перед добавлением моего qtag completeter, но это не удаляет локальные переменные

langTools.completers = [];

Любой ввод будет оценен, я пытаюсь избежать необходимости изменять ace/ext/language_tools.js, если это возможно, но в этот момент я открыт даже для этой опции.

Ответ 1

Хитрость заключается в вызове langTools.setCompleters([]) перед вызовом editor.setOptions({enableBasicAutocompletion: true});. Может быть, это хорошая идея, чтобы установить этот параметр в явном виде на false перед установкой или добавлением Completers. Нет необходимости изменять исходный код language_tools.

Пример:

var langTools = ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");

editor.setTheme("ace/theme/xcode");
var TextMode = require("ace/mode/text").Mode;
editor.getSession().setUseWrapMode(true);

var qtags = {
  getCompletions: function(editor, session, pos, prefix, callback) {
    $.getJSON(jsonURL,
      function(tagList) {
        callback(null, tagList.map(function(qtag) {
          return {name: qtag.name, value: "#"+qtag.name+"() ", meta: "qtag"}
      }));
    })
  }
}

langTools.setCompleters([qtags]);

editor.setOptions({
  enableBasicAutocompletion: true,
});

Ответ 2

вы можете использовать langTools.setCompleters

langTools = require("ace/ext/language_tools")
langTools.setCompleters([langTools.snippetCompleter, langTools.textCompleter])

или editor.completers = [langTools.snippetCompleter, langTools.textCompleter, qtags]