Пользовательское автозаполнение в ace-editor не работает после ". - PullRequest
0 голосов
/ 21 мая 2018

Я хочу использовать автозаполнение в редакторе туза.После того, как пользователь наберет foo., я хочу предложить foo.bar.

На самом деле я использовал следующий код:

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

var staticWordCompleter = {
    identifierRegexps: [/[\.]/],
    getCompletions: function(editor, session, pos, prefix, callback) {
        console.log(prefix);
        if (prefix == "foo.") {
            var wordList = ["baar", "bar", "baz"];
            callback(null, wordList.map(function(word) {
                return {
                    caption: word,
                    value: word,
                    meta: "static"
                };
        }
        }));

    }
}

langTools.setCompleters([staticWordCompleter])

Если я удаляю identifierRegexps и предложение if, автозаполнение работает, но не после ".".

Я также читал это решение, но оно больше не работает: Пользовательский автозаполнение и периоды (.)

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете связать "."и затем создайте свой список слов.Вы можете сделать свой wordList глобальным и использовать его в getCompletions или как только вы связываете "."используйте этот код, чтобы получить элемент before, т.е. foo, а затем вставьте значение в редактор.

    self.editor.commands.addCommand({
        name: "dotCommand1",
        bindKey: { win: ".", mac: "." },
        exec: function () {
            var pos = editor.selection.getCursor();
            var session = editor.session;

            var curLine = (session.getDocument().getLine(pos.row)).trim();
            var curTokens = curLine.slice(0, pos.column).split(/\s+/);
            var curCmd = curTokens[0];
            if (!curCmd) return;
            var lastToken = curTokens[curTokens.length - 1];

            editor.insert(".");                

            if (lastToken === "foo") {
                // Add your words to the list or then insert into the editor using editor.insert()
            }
        }
   });
...