web-gelistirme-sc.com

Bazı kodlama standart hataları PHP CodeSniffer'da yoksayılır

Kod standartlarını zorlamanın baş ağrısına neden olmadan kod kalitesini iyileştirip iyileştirmeyeceğine karar vermek için PHP 5 web uygulamasına sahibiz ve şu anda değerlendiriyoruz PHP CodeSniffer . İyi görünüyorsa, dev dairesindeki tüm yeni dosyaların standart kokuları kodlamadığından emin olmak için bir ön işleme kancası ekleyeceğiz.

Belirli bir hata türünü yoksaymak için PHP codeSniffer'i yapılandırmanın bir yolu var mı? veya belirli bir hatayı bunun yerine bir uyarı olarak değerlendirmek mi istiyorsunuz?

İşte sorunu göstermek için bir örnek:

<!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>

Ve bu PHP_CodeSniffer'in çıktısıdır:

> phpcs test.php 
 
 ---------------------------------- -------------------------------------------------- 
 BAZI 2 HATASI (S) VE 1 3 HATTI (S) ETKİSİNDEN ETKİN UYARI (lar) -------------------------------------------------- -------- 
 1 | UYARI | Satır 85 karakteri aşıyor; 121 karakter içeriyor 
 9 | HATA | Eksik dosya doc yorumu 
 11 | HATA | Satır yanlış girintili; beklenen 0 boşluk, 4 bulundu 
 ----------------------------------------- ----------------------------------------- 

" Satır yanlış girildi " hatasıyla ilgili bir sorunum var. Sanırım, çünkü PHP girintisini HTML girintisi ile karıştırıyorum. Ama bu daha okunabilir kılıyor, değil mi? ( şu anda bir MVC çerçevesine taşınmak için gereken kaynaklara sahip olmadığımı dikkate alarak ). Bu yüzden lütfen görmezden gelmek istiyorum.

13
Tom

" Satırı yanlış girintili " hatayı kaldırmak için bir çözüm buldum ama önce şunu söylemeliyim: dragonmantank mükemmel bir noktaya sahip - PHP ve HTML'yi karıştırmamalı. Baş ağrısı için bir reçetedir. Ancak, ne yazık ki, PHP ve HTML’yi karıştırmanın özellikle eski yazılımlarda çok yaygın olduğunu düşünüyorum.

phpcs varsayılan kodlama standartlarını (varsa PEAR standartları) kullandığımızı varsayarsak, ilgili Sniff dosyasını kaldırmaktır. bunt kullanarak benim için PEAR standartlarının yerini bulun, buradaydı:

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

ScopeIndentSniff.php dosyasını yeniden adlandırın, böylece kod girintisini kontrol eden koku artık çalıştırılmayacak:

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

İş yapıldı - şimdi girinti kontrol edilmeyecek ve " Satır yanlış girintili " hatası kazandı oluşmaz ( ve kodunuz standart olmayacak ve bu kadar kaliteli olmayacak! ).


Yukarıdaki çözüm oldukça amatörce - daha temiz bir çözüm, kiraz seçimleriniz dışında tüm PEARstandartlarını kullanan yeni bir kodlama standardı oluşturmak. Bunu yapmak çok hızlı. getIncludedSniffs() ve getExcludedSniffs() ve bazı phpcs adlandırma kurallarını kullanarak bunu nasıl yapacağınız:

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');
    }
}
?>

Yeni özelleştirilmiş kodlama standardınızı, --standard bayrağını kullanarak phpcs öğesini çağırarak test edin. Örneğin:

> phpcs --standard=PEARish Test.php

Çalıştıktan sonra, yeni standartınızı varsayılan olarak ayarlayabilirsiniz; bu, phpcs: 'ı her kullandığınızda --standard bayrağını yazmanız gerekmediği anlamına gelir:

> Sudo phpcs --config-set default_standard PEARish

Daha fazla bilgi için phpcs manual bölümüne bakın.

11
Tom

HTML ile karıştırılmış PHP kodunuzla PHPCS çalıştırmak için birçok sorunla karşılaşacaksınız. PHPCS, yalnızca saf PHP komut dosyalarını ayrıştırdığınızda gerçekten yararlıdır. Yerleşik kodlama standartları, karışık PHP/HTML değil, saf PHP etrafında kuruludur.

Bir seçenek kendi özel standartlarınızı oluşturmak ve bunun yerine kullanmak olacaktır. Özel standart, kodun karıştırılmasını hesaba katar, ancak muhtemelen yazması acı verici olacaktır.

Diğer seçenek, bir çerçeveye geçmek istemediğinizi söylediğinizden bir şablonlama sistemi kullanmaktır. Smarty ve Twig her ikisi de bir MVC çerçevesi dışında kullanılabilir. Bunlardan birine taşıyın ve sonra PHPCS'nin şablon dosyalarını değil sadece .PHP dosyalarını ayrıştırmasını sağlayın.

7
dragonmantank