Come ignorare alcuni errori standard di codifica in PHP CodeSniffer


14

Abbiamo un'applicazione Web PHP 5 e stiamo attualmente valutando PHP CodeSniffer per decidere se forzare gli standard del codice migliora la qualità del codice senza causare troppo 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 fargli 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 LINEA (E)
-------------------------------------------------- ------------------------------
  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.


1
questo è un po 'troppo una domanda di programmazione dell'IMO per essere qui .. dal momento che si tratta di un'utilità simile a "LINT" che potrebbe interessare principalmente i programmatori hard-core, non necessariamente i webmaster. Ma è ben richiesto e formattato, quindi possiamo lasciarlo per ora.
Jeff Atwood,

2
Informazioni sull'avviso di linea 1: posso suggerire di utilizzare HTML5 DOCTYPE?
luiscubal,

Grazie per il tuo feedback Jeff - Sono felice di spostarlo. Probabilmente avrei dovuto rendermi conto quando non c'era il tag PHP quando ho creato la domanda :-).
Tom,

@luiscubal - lui, buon suggerimento; come pensi ;-)
Tom,

Risposte:


11

Ho trovato una soluzione per rimuovere l' errore " Linea indentata in modo errato ", ma prima dovrei dire che dragonmantank ha un punto eccellente: non dovresti 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 phpcsstandard di codifica predefiniti (che sono gli standard PEAR ) è rimuovere il file Sniff pertinente. Trova la posizione degli standard PEAR, per me, usando Ubuntu , era qui:

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

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

> sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

Lavoro eseguito : ora il rientro non verrà controllato e non si verificherà l'errore " Rientro di riga errato " ( e il 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 utilizzando getIncludedSniffs()e getExcludedSniffs()e alcune phpcsconvenzioni di denominazione:

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 phpcsusando il --standardflag. Per esempio:

> phpcs --standard=PEARish Test.php

Una volta che funziona, è possibile impostare il nuovo standard come predefinito, il che significa che non è necessario digitare il --standardflag ogni volta che si utilizza phpcs:

> sudo phpcs --config-set default_standard PEARish

Vedi il manuale di phpcs per maggiori informazioni.


Questo è stato davvero utile - ho usato questa risposta per rimuovere gli errori che emergono sulla falsariga di "La classe deve trovarsi in uno spazio dei nomi di almeno un livello" insieme agli errori di denominazione della funzione del caso del cammello. Sto usando PSR2 il più possibile, ma modificando un sito Magento, non sono in grado di passare e rinominare ogni funzione e riordinare lo spazio dei nomi.
Dave Child,

7

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 che non vuoi passare a un framework. Smarty e Twig possono essere entrambi 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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.