2015-09-15 18 views
12

Ich habe jetzt mehr als 2 Stunden damit verbracht, herauszufinden, wie man die { in der gleichen Zeile wie die Methodendeklaration statt der Standardanforderung als nächste Zeile benötigt. Wie kann ich das schaffen? Ich habe den PSR2-Standard in einen neuen Ordner namens PSR2 kopiert, um ihn nach meinen Wünschen zu modifizieren. Die Basis, an der ich arbeite, ist im Grunde genommen der PSR2-Standard, den ich gerne modifizieren würde.phpcs: Wie kann ich PSR2 ändern, um zu überprüfen, ob die Klammer in der gleichen Zeile wie die Methode ist?

Ich habe versucht, die Regelsatz.xml und ich habe versucht, es im Code direkt ohne Erfolg zu ändern.

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

Ich habe bereits herausgefunden, dass diese falsch ist. Die EOL wird von phpcs eingestellt. Aber ich kann nicht herausfinden, ob es überhaupt einen Wert gibt, den ich über eine Regel konfigurieren kann.

Dies funktioniert gut für mich so weit (die dummen Räume Schraube !!!):

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

Aber ich mag die Regel oben hinzuzufügen.

+0

Dies wurde auch hier gefragt: https://github.com/squizlabs/PHP_CodeSniffer/issues/703 –

Antwort

9

Setzen Sie diesen Code in Ihre ruleset.xml Datei:

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

dass die PSR2 Standard gehören, aber die spezifische Nachricht über die Klammer ausschließen, um auf der gleichen Linie zu sein. Dann enthält es den generischen Sniff, der die Methode und die Funktionsträger zwingt, in der folgenden Zeile zu stehen.

Mit dieser Änderung dieser Code:

<?php 
namespace Test; 

class Foo 
{ 
    public function bar() { 
    } 
} 

keine Fehler produzieren, aber ein Fehler PSR2 läuft erzeugt es direkt über:

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

Vielen Dank! Ich konnte nicht herausfinden, welche Regel ich ausschließen musste! Wie archiviere ich dasselbe für die Klassendeklaration? Kennen Sie die Regeln, die sich auch dafür ändern? Es ist traurig, dass es keine richtige Dokumentation für alle Regeln gibt - oder ich habe sie nicht gefunden. – burzum

+0

Es gibt tatsächlich kein enthaltenes Sniff, um eine Klassenklammer in derselben Zeile zu erzwingen, und niemand hat jemals auch eine angefordert. Daher müssten Sie einen benutzerdefinierten Sniffer schreiben oder eine Feature-Anforderung senden, um etwas zum Kern hinzuzufügen. Und ja, ich weiß, es gibt einen Mangel an Dokumenten dazu und hoffentlich kann ich das eines Tages ändern.Ich bin nur ein Team von einer Person, und ich habe einen Vollzeitjob und eine Familie, also war meine Zeit immer ziemlich begrenzt. Zum Glück haben viele gute Leute Code zum Projekt eingereicht. Nur nicht viele Dokumente :) –

+0

Die alte Version des CakePHP-Frameworks muss einen Sniff dafür haben, ich werde sehen, ob ich es identifizieren kann und werde einen PR zu phpcs machen, wenn ich es geschafft habe. Ich habe nicht realisiert, dass Sie der Hauptentwickler dieses Projekts sind. Danke für dieses tolle Tool! Irgendwie kann ich ein paar Dollar spenden? :) – burzum

1

Neben der Antwort von Greg, wenn Sie verwenden PHPSstorm, gehen Sie zu Settings -> Editor -> Inspections -> PHP -> Code Sniffer und Sie werden eine Option Show sniff name sehen.

enter image description here

Dies gibt Ihnen den Namen des betreffenden Regel (erste, in Settings -> Languages and frameworks -> PHP -> Code sniffer den PHP-Code Sniffer ausführbaren Pfad konfigurieren). Bewegen Sie den Mauszeiger dann vorsichtig auf den Warnungs-Tooltip in Ihrer Quellcodedatei, wählen Sie den Text aus, und drücken Sie , um ihn zu kopieren, ohne die Taste loszulassen.

Dann fügen Sie es in den Regeln:

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

Ich habe hier PSR2.Classes.ClassDeclaration.OpenBraceNewLine zu den ausgeschlossenen Regeln hinzugefügt.