Bagaimana cara memperbaiki kesalahan linting umum yang dilaporkan melalui sintaksis?

13

Saya mulai menggunakan plugin sintaksis dengan vim untuk melaporkan kesalahan serat dalam javascriptkode saya .

Saya juga mengintegrasikan eslint dengan syntastic , dan itu menunjukkan kepada saya kesalahan yang bagus, peringatan jika mereka hadir sesuai aturan yang ditulis dalam file .eslintrc saya .

Apakah ada cara di mana saya dapat memperbaiki beberapa kesalahan umum misalnya hilang semi-colon, missing space dll dengan key-stroke?

Edit:

Saya telah menemukan bahwa eslint memiliki opsi

  --fix Automatically fix problems

yang dapat digunakan untuk kasus-kasus seperti itu. Saya perlu menjalankan perintah ini untuk membiarkan eslint memperbaiki masalah itu

eslint --fix -c myconfig file.js

Saya ingin tahu bagaimana itu dapat diintegrasikan dengan vim ?

WitVault
sumber
5
1. Anda tidak perlu plugin itu untuk memeriksa sintaksis. 2. Memperbaiki kesalahan secara otomatis adalah ide yang sangat buruk.
romainl
1
Tidak semua kesalahan saya berbicara tentang kesalahan seperti ruang sekitar =, ruang di sekitar jika blok, lekukan dll. Ini adalah kesalahan yang berkaitan dengan gaya kode, bukan kesalahan aktual.
WitVault
1
Jawaban singkatnya adalah ya, tentu saja Anda bisa. Anda perlu mendefinisikan fungsi kustom untuk mengurai baris dalam perbaikan cepat mencari kesalahan spesifik yang ingin Anda perbaiki, dan menjalankan perintah berdasarkan kesalahan tersebut. Anda dapat dengan mudah menggunakan perbaikan cepat untuk membawa Anda ke lokasi setiap kesalahan juga. Anda kemudian akan memetakan fungsi ke tombol. map <C-j> call Function()<CR>Tapi ini akan menjadi fungsi yang dirancang khusus yang harus Anda tulis sesuai dengan kebutuhan Anda. Dan poin romainl adalah bahwa jika Anda melakukan sesuatu yang salah Anda dapat dengan mudah berakhir lebih banyak ruginya daripada kebaikan. Perhatian disarankan
Tumbler41
1
Gunakan printer cantik untuk menegakkan pemformatan yang konsisten.
lcd047
1
Semua IDE mendukung semacam pemformatan otomatis, saya tidak mengerti kebencian di sini. Perusahaan saya menggunakan kait pra-komitmen untuk eslint --fix, saya lebih suka memiliki ini di tingkat editor.
Jerska

Jawaban:

11

Seperti disebutkan dalam komentar, perhatikan konsekuensi modifikasi ini terhadap lingkungan kerja Anda (ketahuilah aturan eslint mana yang Anda gunakan untuk "memperbaiki" berbagai hal).

Untuk menjawab pertanyaan Anda: menambahkan opsi ke eksekusi eslint dengan sintaksis sangat mudah . Cukup tambahkan ini ke .vimrc:

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

Tetapi karena eslint dijalankan pada file setelah vim menulis buffernya ke file, vim tidak tahu tentang perbaikan yang tidak dilakukan eslint. Jadi, entah bagaimana vim harus memuat file lagi (cara manual adalah dengan mengetikkan :emode normal / perintah). Untuk melakukan itu, kita dapat menggunakan opsi autoread bersama dengan waktu pemeriksaan :

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

Untuk memanggil waktu pemeriksaan, kita dapat menggunakan autocmd yang dijalankan setiap kali buffer ditulis ke file. Tetapi karena sintaksis menggunakan autocmd-nya sendiri pada kejadian yang sama, BufWritePostkita harus menambahkan autocmd setelah sintaksis menambahkan sendiri. Saya menemukan bahwa ini adalah kasus ketika kita menambahkan autocmd kami di VimEnter:

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

Jadi setelah menambahkan ketiga bagian ke .vimrcvim Anda harus berperilaku seperti yang diharapkan (lint dan koreksi otomatis pada file save :w).

JepZ
sumber
7

Solusi yang diberikan dalam jawaban Jepz tidak sepenuhnya bekerja untuk saya. eslintdipanggil dengan benar dengan --fixopsi. Namun, mungkin itu karena internal yang telah berubah, tetapi sepertinya checktimedipanggil sebelum akhir eslint --fix, jadi memuat ulang file tidak berfungsi dengan baik, memicu file has changed, are you sure you want to write to it?pada save berikutnya.

Namun, dengan menggali masalah, saya telah menemukan kait tersembunyi yang tampaknya memicu setelah pemeriksaan Sintaksis selesai, disebut SyntasticCheckHook( sumber ).

Dengan ini, Anda cukup menelepon checktimesetelah pemeriksaan Syntastic berjalan.

Ini kode terakhir saya:

set autoread

let g:syntastic_javascript_checkers = ['eslint']

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

Sunting: Saya pribadi telah beralih ke ALElinting, yang mendukung perbaikan otomatis secara asli.

Jerska
sumber