it-swarm-vi.com

Cách bỏ qua các lỗi tiêu chuẩn mã hóa nhất định trong PHP CodeSniffer

Chúng tôi có một ứng dụng web PHP 5 và chúng tôi hiện đang đánh giá PHP CodeSniffer để quyết định xem việc buộc các tiêu chuẩn mã có cải thiện chất lượng mã mà không gây đau đầu quá nhiều hay không. Nếu nó có vẻ tốt, chúng tôi sẽ thêm một hook pre-commit SVN để đảm bảo tất cả các tệp mới được cam kết trên nhánh dev không có mùi mã hóa tiêu chuẩn.

Có cách nào để định cấu hình PHP codeSniffer để bỏ qua một loại lỗi cụ thể không? hoặc nhận nó để xử lý một lỗi nhất định như một cảnh báo thay thế?

Dưới đây là một ví dụ để chứng minh vấn đề:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <?php
    echo getTabContent('Programming', 1, $numX, $numY);

    if (isset($msg)) {
        echo $msg;
    }
    ?>
</div>
</body>
</html>

Và đây là đầu ra của PHP_CodeSniffer:

[.___.]> Phpc test.php [.__.] [.__.] ------------------------------ -------------------------------------------------- [.__.] TÌM 2 L ERI (S) VÀ 1 CẢNH BÁO (S) ẢNH HƯỞNG 3 LINE (S) [.__.] ---------------------- -------------------------------------------------- -------- [.__.] 1 | CẢNH BÁO | Dòng vượt quá 85 ký tự; chứa 121 ký tự [.__.] 9 | LRI | Thiếu bình luận tài liệu tập tin [.__.] 11 | LRI | Dòng thụt lề không chính xác; 0 không gian dự kiến, được tìm thấy 4 [.__.] --------------------------------------- ----------------------------------------- [.__.]

Tôi gặp sự cố với lỗi " Dòng thụt lề không chính xác ". Tôi đoán điều đó xảy ra bởi vì tôi đang trộn thụt đầu dòng PHP với thụt lề HTML. Nhưng điều này làm cho nó dễ đọc hơn phải không? ( có tính đến việc tôi không có nguồn lực để chuyển sang khung MVC ngay bây giờ ). Vì vậy, tôi muốn bỏ qua nó xin vui lòng.

13
Tom

Tôi đã tìm thấy giải pháp để xóa lỗi " Dòng thụt lề không chính xác " nhưng trước tiên tôi nên nói rằng dragonmantank có một điểm tuyệt vời - bạn không nên trộn PHP và HTML. Nó là một công thức cho đau đầu. Tuy nhiên, thật không may, tôi nghĩ việc trộn PHP và HTML là rất phổ biến, đặc biệt là trong phần mềm cũ.

Cách khắc phục nhanh nhất và bẩn nhất giả sử chúng ta đang sử dụng các tiêu chuẩn mã hóa mặc định phpcs (là các tiêu chuẩn ) là xóa tệp Sniff có liên quan. Tìm vị trí của các tiêu chuẩn PEAR, đối với tôi, bằng cách sử dụng bunt , nó đã ở đây:

> cd /usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/WhiteSpace

Đổi tên tệp ScopeIndentSniff.php để việc đánh hơi kiểm tra thụt mã sẽ không còn được thực thi:

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

Công việc đã hoàn thành - bây giờ việc thụt lề sẽ không được kiểm tra và lỗi " Dòng thụt lề không chính xác " đã thắng 'xảy ra ( và mã của bạn sẽ không phải là tiêu chuẩn và sẽ không có chất lượng cao như vậy! ).


Giải pháp trên khá nghiệp dư - giải pháp sạch hơn là tạo ra một tiêu chuẩn mã hóa mới sử dụng tất cả các tiêu chuẩn PEAR ngoại trừ các tùy chỉnh anh đào của bạn. Điều này rất nhanh để làm. Dưới đây là cách thực hiện bằng cách sử dụng getIncludedSniffs()getExcludedSniffs() và một số phpcs quy ước đặt tên:

Go to the directory where the phpcs coding standards are defined:
> cd /usr/share/php/PHP/CodeSniffer/Standards

Create a new directory for your new standard:
> Sudo mkdir PEARish
> cd PEARish

Create your new standard by saving the following in the file:
> Sudo emacs PEARishCodingStandard.php
<?php
class PHP_CodeSniffer_Standards_PEARish_PEARishCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
    public function getIncludedSniffs()
    {
      return array('PEAR');
    }

    public function getExcludedSniffs()
    {
      return array('PEAR/Sniffs/WhiteSpace/ScopeIndentSniff.php');
    }
}
?>

Kiểm tra tiêu chuẩn mã hóa tùy chỉnh mới của bạn bằng cách gọi phpcs bằng cách sử dụng cờ --standard. Ví dụ:

> phpcs --standard=PEARish Test.php

Khi nó hoạt động, bạn có thể đặt tiêu chuẩn mới của mình làm mặc định, điều đó có nghĩa là bạn không cần nhập cờ --standard mỗi khi bạn sử dụng phpcs:

> Sudo phpcs --config-set default_standard PEARish

Xem hướng dẫn sử dụng phpc để biết thêm thông tin.

11
Tom

Bạn sẽ gặp rất nhiều vấn đề khi chạy PHPCS với mã PHP được trộn lẫn với HTML. PHPCS chỉ thực sự hữu ích khi bạn phân tích cú pháp thuần PHP script. Các tiêu chuẩn mã hóa tích hợp được xây dựng xung quanh PHP thuần túy, không trộn lẫn PHP/HTML.

Một lựa chọn sẽ là xây dựng tiêu chuẩn tùy chỉnh của riêng bạn và thay vào đó sử dụng tiêu chuẩn đó. Tiêu chuẩn tùy chỉnh sẽ tính đến việc trộn mã, nhưng có lẽ sẽ rất khó để viết.

Tùy chọn khác là sử dụng hệ thống tạo khuôn mẫu vì bạn nói rằng bạn không muốn chuyển sang một khung. SmartyTwig cả hai đều có thể được sử dụng bên ngoài khung MVC. Di chuyển đến một trong số đó và sau đó có PHPCS chỉ phân tích các tệp .PHP, không phải các tệp mẫu.

7
dragonmantank