vs код TextEditorEdit не вставляется второй раз - PullRequest
0 голосов
/ 19 февраля 2019

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

В настоящее время я нахожусьне знаю, как работает TextEditorEdit, но, по крайней мере, я ожидаю увидеть мои результаты (хотя, возможно, перекрывающиеся или не в правильном положении).Проблема в том, что фактически видна только первая вставка текста, а не любые последующие вставки.Я заметил, что для onable второй вставки onResolve не удалось установить значение true.Но почему?

Вот код:

matchlistItems.forEach(item => {
    let parsedMatch = parser.toString(item.text);
    let newText = newLine + parsedMatch + newLine;

    editor.edit(editBuilder => {
        let pos = new Position(pos1.line + item.line + 1, 0);
        editBuilder.insert(pos, newText);
        console.log(newText);
    }).then(success => {
        if (success) {
            editor.selection = new Selection(pos1, pos1);
        }
    }).then(undefined, err => {
        console.error(err);
    }); 
})

консоль записывает оба значения newText, но на самом деле в документ вставляется только первое.

1 Ответ

0 голосов
/ 19 февраля 2019

Нашел это.Возможно, что-то связано с асинхронной природой метода TextEditor.edit(), но вы хотите указать все правки за один раз в обратном вызове editBuilder.

В моем случае это работало нормально:

editor.edit(editBuilder => {
    matchlistItems.forEach(item => {
        let parsedMatch = parser.toString(item.text);
        let newText = newLine + parsedMatch + newLine;
        let pos = new Position(pos1.line + item.line + 1, 0);
        console.log(pos);
        editBuilder.insert(pos, newText);
    })
}).then(success => {
    if (success) {
        editor.selection = new Selection(pos1, pos1);
    } else {
        console.log(success);
    }
}).then(undefined, err => {
    console.error(err);
});
...