自定义自动完成器和句点 (.)

Custom autocompleter and periods (.)

当使用自定义前缀提取正则表达式 identifierRegexps[=12 时,我似乎无法使 getCompletions 函数在我的自定义完成器中触发=]

基本上我正在尝试创建一个自动完成器,它将在以字母开头的句点 (.) 上触发。例如。在 "foo." 中,当输入句点时,我想提出我的自定义建议。

var lang = ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");
editor.getSession().setMode("ace/mode/javascript");
editor.setOptions({
  enableBasicAutocompletion: true,
  enableSnippets: true,
  enableLiveAutocompletion: true
});

var compl = {
  identifierRegexps: [/[a-zA-Z_0-9\.$\-\u00A2-\uFFFF]/],
  getCompletions: function (editor, session, pos, prefix, callback) {
    alert(prefix);

    callback(null, []);
    return;
  }
}
lang.addCompleter(compl);

对于上面的代码片段,输入点时会出现建议弹出窗口,但 getCompletions 不会触发。但是,它确实会触发任何其他角色。

更新:

在使用

添加自定义完成器之前删除默认完成器
lang.setCompleters();

使getCompletion函数触发。但是 prefix 参数在那种情况下是空的。

设法通过修改 language_tools.js 中的 ID_REGEX var 来解决它。

在ext-language-tools.js文件中,

替换 var ID_REGEX = /[a-zA-Z_0-9$\-\u00A2-\uFFFF]/;

var ID_REGEX = /[a-zA-Z_0-9\.$\-\u00A2-\uFFFF]/;

通过上述 ID_REGEX,自动完成现在将在句点 (.)

上触发

修改language_tools.js文件不是一个好的解决办法,你可以通过调用方法getCompletionRegex调整正则表达式模式:

editor.getCompletionRegex = () => /[a-zA-Z_0-9.$\-\u00A2-\uFFFF]/;