PHP CodeSniffer'da bazı kodlama standart hataları nasıl yoksayılır


14

Bir PHP 5 web uygulamamız var ve şu anda PHP CodeSniffer'ı , kod standartlarının zorlanmasının çok fazla baş ağrısına neden olmadan kod kalitesini artırıp iyileştirmediğine karar vermek için değerlendiriyoruz . İyi görünüyorsa, dev dalında işlenen tüm yeni dosyaların standart kokuları kodlamamasını sağlamak için bir SVN ön taahhüt kancası ekleyeceğiz.

PHP codeSniffer'ı belirli bir hata türünü göz ardı edecek şekilde yapılandırmanın bir yolu var mı? veya belirli bir hatayı bunun yerine bir uyarı olarak ele almasını mı 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 çıktısıdır:

> phpcs test.php 

-------------------------------------------------- ------------------------------
KURUCU 2 HAT (lar) VE 3 UYARI (3) ETKİLEYEN 1 UYARI
-------------------------------------------------- ------------------------------
  1 | UYARI | Satır 85 karakteri aşıyor; 121 karakter içeriyor
  9 | HATA | Doküman yorumu eksik
 11 | HATA | Satır yanlış girintili; 0 boşluk bekleniyor, 4 bulundu
-------------------------------------------------- ------------------------------

" Satır yanlış girintili " hatası ile ilgili bir sorun var . Ben PHP girintisi HTML girintisi ile karıştırıyorum çünkü olur sanırım. Ama bu onu daha okunaklı kılıyor değil mi? ( şu anda bir MVC çerçevesine geçmek için kaynaklara sahip olmadığımı dikkate alarak ). Bu yüzden lütfen görmezden gelmek istiyorum.


1
Bu biraz IMO burada bir programlama sorusu çok fazladır ... çünkü webmasterlar değil, çoğunlukla sert çekirdekli programcılar için ilgi çekici bir "LINT" benzeri bir yardımcı program hakkında. Ama güzel sorulur ve biçimlendirilir, bu yüzden şimdilik bırakabiliriz.
Jeff Atwood

2
Satır 1 uyarısı hakkında: HTML5 DOCTYPE kullanılmasını önerebilir miyim?
luiscubal

Geri bildiriminiz için teşekkürler Jeff - Taşımaktan mutluluk duyuyorum. Ben soruyu :-) yarattığımda ben muhtemelen hiçbir PHP etiketi yoktu fark etmişti.
Tom

@luiscubal - o, iyi bir öneri; senin düşünmen gibi ;-)
Tom

Yanıtlar:


11

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

phpcsVarsayılan kodlama standartlarını ( PEAR standartları olan) kullandığımızı varsayarak en hızlı ve en kirli düzeltme ilgili Sniff dosyasını kaldırmaktır. Ubuntu kullanarak PEAR standartlarının yerini bulun, benim için buradaydı:

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

ScopeIndentSniff.phpKod girintisini kontrol eden sniff artık yürütülmeyecek şekilde dosyayı yeniden adlandırın :

> sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

İş bitti - şimdi girinti kontrol edilmeyecek ve " Satır yanlış girintili " hatası oluşmayacak ( ve kodunuz standart olmayacak ve bu kadar yüksek kalitede olmayacak! ).


Yukarıdaki çözüm oldukça amatördür - daha temiz çözüm, kirazla seçilmiş özelleştirmeleriniz dışında tüm PEAR standartlarını kullanan yeni bir kodlama standardı oluşturmaktır. Bunu yapmak çok hızlı. İşte kullanarak bunu nasıl olduğunu getIncludedSniffs()ve getExcludedSniffs()bazı phpcsadlandırma kurallarını:

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

Bayrağını phpcskullanarak yeni özelleştirilmiş kodlama standardınızı test edin --standard. Örneğin:

> phpcs --standard=PEARish Test.php

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

> sudo phpcs --config-set default_standard PEARish

Daha fazla bilgi için phpcs kılavuzuna bakın .


Bu gerçekten kullanışlı - deve büyük fonksiyonu işlev adlandırma hataları ile birlikte "Sınıf en az bir düzeyde bir ad alanında olmalıdır" satırlarında ortaya çıkan hataları kaldırmak için bu cevabı kullandım. PSR2'yi olabildiğince çok kullanıyorum, ancak bir Magento sitesini düzenlerken, her işlevi yeniden adlandıracak ve ad boşluklarını sıralayacak bir konumda değilim.
Dave Child

7

HTML ile karıştırılmış PHP kodunuzla PHPCS çalıştıran birçok sorunla karşılaşacaksınız. PHPCS yalnızca saf PHP betiklerini ayrıştırdığınızda gerçekten yararlıdır. Yerleşik kodlama standartları, karışık PHP / HTML değil, saf PHP etrafında oluşturulmuştur.

Seçeneklerden biri kendi özel standardınızı oluşturmak ve bunun yerine bunu kullanmak olabilir. Özel standart, kodun karıştırılmasını dikkate alacaktır, ancak muhtemelen yazmak için bir acı olacaktır.

Diğer seçenek, bir çerçeveye gitmek istemediğinizi söylediğiniz için bir şablonlama sistemi kullanmaktır. Smarty ve Twig her ikisi de bir MVC çerçevesinin dışında kullanılabilir. Bunlardan birine gidin ve sonra PHPCS şablon dosyalarını değil sadece .PHP dosyalarını ayrıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.