ShellCheck 0.9 tersedia, penganalisis statik untuk skrip shell

Keluaran projek ShellCheck 0.9 telah diterbitkan, membangunkan sistem untuk analisis statik skrip shell yang menyokong pengecaman ralat dalam skrip dengan mengambil kira ciri bash, sh, ksh dan dash. Kod projek ditulis dalam Haskell dan diedarkan di bawah lesen GPLv3. Komponen disediakan untuk penyepaduan dengan Vim, Emacs, VSCode, Sublime, Atom dan pelbagai rangka kerja yang menyokong pelaporan ralat serasi GCC.

ShellCheck 0.9 tersedia, penganalisis statik untuk skrip shell

Ia menyokong mengenal pasti kedua-dua ralat sintaks dalam kod, yang membawa kepada penterjemah memaparkan ralat pada masa pelaksanaan, dan masalah semantik, yang menyebabkan pelaksanaan tidak terganggu, tetapi anomali dalam kelakuan skrip berlaku. Penganalisis juga boleh mengenal pasti kesesakan, masalah yang tidak jelas dan perangkap yang boleh membawa kepada kegagalan dalam keadaan tertentu.

Di antara kelas ralat yang dikesan, kita boleh perhatikan masalah dengan melarikan diri aksara khas dan membingkainya dalam petikan, ralat dalam ungkapan bersyarat, penggunaan arahan yang salah, masalah masa dan tarikh pemprosesan, dan ralat sintaks biasa untuk pemula. Sebagai contoh, ketiadaan ruang apabila membandingkan "[[ $foo==0 ]]", kehadiran ruang "var = 42" atau petunjuk simbol $ apabila memberikan "$foo=42", penggunaan pembolehubah tanpa petikan "echo $1", petunjuk kurungan segi empat sama tambahan dalam "tr -cd '[a-zA-Z0-9]'",

Selain itu, ia menyokong output pengesyoran untuk menambah baik gaya kod, menghapuskan masalah mudah alih dan meningkatkan kebolehpercayaan skrip. Sebagai contoh, bukannya "gema $[1+2]" ia akan dicadangkan untuk menggunakan sintaks "$((..))", pembinaan 'rm -rf "$STEAMROOT/"*' akan ditandakan sebagai tidak selamat dan mampu memadamkan direktori akar jika pembolehubah tidak diisi $STEAMROOT, dan penggunaan "gema {1..10}" akan diserlahkan sebagai tidak serasi dengan sempang dan sh.

Dalam versi baharu:

  • Menambahkan amaran untuk ungkapan seperti 'baca sahaja foo tempatan'.
  • Menambahkan amaran tentang arahan yang tidak tersedia.
  • Menambahkan amaran tentang pautan balik untuk 'mengisytiharkan x=1 y=$x'.
  • Menambahkan amaran jika $? digunakan untuk mencetak kod pemulangan gema, printf, [ ], [[ ]] dan ujian.
  • Penambahan syor untuk mengalih keluar ((..))inarray[((idx))]=val.
  • Menambahkan syor untuk menggabungkan kurungan berganda dalam konteks aritmetik.
  • Menambahkan pengesyoran untuk mengalih keluar kurungan dalam ungkapan a[(x+1)]=val.

Sumber: opennet.ru

Tambah komen