Come configurare PHP CodicesNiffer per consentire al mio caso le istruzioni del caso di rientranza nel modo in cui mi piace?
-
11-12-2019 - |
Domanda
Ho il codice che assomiglia a questo:
function processRequest() {
// get the verb
$method = strtolower($_SERVER['REQUEST_METHOD']);
switch ($method) {
case 'get':
handleGet();
break;
case 'post':
handlePost();
// $data = $_POST;
break;
case 'delete':
handleDelete();
break;
case 'options':
header('Allow: GET, POST, DELETE, OPTIONS');
break;
default:
header('HTTP/1.1 405 Method Not Allowed');
break;
}
}
.
PHP CodicesNiffer si lamenta sugli trattenimenti di tali distintivi.In Emacs con Flymake sembra questo:
Il messaggio è:
.Errore - linea rientrata in modo errato;Previsto 2 spazi, trovati 4 (pera.whitespace.scopeindent.incorrect)
Ovviamente CodeSniffer vuole che le dichiarazioni del caso siano meno rientrate di quanto non siano.
Come posso dire a CodesNiffer di consentire al mio caso le dichiarazioni di casi di essere rientrate nel modo in cui li voglio.O meglio, a enforce che le mie dichiarazioni del caso sono rientrate in questo modo?
Soluzione
Lo sniff noto come PEAR.Whitespace.ScopeIndent
è definito nel file di codice phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php
e include il seguente codice:
class PEAR_Sniffs_WhiteSpace_ScopeIndentSniff extends Generic_Sniffs_WhiteSpace_ScopeIndentSniff
{
/**
* Any scope openers that should not cause an indent.
*
* @var array(int)
*/
protected $nonIndentingScopes = array(T_SWITCH);
}//end class
.
Vedi il $nonIndentingScopes
? Apparentemente significa che qualsiasi cosa nell'ambito di un'istruzione Switch è prevista per non essere rientrata rispetto all'apertura dell'ambito riccio.
Non riesco a trovare un modo per modificare questa impostazione in PEAR.Whitespace.ScopeIndent
, ma .... che sniff estende il Generic.Whitespace.ScopeIndent
più basico, che non include T_SWITCH
nell'array $nonIndentingScopes
.
Allora cosa ho fatto per consentire alle mie istituzioni del caso il modo in cui volevo modificare il mio file Toolet.xml, per escludere la versione di pera di tale sniff e includere la versione generica di quella sniff. Sembra questo:
.
<?xml version="1.0"?>
<ruleset name="Custom Standard">
<!-- http://pear.php.net/manual/en/package.php.php-codesniffer.annotated-ruleset.php -->
<description>My custom coding standard</description>
<rule ref="PEAR">
......
<exclude name="PEAR.WhiteSpace.ScopeIndent"/>
</rule>
....
<!-- not PEAR -->
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="2"/>
</properties>
</rule>
</ruleset>
Questo file deve essere presente in una Subdir nell'ambito della directory degli standard per PHP CodeSniffer. Per me, la posizione del file è \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml
Allora eseguo PHPC come questo:
\php\php.exe \dev\phpcs\scripts\phpcs --standard=MyStandard --report=emacs -s file.php