2015-09-15 17 views
12

Tôi đã dành hơn 2 giờ để cố gắng tìm ra cách yêu cầu số { trong cùng một dòng với khai báo phương thức thay vì yêu cầu mặc định là dòng kế tiếp. Làm thế nào tôi có thể làm được điều này? Tôi đã sao chép các tiêu chuẩn PSR2 vào một thư mục mới có tên PSR2 được ably để sửa đổi nó theo ý thích của tôi. Vì vậy, cơ sở tôi đang làm việc trên cơ bản là tiêu chuẩn PSR2 mà tôi muốn sửa đổi.phpcs: Làm thế nào tôi có thể sửa đổi PSR2 để kiểm tra xem dấu ngoặc nằm trên cùng một dòng với phương thức?

Tôi đã thử ruleset.xml và tôi đã cố sửa đổi nó trong mã trực tiếp mà không thành công.

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

Tôi đã tìm ra rằng đây là sai. EOL được thiết lập bằng phpcs. Nhưng tôi không thể tìm ra nếu có một giá trị nào tôi có thể cấu hình thông qua một quy tắc.

này hoạt động tốt đối với tôi cho đến nay (vít các không gian ngớ ngẩn !!!):

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

Nhưng tôi muốn thêm các quy tắc trên.

+0

Điều này cũng được hỏi tại đây: https://github.com/squizlabs/PHP_CodeSniffer/issues/703 –

Trả lời

9

Đặt mã này trong file ruleset.xml của bạn:

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

Điều đó sẽ bao gồm các tiêu chuẩn PSR2, nhưng loại trừ thư cụ thể về cú đúp cần phải được trên cùng một dòng. Sau đó, nó bao gồm các sniff chung mà lực lượng phương pháp và chức năng niềng răng để được trên dòng sau.

Với sự thay đổi đó, mã này:

<?php 
namespace Test; 

class Foo 
{ 
    public function bar() { 
    } 
} 

Sẽ tạo ra không có lỗi, nhưng chạy PSR2 trực tiếp trên nó tạo ra một lỗi:

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

Cảm ơn bạn! Tôi không thể tìm ra quy tắc nào tôi phải loại trừ! Làm cách nào để lưu trữ cùng một khai báo lớp? Bạn có biết các quy tắc cần thay đổi cho điều này không? Thật đáng tiếc là không có tài liệu thích hợp cho tất cả các quy tắc - hoặc tôi đã không tìm thấy chúng. – burzum

+0

Có thực sự không có sniff để thực thi một cú đúp lớp trên cùng một dòng, và không ai từng yêu cầu một trong hai. Vì vậy, cho điều này, bạn cần phải viết một sniff tùy chỉnh, hoặc gửi một yêu cầu tính năng để có một cái gì đó thêm vào lõi. Và có, tôi biết có một thiếu tài liệu về điều này và hy vọng tôi có thể thay đổi một ngày nào đó.Tôi chỉ là một nhóm của một người, và tôi có một công việc toàn thời gian và một gia đình, vì vậy thời gian của tôi luôn luôn khá hạn chế. Rất may là rất nhiều người tốt đã gửi mã cho dự án. Chỉ cần không có nhiều tài liệu :) –

+0

Phiên bản cũ của khung công tác CakePHP phải có một sniff cho rằng, tôi sẽ xem nếu tôi có thể xác định nó và sẽ làm một PR để phpcs nếu tôi quản lý để có được nó thực hiện. Tôi đã không nhận ra bạn là nhà phát triển chính trong dự án này. Cảm ơn công cụ tuyệt vời đó! Bất kỳ cách nào tôi có thể tặng một vài đô? :) – burzum

1

Ngoài các câu trả lời từ Greg, nếu bạn đang sử dụng PHPStorm, truy cập Settings -> Editor -> Inspections -> PHP -> Code Sniffer và bạn sẽ thấy tùy chọn Show sniff name.

enter image description here

này sẽ cung cấp cho bạn tên của nguyên tắc vi phạm (đầu tiên, cấu hình đường dẫn thực thi PHP Mã Sniffer trong Settings -> Languages and frameworks -> PHP -> Code sniffer). Sau đó, trên chú giải công cụ cảnh báo trong tệp mã nguồn của bạn, cẩn thận di chuyển con trỏ, chọn văn bản và không cần nhả nút, nhấn Control C để sao chép nó.

Sau đó, bạn dán nó vào các quy tắc:

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

Tôi đã thêm ở đây PSR2.Classes.ClassDeclaration.OpenBraceNewLine các quy tắc loại trừ.

Các vấn đề liên quan