2012-09-06 25 views
5

Tôi đang sử dụng Jenkins (Hudson) CI và mỗi đêm phân tích mã bằng cách sử dụng một số công cụ để hỗ trợ, bao gồm Codesniffer cho báo cáo Checkstyle. Tôi không thể bỏ qua thư mục ./framework/*, nhưng nó nhấn mạnh vào việc bao gồm nó, bất kể những nỗ lực của tôi với thông số --ignore.Tại sao CodeSniffer không bao gồm các thư mục được chỉ định --ignore?

Báo cáo được tạo và phân tích cú pháp thành công, nhưng không thực sự sử dụng bất kỳ đối với chúng tôi vì số lượng vi phạm nghiêm trọng các tiêu chuẩn mã hóa Pear trong khuôn khổ.

Codesniffer được gọi từ Ant build-kịch bản của tôi như thế này:

<target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server"> 
<exec executable="phpcs" dir="${basedir}" output="${basedir}/build/logs/checkstyle.xml" failonerror="off"> 
    <arg line="--report=checkstyle --standard=${basedir}/build/phpcs.xml --extensions=php --ignore=*/framework/* ${basedir}" /> 
</exec> 
</target> 

Tôi đã thử --ignore=framework, --ignore=framework/, và một trong những dòng trên, tất cả từ các ví dụ tôi đã tìm thấy khắp nơi trên web.

Tôi cũng đã thử sử dụng một dòng khác cho mỗi đối số (using < arg value"..." />), nhưng không có kết quả.

Bất kỳ ý tưởng nào? nhiều đánh giá cao :)

Edit: Đối số --ignore bây giờ là:

--ignore=${basedir}/framework/ 

... Và vẫn còn, thư mục khuôn khổ đã được bao gồm. Có ai trên mạng có cấu hình PhpCodeSniffer đang hoạt động, với đối số --ignore, hoạt động không?

Vuốt các ngón tay tại đây

Trả lời

3

Sử dụng * sẽ không hoạt động vì vỏ sẽ mở rộng chúng.

Tùy thuộc vào phiên bản php_codesniffer bạn phải truyền đường dẫn đầy đủ vào thư mục để bỏ qua (phiên bản cũ) hoặc đường dẫn tương đối từ thư mục build để thực hiện công việc bỏ qua (từ phiên bản php_codesniffer 1.3.6):

Trích từ Changelog:

  • Bỏ qua mẫu bây giờ kiểm tra đường dẫn tương đối của một tập tin dựa trên dir được kiểm tra
+0

Cảm ơn, tôi sẽ thử nó ngay lập tức – Julian

+0

Nogo:/Dòng arg hiện nay là: Julian

6

Tôi đã gặp vấn đề tương tự trong Jenkins và câu trả lời ở trên đã giúp tôi ở một mức độ nào đó. Đây là những gì tôi có bây giờ (và hoạt động trên hệ thống của tôi).

Nếu hệ thống của bạn trông như thế này:

/ 
/build.xml 
/foo 
/foo/bar 

Đây là những gì tôi có trong build.xml tôi

<target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing."> 
<exec executable="phpcs"> 
    <arg value="--standard=${basedir}/build/phpcs.xml" /> 
    <arg value="--ignore=foo/bar" /> 
    <arg path="${basedir}" /> 
</exec> 

Bí quyết không sử dụng $ {} và basedir để mất dấu gạch chéo sau của thư mục.

Tôi hy vọng nó sẽ giúp

1

Cảm ơn các yếu tố đầu vào.Tôi đã giải quyết nó như thế này

<target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server"> 
    <exec executable="phpcs" failonerror="off"> 
     <arg line="-v --report-checkstyle=${basedir}/build/logs/checkstyle.xml --standard=${basedir}/build/phpcs.xml --extensions=php --ignore=extensions,library ./protected" /> 
    </exec> 
    </target> 

Hoạt động!

4

Cũng có thể đặt các loại trừ này trong tệp build/phpcs.xml. Làm việc tốt ở đây trong Jenkins.

Ví dụ về loại trừ tất cả các tệp trong thư mục js/facebook, đối sánh ký tự đại diện cho js/jquery * và tên tệp được chỉ định.

<exclude-pattern>lib/facebook</exclude-pattern> 
<exclude-pattern>js/jquery*</exclude-pattern> 
<exclude-pattern>lib/Postmark.php</exclude-pattern> 
Các vấn đề liên quan