Hướng dẫn phpstan baseline - đường cơ sở phpstan

Thực đơn

Cách cơ bản của cách xử lý PHPSTAN và cung cấp phân tích các cơ sở mã có chất lượng khác nhau là khái niệm về mức độ quy tắc. Nó cho phép các nhà phát triển bắt đầu sử dụng PHPSTAN trên một dự án ngay lập tức và nâng cao sự nghiêm ngặt kèm theo một an toàn loại tự tin hơn khi họ khắc phục các lỗi.

Quy trình công việc thông thường khi giới thiệu Phpstan vào đường ống CI là để nhận số lượng lỗi được báo cáo ở cấp 0 đến 0 và hợp nhất nó vào nhánh chính. Khi các nhà phát triển cảm thấy như vậy, họ có thể thử nâng cấp một, đi qua danh sách các lỗi, sửa chữa tất cả chúng và tận hưởng sự nghiêm ngặt ngày càng tăng kể từ thời điểm đó.

Các cấp quy tắc đang phục vụ chúng tôi tốt, nhưng chúng đi kèm với một vài cảnh báo:

  1. Nâng cấp lên một phiên bản mới và có khả năng hơn của PHPSTAN có thể đại diện cho một lượng lớn công việc mà bạn cần phải sửa chữa tất cả các lỗi mới để giữ cùng một mức độ phân tích.
  2. Các nhà phát triển đang bỏ lỡ các lỗi thực khi họ chạy một trong những cấp độ thấp hơn.
  3. Giới thiệu các quy tắc tùy chỉnh tiên tiến mới cũng đi kèm với nhu cầu khắc phục tất cả các vi phạm trước khi khả năng sử dụng chúng.

Đây là nơi đường cơ sở đi vào chơi.

PHPSTAN cho phép bạn tuyên bố danh sách các lỗi hiện đang được báo cáo là trên đường cơ sở và vì nó không được báo cáo trong các lần chạy tiếp theo. Nó cho phép bạn quan tâm đến các vi phạm chỉ trong mã mới và thay đổi.currently reported list of errors as “the baseline” and cause it not being reported in subsequent runs. It allows you to be interested in violations only in new and changed code.

Nó hoạt động tốt nhất khi bạn muốn loại bỏ vài chục lỗi được báo cáo mà bạn không có thời gian hoặc năng lượng để đối phó ngay bây giờ. Nó không phải là công cụ tốt nhất khi bạn có 15.000 lỗi - có lẽ bạn nên dành nhiều thời gian hơn để định cấu hình PHPSTAN hoặc chạy nó với mức quy tắc thấp hơn.

Tạo đường cơ sở #

Nếu bạn muốn xuất danh sách lỗi hiện tại và sử dụng nó làm đường cơ sở, hãy chạy phpstan với tùy chọn --generate-baseline:

vendor/bin/phpstan analyse --level 7 \
--configuration phpstan.neon \
src/ tests/ --generate-baseline

Nó tạo ra danh sách các lỗi với số lần xuất hiện trên mỗi tệp và lưu nó dưới dạng phpstan-baseline.neon. Bạn cũng có thể chỉ định một tên tệp khác sau tùy chọn --generate-baseline CLI.

Đây là cách tệp cơ sở trông như thế nào:

parameters:
ignoreErrors:
-
message: "#^Only numeric types are allowed in pre\\-decrement, bool\\|float\\|int\\|string\\|null given\\.$#"
count: 1
path: src/Analyser/Scope.php
-
message: "#^Anonymous function has an unused use \\$container\\.$#"
count: 2
path: src/Command/CommandHelper.php

Sau đó, bạn nên đưa tệp này vào tệp cấu hình:

includes:
- phpstan-baseline.neon

parameters:
# your usual configuration options

Lần tới khi bạn chạy PHPSTAN, các lỗi trong đường cơ sở sẽ bị bỏ qua trong kết quả phân tích. Bạn có thể quản lý đường cơ sở theo cách thủ công bằng cách chỉnh sửa tệp hoặc tạo lại toàn bộ tệp bằng cách chạy phpstan với --generate-baseline.

Nếu một số lỗi bị bỏ qua không xảy ra trong kết quả nữa, PHPSTAN sẽ cho bạn biết và bạn sẽ phải xóa mẫu khỏi tệp cơ sở. Bạn có thể tắt hành vi này bằng cách đặt reportUnmatchedIgnoredErrors thành false trong cấu hình:

parameters:
reportUnmatchedIgnoredErrors: false

Các trường hợp sử dụng #

Đường cơ sở giải quyết thành công tất cả các vấn đề được đề cập ở trên.

Nâng cấp lên các phiên bản mới của PHPStan ngay lập tức #

Nó đặc biệt tuyệt vời nếu bạn trên các nhánh phát hành cổ của phpstan như 0,10.x hoặc thậm chí 0.9.x. Bạn có thể đã hoãn việc nâng cấp vì bạn đã thử nó nhưng đã sợ hãi bởi hàng trăm lỗi mới được tìm thấy bởi PHPSTAN. Nhưng với đường cơ sở, bạn có thể tận dụng các quy tắc mới ngay lập tức. Họ sẽ phân tích mã mới bạn viết với một con mắt quan trọng hơn, trong khi các vấn đề được tìm thấy trong mã cũ chờ đợi trong đường cơ sở để bạn được sửa chữa khi bạn cảm thấy thích nó.

Chạy mức quy tắc cao hơn ngay cả khi có lỗi #

Nếu bạn đạt được lỗi bằng không ở cấp 2, xin chúc mừng bạn! Phpstan hiện báo cáo các cuộc gọi đến các phương thức không xác định trên tất cả các biến hoặc xác thực các loại trong PHPDOCs, bên cạnh hàng chục kiểm tra khác. Nhưng nó đã thắng được nói với bạn rằng bạn đã chuyển các loại đối số sai cho một phương pháp cho đến cấp 5!

Vì vậy, bạn đã bỏ lỡ những lỗi thực sự có thể vào sản xuất.

Với đường cơ sở, ví dụ, bạn có thể chạy PHPSTAN ở cấp 5 và xuất tất cả các lỗi được báo cáo. Hiệu quả là mã mới bạn viết sẽ được kiểm tra nghiêm ngặt hơn - cấm mọi lỗi mới để vào sản xuất.

Giới thiệu các quy tắc tùy chỉnh và giữ mã mới ở tiêu chuẩn cao hơn #

Một chiến lược để chống lại nợ kỹ thuật là đưa ra các thực tiễn tốt nhất mà bạn muốn theo dõi và dần dần áp dụng chúng vào cơ sở mã và đặc biệt là mã mới bạn viết.

Với đường cơ sở, bạn có thể bật các quy tắc cực kỳ nghiêm trọng hoặc các quy tắc tinh tế từ gói Ergebnis/Phpstan-Rules và chỉ áp dụng chúng cho mã mới. Ví dụ: nếu bạn chọn không bao giờ mở rộng bất kỳ lớp nào nữa (vì kế thừa là xấu và bạn chỉ nên sử dụng sáng tác), bạn có thể kích hoạt quy tắc này nhưng không phải đối phó với tất cả các lớp hiện có với cha mẹ ngay lập tức.

Chỉnh sửa trang này trên github