it-swarm.it

Come ignorare determinati errori standard di codifica in PHP CodeSniffer

Abbiamo un'applicazione web PHP 5 e stiamo attualmente valutando PHP CodeSniffer al fine di decidere se forzare gli standard del codice migliora la qualità del codice senza causare troppi mal di testa. Se sembra buono, aggiungeremo un hook di pre-commit SVN per garantire che tutti i nuovi file impegnati nel ramo dev siano privi di odori standard di codifica.

C'è un modo per configurare PHP codeSniffer per ignorare un particolare tipo di errore? o farti trattare un certo errore come un avvertimento?

Ecco un esempio per dimostrare il problema:

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

E questo è l'output di PHP_CodeSniffer:

> phpcs test.php 
 
 ------------------------------ -------------------------------------------------- 
 TROVATO 2 ERRORE (I) E 1 AVVERTENZA (E) CHE interessano 3 LINE (S) 
 ---------------------- -------------------------------------------------- -------- 
 1 | ATTENZIONE | La riga supera 85 caratteri; contiene 121 caratteri 
 9 | ERRORE | Commento doc file mancante 
 11 | ERRORE | La riga rientra in modo errato; 0 spazi previsti, trovati 4 
 --------------------------------------- ----------------------------------------- 

Ho un problema con l'errore " Riga indentata erroneamente ". Immagino che accada perché sto mescolando il rientro PHP con il rientro HTML. Ma questo lo rende più leggibile, no? ( tenendo conto del fatto che al momento non ho le risorse per passare a un framework MVC ). Quindi mi piacerebbe ignorarlo per favore.

13
Tom

Ho trovato una soluzione per la rimozione dell'errore " Linea indentata erroneamente " ma prima dovrei dire che dragonmantank ha un punto eccellente - tu non dovrebbe mescolare PHP e HTML. È una ricetta per il mal di testa. Tuttavia, sfortunatamente penso che mescolare PHP e HTML sia molto comune soprattutto nei software legacy.

La soluzione più rapida e più sporca supponendo che stiamo usando gli standard di codifica phpcs predefiniti (che sono gli standard PEAR ) è rimuovere il file Sniff pertinente. Trova la posizione degli standard PEAR, per me, usando bunt , era qui:

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

Rinominare il file ScopeIndentSniff.php in modo che l'annusatore che controlla il rientro del codice non venga più eseguito:

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

Lavoro svolto - ora il rientro non verrà controllato e l'errore " rientro errato della riga " ha vinto non si verifica ( e il tuo codice non sarà standard e non sarà di così alta qualità! ).


La soluzione di cui sopra è piuttosto amatoriale - la soluzione più pulita è quella di creare un nuovo standard di codifica che utilizza tutti gli standard PEAR ad eccezione delle personalizzazioni selezionate dalla ciliegia. Questo è molto veloce da fare. Ecco come farlo usando getIncludedSniffs() e getExcludedSniffs() e alcune convenzioni di denominazione 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');
    }
}
?>

Metti alla prova il tuo nuovo standard di codifica personalizzato invocando phpcs utilizzando il flag --standard. Per esempio:

> phpcs --standard=PEARish Test.php

Una volta che funziona, puoi impostare il tuo nuovo standard come predefinito, il che significa che non è necessario digitare il flag --standard ogni volta che usi phpcs:

> Sudo phpcs --config-set default_standard PEARish

Vedi manuale di phpcs per maggiori informazioni.

11
Tom

Incontrerai molti problemi nell'esecuzione di PHPCS con il tuo codice PHP mescolato con HTML. PHPCS è davvero utile solo quando si analizzano script PHP puri. Gli standard di codifica integrati si basano su PHP puro, non su PHP/HTML misti.

Un'opzione sarebbe quella di costruire il tuo standard personalizzato e usarlo invece. Lo standard personalizzato prenderebbe in considerazione la miscelazione del codice, ma probabilmente sarebbe una seccatura scrivere.

L'altra opzione è quella di utilizzare un sistema di template poiché hai detto di non voler passare a un framework. Smarty e Twig possono entrambi essere utilizzati al di fuori di un framework MVC. Passa a uno di questi e fai in modo che PHPCS analizzi solo i file .PHP, non i file modello.

7
dragonmantank