
Perl :: kritik - kritik kode sumber perl untuk praktik terbaik.
use Perl::Critic;
my $file = shift;
my $critic = Perl::Critic->new();
my @violations = $critic->critique($file);
print @violations;
Perl :: Critic adalah kerangka kerja yang dapat diperluas untuk membuat dan menerapkan standar pengkodean ke kode sumber Perl. Pada dasarnya, ini adalah mesin analisis kode sumber statis. Perl :: Critic didistribusikan dengan sejumlah Perl :: Critic :: Modul Kebijakan yang berupaya menegakkan berbagai pedoman pengkodean. Sebagian besar modul kebijakan didasarkan pada buku Damian Conway Perl Praktik Terbaik . Namun, Perl :: Critic tidak terbatas pada PBP dan bahkan akan mendukung kebijakan yang bertentangan dengan Conway. Anda dapat mengaktifkan, menonaktifkan, dan menyesuaikan kebijakan tersebut melalui antarmuka Perl :: Critic. Anda juga dapat membuat modul kebijakan baru yang sesuai dengan selera Anda sendiri.
Untuk antarmuka baris perintah ke Perl :: Critic, lihat dokumentasi untuk Perlcritic. Jika Anda ingin mengintegrasikan Perl :: kritikus dengan proses pembuatan Anda, tes :: Perl :: Critic menyediakan antarmuka yang cocok untuk program pengujian. Juga, tes :: Perl :: Critic :: Progressive berguna untuk secara bertahap menerapkan standar pengkodean ke kode warisan. Untuk kenyamanan tertinggi (dengan mengorbankan beberapa fleksibilitas) melihat pragma kritik.
Jika Anda ingin mencoba Perl :: Critic tanpa menginstal apa pun, ada layanan web yang tersedia di http://perlcritic.com. Layanan web belum mendukung semua fitur konfigurasi yang tersedia di API Perl :: Critic Native, tetapi itu harus memberi Anda ide bagus tentang apa yang dilakukannya.
Juga, ActivePerl mencakup antarmuka grafis yang sangat apik untuk perltl-kritik yang disebut perlcritic-gui . Anda bisa mendapatkan edisi komunitas gratis ActivePerl dari http://www.activestate.com.
Perl :: Critic menjalankan Perl kembali ke Perl 5.10.1. Ini bergantung pada modul PPI untuk melakukan pekerjaan berat dari parsing Perl.
Modul Perl::Critic dianggap kelas publik. Setiap perubahan antarmuka akan melalui siklus penghentian.
new( [ -profile => $FILE, -severity => $N, -theme => $string, -include => @PATTERNS, -exclude => @PATTERNS, -top => $N, -only => $B, -profile-strictness => $PROFILE_STRICTNESS_{WARN|FATAL|QUIET}, -force => $B, -verbose => $N ], -color => $B, -pager => $string, -allow-unsafe => $B, -criticism-fatal => $B)
new()
Mengembalikan referensi ke objek baru Perl :: Critic. Sebagian besar argumen baru saja diteruskan langsung ke Perl :: Critic :: Config, tetapi saya telah menggambarkannya di sini juga. Nilai default untuk semua argumen dapat didefinisikan dalam file .perlcriticrc Anda. Lihat bagian "Konfigurasi" untuk informasi lebih lanjut tentang itu. Semua argumen adalah pasangan nilai kunci opsional sebagai berikut:
-Profil adalah jalur ke file konfigurasi. Jika $FILE tidak ditentukan, Perl :: Critic :: Config mencoba menemukan file konfigurasi .perlcriticrc di direktori saat ini, dan kemudian di direktori home Anda. Atau, Anda dapat mengatur variabel lingkungan PERLCRITIC untuk menunjuk ke file di lokasi lain. Jika file konfigurasi tidak dapat ditemukan, atau jika $FILE adalah string kosong, maka semua kebijakan akan dimuat dengan konfigurasi default mereka. Lihat "Konfigurasi" untuk informasi lebih lanjut.
-Severity adalah tingkat keparahan minimum. Hanya modul kebijakan yang memiliki keparahan lebih besar dari $N yang akan diterapkan. Nilai keparahan adalah bilangan bulat mulai dari 1 (pelanggaran paling parah) hingga 5 (pelanggaran paling parah). Standarnya adalah 5. Untuk -profile yang diberikan, mengurangi -severity biasanya akan mengungkapkan lebih banyak pelanggaran kebijakan. Anda dapat mengatur nilai default untuk opsi ini di file .perlcriticrc Anda. Pengguna dapat mendefinisikan kembali tingkat keparahan untuk kebijakan apa pun dalam file .perlcriticrc mereka. Lihat "Konfigurasi" untuk informasi lebih lanjut.
Jika sulit bagi Anda untuk mengingat apakah tingkat keparahan "5" adalah tingkat yang paling atau paling tidak ketat, maka Anda dapat menggunakan salah satu dari nilai -nilai bernama ini:
SEVERITY NAME ...is equivalent to... SEVERITY NUMBER
--------------------------------------------------------
-severity => 'gentle' -severity => 5
-severity => 'stern' -severity => 4
-severity => 'harsh' -severity => 3
-severity => 'cruel' -severity => 2
-severity => 'brutal' -severity => 1
Nama -nama tersebut mencerminkan betapa beratnya kode tersebut dikritik: kritik gentle hanya melaporkan pelanggaran yang paling parah, dan sebagainya hingga kritik brutal yang bahkan melaporkan bahkan pelanggaran yang paling kecil.
-Hem adalah ekspresi khusus yang menentukan kebijakan mana yang harus diterapkan berdasarkan tema masing -masing. Misalnya, berikut ini hanya akan memuat kebijakan yang memiliki tema 'bug' dan 'PBP':
my $critic = Perl::Critic->new( -theme => 'bugs && pbp' );
Kecuali jika opsi -severity diberikan secara eksplisit, pengaturan -theme diam -diam menyebabkan -severity diatur ke 1. Anda dapat mengatur nilai default untuk opsi ini dalam file .perlcriticrc Anda. Lihat bagian "Tema Kebijakan" untuk informasi lebih lanjut tentang tema.
-Mering adalah referensi ke daftar string @PATTERNS . Modul kebijakan yang cocok dengan setidaknya satu m/$PATTERN/ixms akan selalu dimuat, terlepas dari semua pengaturan lainnya. Misalnya:
my $critic = Perl::Critic->new(-include => ['layout'], -severity => 4);
Ini akan menyebabkan Perl :: kritikus menerapkan semua modul kebijakan CodeLayout::* meskipun mereka memiliki tingkat keparahan yang kurang dari 4. Anda dapat menetapkan nilai default untuk opsi ini dalam file .perlcriticrc Anda. Anda juga dapat menggunakan -include Sehubungan dengan opsi -exclude . Perhatikan bahwa -exclude lebih diutamakan -include ketika suatu kebijakan cocok dengan kedua pola.
-Exclude adalah referensi ke daftar string @PATTERNS . Modul kebijakan yang cocok dengan setidaknya satu m/$PATTERN/ixms tidak akan dimuat, terlepas dari semua pengaturan lainnya. Misalnya:
my $critic = Perl::Critic->new(-exclude => ['strict'], -severity => 1);
Ini akan menyebabkan Perl :: kritikus tidak menerapkan modul kebijakan RequireUseStrict dan ProhibitNoStrict meskipun mereka memiliki tingkat keparahan yang lebih besar dari 1. Anda dapat menetapkan nilai default untuk opsi ini dalam file .perlcriticrc Anda. Anda juga dapat menggunakan -exclude bersamaan dengan opsi -include . Perhatikan bahwa -exclude lebih diutamakan -include ketika suatu kebijakan cocok dengan kedua pola.
-Men-kebijakan adalah PATTERN string. Hanya satu kebijakan yang cocok dengan m/$PATTERN/ixms yang akan digunakan. Kebijakan yang tidak cocok akan dikecualikan. Opsi ini telah diutamakan daripada opsi -severity , -theme , -include , -exclude , dan -only opsi. Anda dapat mengatur nilai default untuk opsi ini di file .perlcriticrc Anda.
-Top adalah jumlah maksimum pelanggaran untuk kembali ketika diberi peringkat berdasarkan tingkat keparahannya. Ini harus menjadi bilangan bulat positif. Pelanggaran masih dikembalikan dalam urutan yang terjadi dalam file. Kecuali jika opsi -severity diberikan secara eksplisit, pengaturan -top diam -diam menyebabkan -severity diatur ke 1. Anda dapat mengatur nilai default untuk opsi ini dalam file .perlcriticrc Anda.
-setika adalah nilai boolean. Jika diatur ke nilai sebenarnya, Perl :: Critic hanya akan memilih dari kebijakan yang disebutkan dalam profil pengguna. Jika diatur ke nilai palsu (yang merupakan default), maka Perl :: Critic memilih dari semua kebijakan yang ditemukan di situs Anda. Anda dapat mengatur nilai default untuk opsi ini di file .perlcriticrc Anda.
-Profile-strictness adalah nilai yang disebutkan, salah satu dari "$ profile_strictness_warn" dalam perl :: kritik :: utils :: konstanta (default), "$ profile_strictness_fatal" dalam perl :: kritik :: constants: dan "$ profile_strictness" dalam perl: dalam perl :: UTILS :: Constants, dan "$ Profile_Strictness" di Perl: dalam Perl: dalam Perl :: UTILS :: Constants, dan "$ Profile_Strictnessness" in Perl: dalam Perl: dalam Perl: Jika diatur ke "$ profile_strictness_fatal" di Perl :: Critic :: utils :: Constants, Perl :: Critic akan membuat peringatan tertentu tentang masalah yang ditemukan dalam .perlcriticrc atau file yang ditentukan melalui opsi -opsi -fatal. Misalnya, Perl :: Critic biasanya hanya warn tentang profil yang mengacu pada kebijakan yang tidak ada, tetapi nilai ini membuat situasi ini fatal. Sejalan dengan itu, "$ profile_strictness_quiet" dalam perl :: kritik :: utils :: konstanta membuat perl :: kritikus diam tentang hal -hal ini.
-Force adalah nilai boolean yang mengontrol apakah Perl :: Critic mengamati anotasi magis "## no critic" dalam kode Anda. Jika diatur ke nilai sebenarnya, Perl :: Critic akan menganalisis semua kode. Jika diatur ke nilai palsu (yang merupakan default) Perl :: Critic akan mengabaikan kode yang ditandai dengan anotasi ini. Lihat "Menekuk aturan" untuk informasi lebih lanjut. Anda dapat mengatur nilai default untuk opsi ini di file .perlcriticrc Anda.
-Verbose bisa menjadi bilangan bulat positif (dari 1 hingga 11), atau spesifikasi format literal. Lihat Perl :: Critic :: Pelanggaran untuk penjelasan spesifikasi format. Anda dapat mengatur nilai default untuk opsi ini di file .perlcriticrc Anda.
-unsafe mengarahkan Perl :: kritikus untuk mengizinkan penggunaan kebijakan yang ditandai sebagai "tidak aman" oleh penulis. Kebijakan semacam itu dapat menyusun kode yang tidak dipercaya atau melakukan hal -hal jahat lainnya.
-Color dan -Pager tidak digunakan oleh Perl :: Critic tetapi disediakan untuk kepentingan Perlcritic.
-Critikisme-fatal tidak digunakan oleh Perl :: kritikus tetapi disediakan untuk kepentingan kritik.
-color-severity-tertinggi , -color-severity-tinggi , -color-severity- medium , -color-severity-rendah , dan -color-severitas terwujud tidak digunakan oleh Perl :: kritikus, tetapi disediakan untuk kepentingan Perlcritik. Masing -masing diatur ke istilah :: spesifikasi warna ansicolor yang akan digunakan untuk menampilkan pelanggaran keparahan yang sesuai.
-files-with-violations dan -files-without-violations tidak digunakan oleh perl :: kritikus, tetapi disediakan untuk kepentingan Perlcritic, untuk hanya menyebabkan nama file yang relevan ditampilkan.
critique( $source_code )
Menjalankan $source_code melalui mesin Perl :: Critic menggunakan semua kebijakan yang telah dimuat ke dalam mesin ini. Jika $source_code adalah referensi skalar, maka itu diperlakukan sebagai string kode Perl yang sebenarnya. Jika $source_code adalah referensi ke instance dari PPI :: Document, maka instance itu digunakan secara langsung. Kalau tidak, itu diperlakukan sebagai jalur ke file lokal yang berisi kode perl. Metode ini mengembalikan daftar Perl :: Critic :: Pelanggaran objek untuk setiap pelanggaran kebijakan yang dimuat. Daftar ini diurutkan sesuai urutan pelanggaran yang muncul dalam kode. Jika tidak ada pelanggaran, metode ini mengembalikan daftar kosong.
add_policy( -policy => $policy_name, -params => %param_hash )
Membuat objek kebijakan dan memuatnya ke dalam kritik ini. Jika objek tidak dapat dipakai, itu akan melempar pengecualian fatal. Kalau tidak, ia mengembalikan referensi ke kritik ini.
-Policy adalah nama modul Subkelas Perl :: Critic :: Policy. Bagian 'Perl::Critic::Policy' dari nama tersebut dapat dihilangkan untuk singkatnya. Argumen ini diperlukan.
-Params adalah referensi opsional ke hash parameter kebijakan. Isi referensi hash ini akan diteruskan ke konstruktor modul kebijakan. Lihat dokumentasi dalam modul kebijakan yang relevan untuk deskripsi argumen yang didukungnya.
policies()
Mengembalikan daftar yang berisi referensi ke semua objek kebijakan yang telah dimuat ke dalam mesin ini. Objek akan dalam urutan yang dimuat.
config()
Mengembalikan objek CRITIC :: CRITIC :: Config yang dibuat atau diberikan kepada kritikus ini.
statistics()
Mengembalikan objek Perl :: Critic :: Statistics yang dibuat untuk kritik ini. Objek Statistik mengumpulkan data untuk semua file yang dianalisis oleh kritik ini.
Bagi orang -orang yang lebih suka memiliki antarmuka fungsional, metode critique dapat diekspor berdasarkan permintaan dan dipanggil sebagai fungsi statis. Jika argumen pertama adalah hashref, isinya digunakan untuk membangun objek baru Perl :: Critic secara internal. Kunci hash itu harus sama dengan yang didukung oleh metode Perl::Critic::new() . Berikut beberapa contoh:
use Perl::Critic qw(critique);
# Use default parameters...
@violations = critique( $some_file );
# Use custom parameters...
@violations = critique( {-severity => 2}, $some_file );
# As a one-liner
%> perl -MPerl::Critic=critique -e 'print critique(shift)' some_file.pm
Tidak ada metode objek lain yang saat ini didukung sebagai fungsi statis. Maaf.
Sebagian besar pengaturan untuk Perl :: Critic dan masing -masing modul kebijakan dapat dikontrol oleh file konfigurasi. File konfigurasi default disebut .perlcriticrc . Perl :: Critic akan mencari file ini di direktori saat ini terlebih dahulu, dan kemudian di direktori home Anda. Atau, Anda dapat mengatur variabel lingkungan PERLCRITIC untuk secara eksplisit menunjuk ke file yang berbeda di lokasi lain. Jika tidak ada file -file ini, dan opsi -profile tidak diberikan kepada konstruktor, maka semua modul yang ditemukan dalam Perl :: Critic :: Policy Namespace akan dimuat dengan konfigurasi default mereka.
Format file konfigurasi adalah serangkaian blok bergaya INI yang berisi pasangan nilai kunci yang dipisahkan oleh '='. Komentar harus dimulai dengan '#' dan dapat ditempatkan pada baris terpisah atau setelah pasangan nilai nama jika Anda menginginkannya.
Pengaturan default untuk Perl :: Critic itu sendiri dapat ditetapkan sebelum blok bernama pertama. Misalnya, menempatkan salah satu atau semua ini di bagian atas file konfigurasi Anda akan mengatur nilai default untuk argumen konstruktor yang sesuai.
severity = 3 #Integer or named level
only = 1 #Zero or One
force = 0 #Zero or One
verbose = 4 #Integer or format spec
top = 50 #A positive integer
theme = (pbp || security) && bugs #A theme expression
include = NamingConventions ClassHierarchies #Space-delimited list
exclude = Variables Modules::RequirePackage #Space-delimited list
criticism-fatal = 1 #Zero or One
color = 1 #Zero or One
allow-unsafe = 1 #Zero or One
pager = less #pager to pipe output to
Sisa dari file konfigurasi adalah serangkaian blok seperti ini:
[Perl::Critic::Policy::Category::PolicyName]
severity = 1
set_themes = foo bar
add_themes = baz
maximum_violations_per_document = 57
arg1 = value1
arg2 = value2
Perl::Critic::Policy::Category::PolicyName adalah nama lengkap modul yang mengimplementasikan kebijakan tersebut. Modul kebijakan yang didistribusikan dengan Perl :: Critic telah dikelompokkan ke dalam kategori sesuai dengan Daftar Isi dalam buku Damian Conway Perl Practices Best . Untuk singkatnya, Anda dapat menghilangkan bagian 'Perl::Critic::Policy' dari nama modul.
severity adalah tingkat kepentingan yang ingin Anda tetapkan pada kebijakan tersebut. Semua modul kebijakan didefinisikan dengan nilai keparahan default mulai dari 1 (paling parah) hingga 5 (paling parah). Namun, Anda mungkin tidak setuju dengan keparahan default dan memilih untuk memberikan keparahan yang lebih tinggi atau lebih rendah, berdasarkan filosofi pengkodean Anda sendiri. Anda dapat mengatur severity ke bilangan bulat dari 1 hingga 5, atau menggunakan salah satu nama yang setara:
SEVERITY NAME ...is equivalent to... SEVERITY NUMBER
----------------------------------------------------
gentle 5
stern 4
harsh 3
cruel 2
brutal 1
Nama -nama tersebut mencerminkan betapa beratnya kode tersebut dikritik: kritik gentle hanya melaporkan pelanggaran yang paling parah, dan sebagainya hingga kritik brutal yang bahkan melaporkan bahkan pelanggaran yang paling kecil.
set_themes mengatur tema untuk kebijakan dan menimpa tema defaultnya. Argumennya adalah serangkaian satu atau lebih kata-kata alfanumerik yang dibatasi oleh whitespace. Tema tidak sensitif. Lihat "Tema Kebijakan" untuk informasi lebih lanjut.
add_themes menambahkan tema default untuk kebijakan ini. Argumennya adalah serangkaian satu atau lebih kata-kata yang dibatasi whitespace. Tema tidak peka. Lihat "Tema Kebijakan" untuk informasi lebih lanjut.
maximum_violations_per_document membatasi jumlah pelanggaran yang akan dikembalikan oleh kebijakan untuk dokumen yang diberikan. Beberapa kebijakan memiliki batas default; Lihat dokumentasi untuk kebijakan individu untuk melihat apakah ada satu. Untuk memaksa kebijakan untuk tidak memiliki batas, tentukan "no_limit" atau string kosong untuk nilai parameter ini.
Pasangan nilai kunci yang tersisa adalah parameter konfigurasi yang akan diteruskan ke konstruktor untuk kebijakan itu. Konstruktor untuk sebagian besar objek kebijakan tidak mendukung argumen, dan mereka yang harus memiliki default yang masuk akal. Lihat dokumentasi pada modul kebijakan yang sesuai untuk lebih jelasnya.
Alih-alih mendefinisikan kembali keparahan untuk kebijakan yang diberikan, Anda dapat sepenuhnya menonaktifkan kebijakan dengan mempersiapkan '-' dengan nama modul dalam file konfigurasi Anda. Dengan cara ini, kebijakan tersebut tidak akan pernah dimuat, terlepas dari -severity yang diberikan kepada Perl :: Critic Constructor.
Konfigurasi sederhana mungkin terlihat seperti ini:
#--------------------------------------------------------------
# I think these are really important, so always load them
[TestingAndDebugging::RequireUseStrict]
severity = 5
[TestingAndDebugging::RequireUseWarnings]
severity = 5
#--------------------------------------------------------------
# I think these are less important, so only load when asked
[Variables::ProhibitPackageVars]
severity = 2
[ControlStructures::ProhibitPostfixControls]
allow = if unless # My custom configuration
severity = cruel # Same as "severity = 2"
#--------------------------------------------------------------
# Give these policies a custom theme. I can activate just
# these policies by saying `perlcritic -theme larry`
[Modules::RequireFilenameMatchesPackage]
add_themes = larry
[TestingAndDebugging::RequireTestLabels]
add_themes = larry curly moe
#--------------------------------------------------------------
# I do not agree with these at all, so never load them
[-NamingConventions::Capitalization]
[-ValuesAndExpressions::ProhibitMagicNumbers]
#--------------------------------------------------------------
# For all other Policies, I accept the default severity,
# so no additional configuration is required for them.
Untuk contoh konfigurasi tambahan, lihat file perlcriticrc yang termasuk dalam direktori examples ini dari distribusi ini.
Konfigurasi Perl :: kritik Damian Conway juga termasuk dalam distribusi ini sebagai examples/perlcriticrc-conway .
Sejumlah besar modul kebijakan didistribusikan dengan Perl :: Critic. Mereka dijelaskan secara singkat dalam dokumen pendamping Perl :: Critic :: Policysummary dan secara lebih rinci dalam modul individu itu sendiri. Katakan "perlcritic -doc PATTERN" untuk melihat Perldoc untuk semua modul kebijakan yang cocok dengan regex m/PATTERN/ixms
Ada sejumlah distribusi kebijakan tambahan pada CPAN. Jika Perl :: Critic tidak mengandung kebijakan yang Anda inginkan, seseorang mungkin sudah menulisnya. Lihat bagian "Lihat juga" di bawah ini untuk daftar beberapa distribusi ini.
Setiap kebijakan didefinisikan dengan satu atau lebih "tema". Tema dapat digunakan untuk membuat kelompok kebijakan sewenang -wenang. Mereka dimaksudkan untuk memberikan mekanisme alternatif untuk memilih set kebijakan yang Anda sukai. Misalnya, Anda mungkin ingin menonaktifkan subset kebijakan tertentu saat menganalisis program pengujian. Sebaliknya, Anda mungkin ingin hanya mengaktifkan subset kebijakan tertentu saat menganalisis modul.
Kebijakan yang dikirimkan dengan perl :: kritikus telah dipecah menjadi tema -tema berikut. Ini hanya upaya kami untuk memberikan beberapa pengelompokan logis dasar. Anda bebas menciptakan tema baru yang sesuai dengan kebutuhan Anda.
THEME DESCRIPTION
--------------------------------------------------------------------------
core All policies that ship with Perl::Critic
pbp Policies that come directly from "Perl Best Practices"
bugs Policies that that prevent or reveal bugs
certrec Policies that CERT recommends
certrule Policies that CERT considers rules
maintenance Policies that affect the long-term health of the code
cosmetic Policies that only have a superficial effect
complexity Policies that specifically relate to code complexity
security Policies that relate to security issues
tests Policies that are specific to test programs
Kebijakan apa pun dapat masuk ke dalam beberapa tema. Katakanlah "perlcritic -list" untuk mendapatkan daftar semua kebijakan yang tersedia dan tema yang terkait dengan masing -masing. Anda juga dapat mengubah tema untuk kebijakan apa pun dalam file .perlcriticrc Anda. Lihat bagian "Konfigurasi" untuk informasi lebih lanjut tentang itu.
Menggunakan opsi -theme , Anda dapat membuat aturan kompleks yang sewenang -wenang yang menentukan kebijakan mana yang akan dimuat. Prioritas sama dengan kode Perl biasa, dan Anda dapat menggunakan tanda kurung untuk menegakkan prioritas juga. Operator yang didukung adalah:
Operator Alternative Example
-----------------------------------------------------------------
&& and 'pbp && core'
|| or 'pbp || (bugs && security)'
! not 'pbp && ! (portability || complexity)'
Nama tema tidak sensitif. Jika -theme diatur ke string kosong, maka ia mengevaluasi sebagai benar semua kebijakan.
Perl :: Critic mengambil pendekatan garis keras untuk kode Anda: Entah Anda patuh atau tidak. Di dunia nyata, tidak selalu praktis (atau bahkan mungkin) untuk sepenuhnya mematuhi standar pengkodean. Dalam kasus seperti itu, adalah bijaksana untuk menunjukkan bahwa Anda secara sadar melanggar standar dan bahwa Anda memiliki alasan yang bagus (DGR) untuk melakukannya.
Untuk membantu situasi itu, Anda dapat mengarahkan Perl :: kritikus untuk mengabaikan baris atau blok kode tertentu dengan menggunakan anotasi:
require 'LegacyLibaray1.pl'; ## no critic
require 'LegacyLibrary2.pl'; ## no critic
for my $element (@list) {
## no critic
$foo = ""; #Violates 'ProhibitEmptyQuotes'
$barf = bar() if $foo; #Violates 'ProhibitPostfixControls'
#Some more evil code...
## use critic
#Some good code...
do_something($_);
}
Anotasi "## no critic" Direct Perl :: kritikus untuk mengabaikan baris kode yang tersisa sampai anotasi "## use critic" ditemukan. Jika anotasi "## no critic" berada di baris yang sama dengan pernyataan kode, maka hanya baris kode yang diabaikan. Untuk mengarahkan Perlcritic untuk mengabaikan anotasi "## no critic" , gunakan opsi --force .
Anotasi "## no critic" telanjang menonaktifkan semua kebijakan aktif. Jika Anda hanya ingin menonaktifkan kebijakan tertentu, tambahkan daftar nama kebijakan sebagai argumen, seperti halnya pragma "no strict" atau "no warnings" . Misalnya, ini akan menonaktifkan kebijakan ProhibitEmptyQuotes dan ProhibitPostfixControls sampai akhir blok atau sampai anotasi "## use critic" berikutnya (mana yang lebih dulu):
## no critic (EmptyQuotes, PostfixControls)
# Now exempt from ValuesAndExpressions::ProhibitEmptyQuotes
$foo = "";
# Now exempt ControlStructures::ProhibitPostfixControls
$barf = bar() if $foo;
# Still subjected to ValuesAndExpression::RequireNumberSeparators
$long_int = 10000000000;
Karena nama -nama kebijakan dicocokkan dengan argumen "## no critic" sebagai ekspresi reguler, Anda dapat menyingkat nama kebijakan atau menonaktifkan seluruh keluarga kebijakan dalam satu bidikan seperti ini:
## no critic (NamingConventions)
# Now exempt from NamingConventions::Capitalization
my $camelHumpVar = 'foo';
# Now exempt from NamingConventions::Capitalization
sub camelHumpSub {}
Daftar argumen harus dilampirkan dalam tanda kurung atau kurung dan harus berisi satu atau lebih bareword yang dipisahkan koma (misalnya tidak menggunakan kutipan). Anotasi "## no critic" dapat bersarang, dan kebijakan yang dinamai oleh anotasi batin akan dinonaktifkan bersama dengan mereka yang sudah menonaktifkan anotasi luar.
Beberapa kebijakan seperti Subroutines::ProhibitExcessComplexity berlaku untuk seluruh blok kode. Dalam kasus -kasus tersebut, anotasi "## no critic" harus muncul di telepon di mana pelanggaran dilaporkan. Misalnya:
sub complicated_function { ## no critic (ProhibitExcessComplexity)
# Your code here...
}
Kebijakan seperti Documentation::RequirePodSections berlaku untuk seluruh dokumen, di mana pelanggaran kasus dilaporkan pada baris 1.
Gunakan fitur ini dengan bijak. Anotasi "## no critic" harus digunakan dalam ruang lingkup sekecil mungkin, atau hanya pada baris kode individual. Dan Anda harus selalu spesifik mungkin tentang kebijakan mana yang ingin Anda nonaktifkan (yaitu tidak pernah menggunakan telanjang "## no critic" ). Jika Perl :: Critic mengeluh tentang kode Anda, cobalah dan temukan solusi yang sesuai sebelum menggunakan fitur ini.
Standar pengkodean sangat pribadi dan sangat subyektif. Tujuan Perl :: Critic adalah untuk membantu Anda menulis kode yang sesuai dengan serangkaian praktik terbaik. Tujuan utama kami bukan untuk menentukan apa praktik -praktik itu, melainkan untuk menerapkan praktik -praktik yang ditemukan oleh orang lain. Pada akhirnya, Anda membuat aturan - Perl :: Critic hanyalah alat untuk mendorong konsistensi. Jika ada kebijakan yang menurut Anda penting atau yang telah kami abaikan, kami akan sangat berterima kasih atas kontribusi, atau Anda dapat memuat kebijakan pribadi Anda sendiri ke dalam Perl :: Critic.
Desain modular Perl :: Critic dimaksudkan untuk memfasilitasi penambahan kebijakan baru. Anda harus memiliki pemahaman tentang PPI, tetapi sebagian besar modul kebijakan cukup mudah dan hanya membutuhkan sekitar 20 baris kode. Silakan lihat file Perl :: Critic :: Pengembang yang termasuk dalam distribusi ini untuk demonstrasi langkah demi langkah tentang cara membuat modul kebijakan baru.
Jika Anda mengembangkan modul kebijakan baru, jangan ragu untuk mengirim mereka ke <[email protected]> dan saya akan dengan senang hati mempertimbangkan untuk memasukkannya ke dalam distribusi Perl :: Critic. Atau jika Anda ingin mengerjakan Proyek Perl :: Critic secara langsung, Anda dapat membayar repositori kami di https://github.com/perl-critic/perl-critic.git.
Tim kritik Perl :: juga tersedia untuk disewa. Jika organisasi Anda memiliki standar pengkodean sendiri, kami dapat membuat kebijakan khusus untuk menegakkan pedoman lokal Anda. Atau jika basis kode Anda rentan terhadap pola cacat tertentu, kami dapat merancang kebijakan yang akan membantu Anda menangkap cacat mahal itu sebelum masuk ke produksi. Untuk membahas kebutuhan Anda dengan tim kritikus Perl ::, cukup hubungi <[email protected]> .
Perl :: Critic membutuhkan modul berikut:
B :: Kata kunci
Config :: Tiny
Pengecualian :: Kelas
File :: Spec
File :: spec :: unix
File :: yang mana
Daftar :: Someutils
DAFTAR :: util
Modul :: Pluggable
Perl :: rapi
Pod :: mantra
PPI
Pod :: plaintext
Pod :: pilih
Pod :: penggunaan
Readonly
Scalar :: util
String :: Format
Istilah :: Ansicolor
Teks :: Parsewords
versi
Anda didorong untuk berlangganan milis publik di https://groups.google.com/d/forum/perl-critic. Setidaknya satu anggota tim pengembangan biasanya berkeliaran di irc: //irc.perl.org/#perlcritic dan Anda dapat mengikuti perl :: kritik di twitter, di https://twitter.com/perlcritic.
Ada sejumlah distribusi kebijakan tambahan yang tersedia. Beberapa terdaftar di sini:
Perl :: Critic :: More
Perl :: Critic :: Bangs
Perl :: Critic :: Lax
Perl :: Critic :: Strictersubs
Perl :: Critic :: Swift
Perl :: Critic :: Tics
Distribusi ini memungkinkan Anda menggunakan Perl :: kritikus dalam tes unit Anda:
Tes :: Perl :: Critic
Tes :: Perl :: Critic :: Progressive
Ada juga distribusi yang akan menginstal semua modul terkait Perl :: Critic yang diketahui oleh tim pengembangan:
Tugas :: Perl :: kritikus
Meneliti kode Perl sulit bagi manusia, apalagi mesin. Jika Anda menemukan bug, khususnya palsu-positor atau negatif palsu dari perl :: kritik :: kebijakan, silakan kirimkan di https://github.com/perl-critic/perl-critic/issues. Terima kasih.
Adam Kennedy - Untuk menciptakan PPI, hati dan jiwa Perl :: kritikus.
Damian Conway - Untuk menulis praktik terbaik Perl , akhirnya :)
Chris Dolan - Untuk menyumbangkan fitur terbaik dan modul kebijakan.
Andy Lester-bijak bijak dan penguasa semua-tes.
Elliot Shank - Freak kualitas yang memproklamirkan diri.
Giuseppe Maxia - Untuk semua ide hebat dan dorongan positif.
Dan Sharon, istri saya - karena tahan dengan sesi kode sepanjang malam.
Terima kasih juga kepada Perl Foundation karena telah memberikan hibah untuk mendukung proyek Chris Dolan untuk menerapkan dua puluh kebijakan PBP. http://www.perlfoundation.org/april_1_2007_new_grant_awards
Thanks also to this incomplete laundry list of folks who have contributed to Perl::Critic in some way: Gregory Oschwald, Mike O'Regan, Tom Hukins, Omer Gazit, Evan Zacks, Paul Howarth, Sawyer X, Christian Walde, Dave Rolsky, Jakub Wilk, Roy Ivy III, Oliver Trosien, Glenn Fowler, Matt Creenan, Alex Balhatchet, Sebastian Paaske Tørholm, Stuart A Johnston, Dan Book, Steven Humphrey, James Raspass, Nick Tonkin, Harrison Katz, Douglas Sims, Mark Fowler, Alan Berndt, Neil Bowers, Sergey Romanov, Gabor Szabo, Graham Knop, Mike Eldridge, David Steinbrunner, Kirk Kimmel, Guillaume Aubert, Dave Cross, Anirvan Chatterjee, Todd Rinaldo, Graham Ollis, Karen Etheridge, Jonas Brømsø, Olaf Alders, Jim Keenan, Slaven Rezić, Szymon Nieznański.
Jeffrey Ryan Thalhammer [email protected]
Hak Cipta (C) 2005-2018 Sistem Perangkat Lunak Imaginatif. Semua hak dilindungi undang -undang.
Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikannya kembali dan/atau memodifikasinya dengan persyaratan yang sama dengan Perl itu sendiri. Teks lengkap lisensi ini dapat ditemukan di file lisensi yang disertakan dengan modul ini.