ярлык vim ale для добавления подсказки eslint-ignore - PullRequest
0 голосов
/ 02 марта 2019

Я использую vim в течение многих лет, но я только начал интегрировать eslint (через ALE ).Я обнаружил, что иногда я хочу быстро добавить /* eslint-ignore-next-line */.Например:

 ...
❌    if (m = /^-l(\d+)$/.exec(args[i])) t.len = m[1];
 ...
~/some/dir/file.js [+]          
cond-assign: Expected a conditional expression and instead saw an assignment.

Очень удобно, что ALE дает вам код внизу окна, но, будучи ленивым, я хочу автоматизировать добавление комментария / подсказки:

/* eslint-ignore-next-line cond-assign */

Есть ли способ получить доступ к этой информации в нижней части экрана в скрипте / функции vim?

1 Ответ

0 голосов
/ 02 марта 2019

К счастью, ALE использует встроенный location-list для хранения своих сообщений lint, и это доступно через getloclist({nr}), где {nr} - регистр.Текущий регистр всегда 0.

Итак, вот метод получения всех сообщений lint для текущей строки и добавления их всех к комментарию подсказки eslint:

function AleIgnore()
  let codes = []
  for d in getloclist(0)
    if (d.lnum==line('.'))
      let code = split(d.text,':')[0]
      call add(codes, code)
    endif
  endfor
  if len(codes)
    exe 'normal O/* eslint-disable-next-line ' . join(codes, ', ') . ' */'
  endif
endfunction

Эта версия добавляет только подсказку eslint-disable-next-lineнепосредственно перед текущей строкой.Также было бы довольно легко расширить это, добавив глобальную подсказку eslint-disable в верхней части файла ... сложная часть была выяснить о getloclist().

* РЕДАКТИРОВАТЬ: ядобавление обновленной версии, которая принимает параметр new-line.Если это 0, он добавит глобальную подсказку вверху файла, а если 1, то добавит подсказку -next-line над текущей строкой.Но я сохраняю и предыдущую версию, поскольку это более простой пример, без всяких троичек и прочего.

function AleIgnore(nl)
  let codes = []
  for d in getloclist(0)
    if (d.lnum==line('.'))
      let code = split(d.text,':')[0]
      call add(codes, code)
    endif
  endfor
  if len(codes)
    exe 'normal mq' . (a:nl?'':'1G') . 'O'
          \ . '/* eslint-disable' . (a:nl?'-next-line ':' ')
          \ . join(codes, ', ') . ' */' . "\<esc>`q"
  endif
endfunction
...