#vim #compiler-construction #jslint #errorformat
#vim #построение компилятора #jslint #формат ошибки
Вопрос:
У меня в системе установлен jslint с npm.
Он выдает сообщения об ошибках в следующем формате:
1 1,9: Missing name in function statement.
function() {
2 2,11: Use '===' to compare with '0'.
if (x == 0) {
3 4,2: Unnecessary semicolon.
};
Я написал плагин компилятора для Vim для анализа сообщений об ошибках, но я не смог выяснить проблему с errorformat
. Теперь в моем файле компилятора есть следующее:
CompilerSet makeprg=jslint
\ $*
\ %
CompilerSet errorformat=
%*[ ]%n %l,%c: %m,
%-G%.%#
Какой AFAIK должен выполнять следующее:
%*[ ]
— пропустить пробелы в начале строки%n
— сопоставьте номер ошибки%l
— совпадение по номеру строки,
— пропустить запятую%c
— сопоставьте номер столбца:
— пропустить двоеточие%m
— соответствует сообщению об ошибке,
— новая строка%-G%.%#
— пропустить все остальные
Он запускает, jslint
который показывает сообщения, но :clist
команда не показывает никаких ошибок.
Чего я не понимаю?
Комментарии:
1. Я знаю, что в stackoverflow есть шаблоны сообщений об ошибках vim, но я хотел бы найти проблему здесь, а не использовать другой jslint.
2. этот комментарий не имеет смысла. Использование формата ошибки в vim не приведет к использованию другого jslint. Проблема здесь заключается в errorformat (который не соответствует выводам jslint)
3. В Интернете есть разные строки vim errorformat, но не для этого вывода jslint. Я понимаю, что проблема связана с errorformat, мой вопрос в чем.
Ответ №1:
Проблема была с ,
, пропущенной запятой, правильный формат:
CompilerSet errorformat=
%*[ ]%n %l%.%c: %m,
%-G%.%#
Ответ №2:
Запятая должна быть экранирована с помощью, \,
поскольку ,
это специальный символ в errorformat и
это специальный символ в файле конфигурации vim, который сам по себе должен экранироваться. Для vim ваш формат ошибки тогда %*[ ]%n %l,%c: %m,%-G%.%#
, поскольку
в начале строки или перед пробелами используются экранирования для vim, а не для формата ошибки.