Saya tahu ada alat yang memvalidasi apakah kode Python Anda sesuai dengan PEP8, misalnya ada layanan online dan modul python .
Namun, saya tidak dapat menemukan layanan atau modul yang dapat mengonversi file Python saya menjadi file Python valid PEP8 yang mandiri. Apakah ada yang tahu jika ada?
Saya menganggap itu layak karena PEP8 adalah tentang penampilan kode, bukan?
python
coding-style
pep8
Chen Xie
sumber
sumber
Jawaban:
Sayangnya "pep8 storming" (seluruh proyek) memiliki beberapa efek samping negatif:
Sebagai alternatif (dan terima kasih kepada @yp untuk idenya ), saya menulis paket kecil yang autopep8s hanya baris-baris yang telah Anda kerjakan sejak komit / cabang terakhir:
Pada dasarnya meninggalkan proyek sedikit lebih baik daripada yang Anda temukan :
Misalkan Anda telah menyelesaikan pekerjaan Anda
master
dan siap untuk berkomitmen:Atau untuk membersihkan baris baru yang Anda lakukan sejak komit terakhir:
Pada dasarnya
pep8radius
adalah menerapkan autopep8 ke baris dalam keluaran git / hg diff (dari komit bersama terakhir ).Skrip ini sekarang bekerja dengan git dan hg, jika Anda menggunakan sesuatu yang lain dan ingin ini berfungsi, silakan kirim komentar / masalah / PR !
sumber
Anda dapat menggunakan autopep8 ! Saat Anda membuat sendiri secangkir kopi, alat ini dengan senang hati menghapus semua pelanggaran PEP8 yang tidak mengubah arti kode.
Instal melalui pip:
Terapkan ini ke file tertentu:
atau untuk proyek Anda (secara rekursif), opsi verbose memberi Anda beberapa umpan balik tentang bagaimana kelanjutannya :
Catatan: Terkadang default 100 lintasan tidak cukup, saya menetapkannya ke 2000 karena cukup tinggi dan akan menangkap semua kecuali file yang paling merepotkan (berhenti lewat begitu tidak menemukan pelanggaran pep8 yang dapat diselesaikan) ...
Pada titik ini saya menyarankan untuk menguji ulang dan melakukan komit!
Jika Anda ingin kepatuhan PEP8 "penuh" : satu taktik yang saya gunakan adalah menjalankan autopep8 seperti di atas, kemudian jalankan PEP8, yang mencetak pelanggaran yang tersisa (file, nomor baris, dan apa):
dan mengubahnya secara manual satu per satu (mis. E712s - perbandingan dengan boolean).
Catatan: autopep8 menawarkan
--aggressive
argumen (untuk "memperbaiki" pelanggaran yang mengubah arti ini dengan kejam), tetapi berhati-hatilah jika Anda menggunakan agresif, Anda mungkin harus men-debug ... (misalnya di numpy / pandasTrue == np.bool_(True)
tetapi tidakTrue is np.bool_(True)
!)Anda dapat memeriksa berapa banyak pelanggaran dari setiap jenis (sebelum dan sesudah):
Catatan: Saya menganggap E501s (baris terlalu panjang) adalah kasus khusus karena mungkin akan ada banyak di kode Anda dan terkadang ini tidak diperbaiki oleh autopep8.
Sebagai contoh, saya menerapkan teknik ini ke basis kode pandas .
sumber
pep8
paket yang disebutkan dalam jawaban ini telah diubah namanya menjadipycodestyle
: github.com/PyCQA/pycodestyle/releases/tag/1.7.1@Andy Hayden memberikan gambaran yang bagus tentang autopep8. Selain itu ada satu paket lagi bernama pep8ify yang juga berfungsi sama.
Namun kedua paket hanya dapat menghapus kesalahan lint tetapi tidak dapat memformat kode.
Kode di atas tetap sama setelah pep8ifying juga. Tapi kodenya belum terlihat bagus. Anda dapat menggunakan format seperti yapf , yang akan memformat kode meskipun kode tersebut sesuai dengan PEP8. Kode di atas akan diformat menjadi
Beberapa kali ini bahkan merusak pemformatan manual Anda. Sebagai contoh
akan diubah menjadi
Tetapi Anda dapat mengatakannya untuk mengabaikan beberapa bagian.
Diambil dari posting blog lama saya: Secara Otomatis PEP8 & Format Kode Python Anda!
sumber
little = more[3: 5]
bug di pep8 (perpustakaan)? yapf jelas merupakan masa depan di sini, algoritme di belakangnya (pada dasarnya jalur terpendek dalam grafik dari semua opsi pemformatan) adalah solusi yang sangat elegan, dan kemungkinan akan memiliki lebih sedikit bug serta pemformatan kanonik.Jika Anda menggunakan eclipse + PyDev, Anda cukup mengaktifkan autopep8 dari pengaturan PyDev: Windows -> Preferensi -> ketik 'autopep8' di filter pencarian.
Periksa 'gunakan autopep8.py untuk pemformatan kode?' -> OK
Sekarang format kode CTRL-SHIFT-F eclipse harus memformat kode Anda menggunakan autopep8 :)
sumber
Saya melakukan penelitian luas tentang berbagai instrumen untuk python dan gaya kode. Ada dua jenis instrumen: linter - menganalisis kode Anda dan memberikan beberapa peringatan tentang gaya kode bekas yang buruk dan menunjukkan saran cara memperbaikinya, dan pemformat kode - saat Anda menyimpan file, format ulang dokumen Anda menggunakan gaya PEP.
Karena pemformatan ulang harus lebih akurat - jika mengingat sesuatu yang tidak Anda inginkan menjadi tidak berguna - format ulang mencakup lebih sedikit bagian dari PEP, linter menampilkan lebih banyak.
Semuanya memiliki izin yang berbeda untuk konfigurasi - misalnya, pylinter dapat dikonfigurasi di semua aturannya (Anda dapat mengaktifkan / menonaktifkan setiap jenis peringatan), hitam tidak dapat dikonfigurasi sama sekali.
Berikut beberapa tautan dan tutorial berguna:
Dokumentasi:
Linters (dalam urutan popularitas):
Pemformat kode (dalam urutan popularitas):
sumber
Ada banyak.
IDE biasanya memiliki beberapa kemampuan pemformatan bawaan. IntelliJ Idea / PyCharm memilikinya, hal yang sama berlaku untuk plugin Python untuk Eclipse, dan seterusnya.
Ada pemformat / linter yang dapat menargetkan banyak bahasa. https://coala.io adalah contoh yang bagus dari itu.
Lalu ada alat tujuan tunggal, yang banyak di antaranya disebutkan dalam jawaban lain.
Salah satu metode khusus pemformatan ulang otomatis adalah dengan mengurai file menjadi pohon AST (tanpa menghapus komentar) dan kemudian membuangnya kembali ke teks (artinya tidak ada format asli yang dipertahankan). Contohnya adalah https://github.com/python/black .
sumber