Как захватить вывод системы сборки ниндзя в Sublime Text 3? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь настроить систему сборки ниндзя в Sublime Text 3, которая не поддерживается из коробки. Я генерирую свой ninja.build файл с мезоном. Моя система сборки настроена следующим образом:

{
    "cmd": ["ninja", "-C", "$folder/build/"],
    "keyfiles": ["meson.build", "build.ninja"],
    "file_regex": "^../([^:\n]*):([0-9]+)?.([0-9]+)?(.*):? (.*)$",
}

Согласно руководству мне нужно захватить 2,3 или 4 группы с помощью Regex. Пример ошибки выглядит следующим образом:

../src/View/Setup.vala:345.36-345.38: error: The name `loc' does not exist in the context of `View.Setup.setup_storage_location._lambda10_'
                storage_location = loc;
                                   ^^^

Я могу перейти с F4 к ошибке, но файл не открывается, даже первая группа является файлом. Как я могу получить все 4 группы (файл, строка, столбец, сообщение), даже если ниндзя предоставляют начало (строка, столбец) и конец (строка, столбец) ошибки?

1 Ответ

1 голос
/ 20 марта 2020

Чтобы захватить все части, которые поддерживает Sublime (файл, строка / столбец и сообщение), вам нужно создать file_regex, который захватывает только эти части. В этом случае это означает, что вам нужно сопоставить (но не перехватить) конечные диапазоны, чтобы вы могли получить сообщение об ошибке на конце.

Это регулярное выражение может выглядеть примерно так:

"file_regex": "^([^:]+):(\d+)?\.(\d+)-\d+\.\d+: (.*)"

Исходя из вышеприведенного вывода, оно будет захватывать имя файла, первые два значения в виде строки и столбца, а затем совпадать, но в противном случае игнорировать местоположение конечного диапазона, выбирая все остальное как сообщение.

Примечание также, что имена файлов в ваших выходных данных являются относительными именами файлов, и в результате Sublime попытается открыть их как таковые. Однако текущий каталог может не соответствовать ожидаемому, поскольку текущий каталог Sublime может отличаться от того, где выполняется ваша сборка.

Если вы видите, что даже с вашим текущим регулярным выражением файл не открывается ( но вкладка создана), это причина, по которой это происходит.

Чтобы решить эту проблему, вам нужно, чтобы все имена файлов, отображаемые с ошибками, были абсолютными путями, или вам нужно добавить ключ working_dir в вашей системе сборки, чтобы явно указать, к каким путям относятся.

Примером этого может быть что-то вроде следующего:

    "working_dir": "${folder:${project_path:${file_path}}}",

Это устанавливает рабочий каталог на первую вершину Уровень папки на боковой панели, обратно к месту, где хранится текущий проект, если нет папок, и обратно к пути к текущему файлу, если также нет проекта.

...