it-swarm-id.com

Bagaimana mengabaikan kesalahan standar pengkodean tertentu dalam PHP CodeSniffer

Kami memiliki aplikasi web PHP 5 dan kami sedang mengevaluasi PHP CodeSniffer untuk memutuskan apakah memaksa standar kode meningkatkan kualitas kode tanpa menyebabkan terlalu banyak sakit kepala. Jika tampaknya baik, kami akan menambahkan kait pra-komit SVN untuk memastikan semua file baru yang dilakukan pada cabang dev bebas dari pengkodean bau standar.

Apakah ada cara untuk mengkonfigurasi PHP codeSniffer untuk mengabaikan jenis kesalahan tertentu? atau malah memperlakukan kesalahan tertentu sebagai peringatan?

Berikut ini contoh untuk menunjukkan masalah:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <?php
    echo getTabContent('Programming', 1, $numX, $numY);

    if (isset($msg)) {
        echo $msg;
    }
    ?>
</div>
</body>
</html>

Dan ini adalah output dari PHP_CodeSniffer:

> phpcs test.php 
 
 ------------------------------ -------------------------------------------------- 
 DITEMUKAN 2 KESALAHAN (S) DAN 1 PERINGATAN (S) MEMPENGARUHI 3 LINE (S) 
 ---------------------- -------------------------------------------------- -------- 
 1 | PERINGATAN | Baris melebihi 85 karakter; mengandung 121 karakter 
 9 | GALAT | File doc komentar yang hilang 
 11 | GALAT | Jalur indentasi salah; diharapkan 0 spasi, ditemukan 4 
 --------------------------------------- ----------------------------------------- 

Saya memiliki masalah dengan kesalahan " yang indentasi salah ". Saya kira itu terjadi karena saya mencampur indentasi PHP dengan indentasi HTML. Tapi ini membuatnya lebih mudah dibaca bukan? ( dengan mempertimbangkan bahwa saya tidak memiliki sumber daya untuk pindah ke kerangka kerja MVC sekarang ). Jadi saya ingin mengabaikannya.

13
Tom

Saya menemukan solusi untuk menghapus kesalahan " Baris indentasi salah " tetapi pertama-tama saya harus mengatakan bahwa dragonmantank memiliki poin yang sangat bagus - Anda seharusnya tidak mencampur PHP dan HTML. Ini adalah resep untuk sakit kepala. Namun, sayangnya saya pikir mencampur PHP dan HTML sangat umum terutama dalam perangkat lunak lama.

Perbaikan tercepat dan paling kotor dengan asumsi kita menggunakan standar pengodean phpcs (yang merupakan PEAR standar) adalah menghapus file Sniff yang relevan. Temukan lokasi standar PEAR, bagi saya, menggunakan bunt , ada di sini:

> cd /usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/WhiteSpace

Ganti nama file ScopeIndentSniff.php sehingga mengendus yang memeriksa lekukan kode tidak akan lagi dijalankan:

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

Pekerjaan selesai - sekarang indentasi tidak akan diperiksa dan kesalahan " Baris indentasi salah " dimenangkan tidak terjadi ( dan kode Anda tidak akan standar dan tidak akan berkualitas tinggi! ).


Solusi di atas cukup amatir - solusi bersih adalah membuat standar pengkodean baru yang menggunakan semua standar PEAR kecuali untuk penyesuaian yang Anda pilih. Ini sangat cepat dilakukan. Berikut adalah cara melakukannya menggunakan getIncludedSniffs() dan getExcludedSniffs() dan beberapa konvensi penamaan phpcs:

Go to the directory where the phpcs coding standards are defined:
> cd /usr/share/php/PHP/CodeSniffer/Standards

Create a new directory for your new standard:
> Sudo mkdir PEARish
> cd PEARish

Create your new standard by saving the following in the file:
> Sudo emacs PEARishCodingStandard.php
<?php
class PHP_CodeSniffer_Standards_PEARish_PEARishCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
    public function getIncludedSniffs()
    {
      return array('PEAR');
    }

    public function getExcludedSniffs()
    {
      return array('PEAR/Sniffs/WhiteSpace/ScopeIndentSniff.php');
    }
}
?>

Uji standar pengodean baru Anda yang disesuaikan dengan menggunakan phpcs menggunakan flag --standard. Sebagai contoh:

> phpcs --standard=PEARish Test.php

Setelah berfungsi, Anda dapat menetapkan standar baru sebagai standar yang artinya Anda tidak perlu mengetikkan --standard tanda setiap kali Anda menggunakan phpcs:

> Sudo phpcs --config-set default_standard PEARish

Lihat manual phpcs untuk informasi lebih lanjut.

11
Tom

Anda akan mengalami banyak masalah dalam menjalankan PHPCS dengan kode PHP Anda bercampur dengan HTML. PHPCS hanya benar-benar berguna ketika Anda menguraikan skrip PHP murni. Standar pengkodean bawaan dibangun di sekitar PHP murni, bukan PHP/HTML campuran.

Salah satu opsi adalah membangun standar kustom Anda sendiri dan menggunakannya. Standar khusus akan mempertimbangkan pencampuran kode, tetapi mungkin akan sulit untuk menulis.

Opsi lainnya adalah menggunakan sistem templating karena Anda mengatakan Anda tidak ingin pindah ke suatu kerangka kerja. Smarty dan Twig keduanya dapat digunakan di luar kerangka kerja MVC. Pindah ke salah satu dari itu dan kemudian PHPCS hanya mengurai file .PHP, bukan file template.

7
dragonmantank