2015-09-15 12 views
12

Ho impiegato più di 2 ore per cercare di capire come richiedere lo { nella stessa riga della dichiarazione del metodo anziché il requisito predefinito nella riga successiva. Come posso farcela? Ho copiato lo standard PSR2 in una nuova cartella denominata PSR2 in modo da poterlo modificare a mio piacimento. Quindi la base su cui sto lavorando è fondamentalmente lo standard PSR2 che vorrei modificare.phpcs: Come posso modificare PSR2 per verificare che la controventatura sia sulla stessa linea del metodo?

Ho provato il file ruleset.xml e ho provato a modificarlo nel codice direttamente senza successo.

<rule ref="PEAR.Classes.ClassDeclaration"> 
    <properties> 
     <property name="eolChar" value="{"/> 
    </properties> 
</rule> 
<rule ref="PSR2R.Classes.ClassDeclaration"> 
    <properties> 
     <property name="eolChar" value="{"/> 
    </properties> 
</rule> 

ho già capito che questo è sbagliato . L'EOL è impostato da phpcs. Ma non riesco a capire se c'è un valore che posso configurare tramite una regola.

Questo funziona bene per me finora (avvitare gli spazi sciocche !!!):

<?xml version="1.0"?> 
<ruleset name="PSR2R"> 
    <description>PSR2 with tabs instead of spaces.</description> 
    <arg name="tab-width" value="4"/> 
    <rule ref="PSR2"> 
     <exclude name="Generic.WhiteSpace.DisallowTabIndent"/> 
    </rule> 
    <rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/> 
    <rule ref="Generic.WhiteSpace.ScopeIndent"> 
     <properties> 
      <property name="indent" value="4"/> 
      <property name="tabIndent" value="true"/> 
     </properties> 
    </rule> 
</ruleset> 

Ma vorrei aggiungere la regola di cui sopra.

+0

Questo è stato anche chiesto qui: https://github.com/squizlabs/PHP_CodeSniffer/issues/703 –

risposta

9

inserire questo codice nel file ruleset.xml:

<rule ref="PSR2"> 
    <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine" /> 
</rule> 
<rule ref="Generic.Functions.OpeningFunctionBraceKernighanRitchie" /> 

che includerà lo standard PSR2, ma esclude il messaggio specifico sulla brace bisogno di essere sulla stessa linea. Quindi include lo sniff generico che forza il metodo e le parentesi di funzione a essere sulla riga seguente.

Con questo cambiamento, questo codice:

<?php 
namespace Test; 

class Foo 
{ 
    public function bar() { 
    } 
} 

produrrà nessun errore, ma in esecuzione PSR2 direttamente su di esso produce un errore:

FILE: temp.php 
---------------------------------------------------------------------- 
FOUND 1 ERROR AFFECTING 1 LINE 
---------------------------------------------------------------------- 
6 | ERROR | [x] Opening brace should be on a new line 
---------------------------------------------------------------------- 
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY 
---------------------------------------------------------------------- 
+0

Grazie! Non riuscivo a capire quale regola dovevo escludere! Come posso archiviare lo stesso per la dichiarazione di classe? Conoscete le regole che devono essere cambiate anche per questo? È triste che non ci sia una documentazione adeguata per tutte le regole - o non le ho trovate. – burzum

+0

In realtà non esiste nessun annusamento incluso per imporre un tutore di classe sulla stessa linea, e nessuno ne ha mai richiesto uno neanche. Quindi, per questo, è necessario scrivere un'annotazione personalizzata o inviare una richiesta di funzionalità per aggiungere qualcosa al core. E sì, so che c'è una mancanza di documenti su questo e spero di poterlo cambiare un giorno.Sono solo una squadra di una persona, e ho un lavoro a tempo pieno e una famiglia, quindi il mio tempo è sempre stato piuttosto limitato. Per fortuna molte brave persone hanno inviato il codice al progetto. Solo pochi documenti :) –

+0

La vecchia versione del framework CakePHP deve avere un annusamento per quello, vedrò se riesco a identificarlo e farò un PR a php se riuscirò a farlo. Non ho capito che sei lo sviluppatore principale di questo progetto. Grazie per questo fantastico strumento! In ogni modo posso donare qualche soldo? :) – burzum

1

Oltre alla risposta di Greg, se si stanno usando PHPStorm, vai a Settings -> Editor -> Inspections -> PHP -> Code Sniffer e vedrai un'opzione Show sniff name.

enter image description here

Questo vi darà il nome della regola incriminato (prima, configurare il percorso dell'eseguibile PHP Codice Sniffer in Settings -> Languages and frameworks -> PHP -> Code sniffer). Quindi sul suggerimento di avviso nel file del codice sorgente, spostare con cautela il cursore, selezionare il testo e senza rilasciare il pulsante, premere Control C per copiarlo.

Poi si incolla nelle regole:

<?xml version="1.0"?> 
<ruleset name="PSR2R"> 
    <rule ref="PSR2"> 
     <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine" /> 
     <exclude name="PSR2.Classes.ClassDeclaration.OpenBraceNewLine" /> 
    </rule> 
    <rule ref="Generic.Functions.OpeningFunctionBraceKernighanRitchie" /> 
</ruleset> 

ho aggiunto qui PSR2.Classes.ClassDeclaration.OpenBraceNewLine alle regole esclusi.

Problemi correlati