Vim errorformat и jslint - PullRequest
       15

Vim errorformat и jslint

5 голосов
/ 15 сентября 2010

Я пытаюсь заставить makeprg и errorformat работать с VIM и jslint, и мне кажется, что я не могу получить правильный формат ошибок для меня ... Я использую версию jslint для nodejs, которая дает такие результаты:1001 *

1 116,9: The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.
    for (var k in o)

В основном я хочу сопоставить номер строки, столбец и ошибку и использовать текущий файл для имени файла.Кто-нибудь знает, как это сделать?

Чтобы было ясно, я ищу формат ошибки, чтобы заставить эту команду работать.В настоящее время мой файл .vimrc имеет

augroup js
    set makeprg=jslint\ %
    set errorformat=%E%>%l,%c:%m,%Z
augroup END

, который просто не работает (jslint работает нормально, но формат ошибки неверен) ...

Ответы [ 5 ]

8 голосов
/ 03 января 2012

Старый поток, но для всех, кто сталкивался с ним, как я:

Для текущей версии node-jslint, установленной через npm (v0.1.2), вывод ошибок выглядит следующим образом:

filename.js
 #1 Missing 'use strict' statement.
    y = x // Line 2, Pos 3
 #2 Expected 'y' at column 5, not column 3.
    y = x // Line 2, Pos 3

Я использую следующий efm для анализа ошибок:

autocmd FileType javascript set efm=%-P%f,
                    \%E%>\ #%n\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c,
                    \%-G%f\ is\ OK.,%-Q
6 голосов
/ 15 апреля 2012

Очень старая тема, но это продолжение превосходного ответа @ dule .Это на самом деле просто подстройка, но она может быть полезна и другим (у меня ушло некоторое время на то, чтобы разобраться с ней, так почему бы не поделиться?):

setlocal makeprg=jslint\ %
setlocal errorformat=%-P%f,
                    \%A%>%\\s%\\?#%*\\d\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c,
                    \%-G%f\ is\ OK.,%-Q

Есть два различия, оба втретья строкаСначала я заменяю исходное жестко запрограммированное совпадение одного пробела шаблоном, который соответствует нулю или одному пробелу (т. Е. Делает этот пробел необязательным).Я должен был сделать это из-за следующего вывода из jslint:

... First 8 errors trimmed
 #9 Expected '$' at column 9, not column 7.
    $('img#placeholder').attr('src', pic); // Line 15, Pos 7
#10 Expected '$' at column 9, not column 7.
    $('img#placeholder').attr('alt', desc) // Line 16, Pos 7

Посмотрите очень внимательно, и вы увидите это.Для ошибок 1-9 в начале строки есть пробел.Для 10 ... н, места нет.Маленькая вещь, но это означает, что окно быстрого исправления не работает должным образом для ошибок 10 и выше.Тьфу.(Кстати, я подумал над ответом «Не делайте более 9 ошибок в любом данном файле JS, но это выглядело слишком« хвостом вилять собакой ». Кроме того, теперь я знаю больше, чем несколько часов назад оscanf.)

Второе отличие состоит в том, что я заменил %E на %A, а сопоставитель %n - на шаблон, игнорирующий это число. Это по существу из эстетических соображений. Делать это @ dule'sКстати, вы получите этот вывод в окне быстрого исправления:

showPic.js|5 col 7 error   1| Expected 'event' at column 9, not column 7.
showPic.js|9 col 7 error   2| Expected 'var' at column 9, not column 7.

Мне не нужно количество ошибок там, и мне не нужно напоминание, что они все ошибки - я знаю это.Таким образом, используя %A, вы получите более простой вывод:

showPic.js|5 col 7| Expected 'event' at column 9, not column 7.
showPic.js|9 col 7| Expected 'var' at column 9, not column 7.
2 голосов
/ 15 сентября 2010

Я на самом деле только что вставил JSLint в свой makeprg ранее сегодня, и, естественно, мне нужна была поддержка быстрого исправления.

Я создал ветку node-jslint , которая выводит ошибки JSLint в GCC-подобном формате. efm: %f:%l:%c:%m. Если вы можете использовать node.js, я рекомендую использовать node-jslint (особенно если вы работаете над проектом node.js / CommonJS).

Что касается вашей первоначальной проблемы: я не думаю, что %> необходимо. Если удаление не помогает, попробуйте следующее:

set efm=%l,%c: %m
1 голос
/ 15 сентября 2010

Я не уверен на 100% в этой версии. Я использовал один, который я скачал, и я просто изменил исходный код jslint.js, чтобы вывести его прямо для меня. Моя линия выглядит примерно так.

var i=0;i<JSLINT.errors.length;i+=1){var e=JSLINT.errors[i];if(e){print(a[0]+':'+e.line+':'+e.reason);

Надеюсь, это поможет вам приблизиться к работе с форматом.

0 голосов
/ 15 сентября 2010

Я никогда раньше не использовал эту опцию, но примеры в справке, похоже, указывают на то, что в конце вашего шаблона должен быть добавлен %m, или, возможно, вам просто нужно экранировать запятую:

set errorformat=%E%>%l\\,%c:%m,%Z%m

Обновление: На самом деле, в вашей строке ошибки, кажется, два числа: 1, за которым следует пробел, затем 116. Возможно, это сработает:

set errorformat=%E%>%n\\ %l\\,%c:%m,%Z%m
...