syntastic을 통해보고 된 일반적인 linting 오류를 자동으로 수정하는 방법은 무엇입니까?


13

코드에 린트 오류를보고하기 위해 vim 과 함께 신택스 플러그인을 사용하기 시작했습니다 .javascript

또한 eslintsyntastic을 통합 했으며 .eslintrc 파일에 작성된 규칙에 따라 오류가 발생하면 경고를 표시 합니다.

세미콜론 누락, 공백 입력 등 키 입력으로 일반적인 오류를 해결할 수있는 방법이 있습니까?

편집하다:

eslint 에 옵션 이 있음을 발견했습니다

  --fix Automatically fix problems

그런 경우에 사용할 수 있습니다. eslint가 문제를 해결하도록하려면이 명령을 실행해야합니다.

eslint --fix -c myconfig file.js

어떻게 vim 과 통합 할 수 있는지 알고 싶습니다 .


5
1. 구문 검사를 위해 해당 플러그인이 필요하지 않습니다. 2. 자동 수정 오류는 매우 나쁜 생각입니다.
romainl

1
space = =, if if if space, indentation 등과 같은 오류에 대해 이야기하는 모든 오류는 아닙니다. 실제 오류가 아닌 코드 스타일과 관련된 오류입니다.
WitVault 2016 년

1
대답은 그렇습니다. 물론 가능합니다. 수정하려는 특정 오류를 찾고 빠른 수정 사항에서 행을 구문 분석하고 해당 오류를 기반으로 명령을 실행하려면 사용자 정의 함수를 정의해야합니다. 빠른 수정 사항을 사용하여 각 오류의 위치로 쉽게 이동할 수 있습니다. 그런 다음 함수를 키 입력에 매핑합니다. map <C-j> call Function()<CR>그러나 이것은 필요에 맞게 작성해야하는 매우 사용자 정의 된 기능입니다. 그리고 romainl의 요점은 당신이 잘못한 것을하면 선보다 더 많은 해를 입히게된다는 것입니다. 주의가 권장됩니다
Tumbler41

1
일관된 형식을 유지하려면 예쁜 프린터를 사용하십시오.
lcd047

1
IDE는 모두 일종의 자동 서식을 지원하므로 여기가 싫다는 것을 이해하지 못합니다. 우리 회사는 사전 커밋 후크를 사용하여eslint --fix 하여 편집자 수준에서 사용하고 싶습니다.
Jerska

답변:


11

의견에서 언급 한 바와 같이이 수정 사항이 작업 환경에 미치는 결과에 대해 알고 있어야합니다 (사물을 "수정"하는 데 사용하는 eslint 규칙을 정확히 알고 있어야 함).

질문에 대답하려면 구문을 사용하여 eslint 실행에 옵션을 추가하는 것이 간단합니다 . 간단히 이것을 다음에 추가하십시오 .vimrc.

" execute eslint with --fix flag
let g:syntastic_javascript_eslint_args = ['--fix']

그러나 vim이 버퍼를 파일에 쓴 후 파일에서 eslint가 실행되면 vim은 eslint가 수행하는 수정 사항에 대해 알지 못합니다. 따라서 어떻게 든 vim은 파일을 다시로드해야합니다 (수동 방법은 단순히 :e일반 / 명령 모드로 입력하는 것입니다 ). 이를 위해 autoread 옵션을 checktime 과 함께 사용할 수 있습니다 .

" enable autoread to reload any files from files when checktime is called and
" the file is changed
set autoread

checktime을 호출하기 위해 버퍼가 파일에 쓰여질 때마다 실행 되는 autocmd 를 사용할 수 있습니다 . 그러나 구문이 동일한 이벤트에서 자체 autocmd를 사용하므로 구문이 자체적 BufWritePost으로 추가 된 후 autocmd를 추가해야합니다. autocmd를 VimEnter다음과 같이 추가 한 경우입니다 .

" add an autocmd after vim started to execute checktime for *.js files on write
au VimEnter *.js au BufWritePost *.js checktime

따라서 .vimrcvim에 세 부분을 모두 추가하면 파일 저장시 보풀이 생기고 자동 수정됩니다:w ).


7

Jepz의 답변에 주어진 해결책은 완전히 작동하지 않았습니다. eslint와 함께 올바르게 호출되었습니다--fix옵션 . 그러나 내부가 변경 되었기 때문일 수도 있지만 checktime종료 전에 호출 된 것처럼 보이 eslint --fix므로 파일 다시로드가 제대로 작동하지 않아 file has changed, are you sure you want to write to it?다음 저장시 트리거 됩니다.

그러나 문제를 파헤쳐 서 Syntastic 검사가 완료된 후 트리거되는 숨겨진 후크를 발견했습니다. SyntasticCheckHook ( source ).

이를 통해 checktimeSyntastic 검사가 실행 된 후 간단히 호출 할 수 있습니다 .

마지막 코드는 다음과 같습니다.

set autoread

let g:syntastic_javascript_checkers = ['eslint']

" autofix with eslint
let g:syntastic_javascript_eslint_args = ['--fix']
function! SyntasticCheckHook(errors)
  checktime
endfunction

편집 : 나는 개인적으로 자동 수정 ALE을 지원하는 보푸라기 로 전환했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.