VSCode Открыть файл в специальном формате c Номер строки, используя JS - PullRequest
1 голос
/ 18 июня 2020

Я добавил новую кнопку в свой VSCode, так что, когда я нажимаю на нее, она компилирует текущую папку и показывает диалоговые окна с использованием vscode.window.showInformationMessage.
В каждом поле отображается ошибка компиляции и есть кнопка в нем . Как только пользователь нажимает кнопку, он открывает файл c с проблемой во вкладке, используя vscode.workspace.openTextDocument.

Я хочу сделать так, чтобы кнопка также перемещала меня к строке problemati c в файле problemati c.

Мой вопрос:
Учитывая число, можно ли перейти к указанному c номеру строки внутри файла?

Пример кода того, что я достиг до сих пор:

// Bullshit to give some context
const pattern = /(In \w+.jack)/g;
var i = s.search(pattern);
var substring = s.substring(i + 1)
var j = substring.search(pattern);
var s = "bsadsdbla In main.jack (line 55) sqdwqe blasdsd wq qqweq"
let GoToFile = 'Go to File'; 
var k = s.search(/(\w+.jack)/);
var l = s.search(/(.jack)/)
var fileName = s.substring(k, l);

// ---------> This is the important part <----------------
vscode.window.showInformationMessage(s.substring(i, j), GoToFile).then(selection => {
    if (selection === GoToFile) {
        vscode.workspace.openTextDocument(currentDirectory + '\\' + fileName + '.jack')
        .then(document => vscode.window.showTextDocument(document));
    }
});

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Я предполагаю, что у вас есть код / ​​регулярное выражение, которое дает вам номер строки. Каждый раз, когда кто-то щелкает ваш метод GoToFile, вызывайте следующий код:

activeEditor.selections = [new vscode.Selection(lineToGo, lineToGo)];
var range = new vscode.Range(lineToGo, lineToGo);
activeEditor.revealRange(range);
0 голосов
/ 19 июня 2020

Некоторая предыстория:
Как упоминалось в @ rioV8, revealRange был способом go, но проблема заключалась в том, что я не мог понять, как его использовать с помощью VSCode API, Итак, здесь появился @Shahriar Hossain. Код @Shahriar Hossain работает, однако отсутствует важное объявление, и мне также пришлось выяснить, как запускать код, когда пользователь нажимает кнопку.

Это полное решение:

       vscode.window.showInformationMessage(s.substring(i), GoToFile).then(selection => {
          if (selection === GoToFile) {

            vscode.workspace.openTextDocument(currentDirectory + '\\' + fileName + '.jack')
            .then(document => vscode.window.showTextDocument(document))

            // Whatever code inside this "then" block 
            // will be executed on button click
            .then(x => {
              let m = s.substring(i, j).search(/\(line \d+\)/);
              let subStr = s.substring(m + 6);
              let n = subStr.search(/\)/);
              subStr = subStr.substring(0, n);
              let lineToGo = parseInt(subStr.match(/\d+/));

              // The missing declaration of the activeEditor
              let activeEditor = vscode.window.activeTextEditor;
              let range = activeEditor.document.lineAt(lineToGo - 1).range;
              activeEditor.selection =  new vscode.Selection(range.start, range.end);
              activeEditor.revealRange(range);
            })

          }
        });
...