Phát hành PHPStan 1.0, bộ phân tích tĩnh cho mã PHP

Sau sáu năm phát triển, bản phát hành ổn định đầu tiên của bộ phân tích tĩnh PHPStan 1.0 đã diễn ra, cho phép bạn tìm lỗi trong mã PHP mà không cần thực thi nó và sử dụng các bài kiểm tra đơn vị. Mã dự án được viết bằng PHP và được phân phối theo giấy phép MIT.

Máy phân tích cung cấp 10 cấp độ kiểm tra, trong đó mỗi cấp độ tiếp theo sẽ mở rộng khả năng của cấp độ trước đó và cung cấp các bước kiểm tra nghiêm ngặt hơn:

  • Kiểm tra cơ bản, xác định các lớp, hàm và phương thức không xác định ($ this), các biến không xác định và truyền sai số lượng đối số.
  • Xác định các biến có thể không xác định, các phương thức ma thuật chưa biết và thuộc tính của các lớp bằng __call và __get.
  • Phát hiện các phương thức không xác định trong tất cả các biểu thức, không giới hạn ở các lệnh gọi qua $this. Kiểm tra PHPDocs.
  • Kiểm tra kiểu trả về và gán kiểu cho thuộc tính.
  • Nhận dạng cơ bản về mã "chết" (không bao giờ được gọi). Xác định các lệnh gọi instanceof luôn trả về sai, các khối "else" không bao giờ kích hoạt và mã sau khi trả về.
  • Kiểm tra các loại đối số được truyền cho các phương thức và hàm.
  • Cảnh báo về việc thiếu chú thích thông tin loại.
  • Cảnh báo về các loại kết hợp không chính xác xác định bộ sưu tập gồm hai loại trở lên.
  • Cảnh báo về các phương thức gọi và truy cập các thuộc tính có loại "nullable".
  • Kiểm tra việc sử dụng loại "hỗn hợp".

    Ví dụ về các vấn đề cơ bản được xác định:

    • Sự tồn tại của các lớp được sử dụng trong instanceof, Catch, gợi ý kiểu chữ và các cấu trúc ngôn ngữ khác.
    • Sự tồn tại và sẵn có của các phương thức và hàm được gọi cũng như số lượng đối số được truyền.
    • Kiểm tra xem phương thức có trả về dữ liệu có cùng kiểu như được xác định trong biểu thức trả về hay không.
    • Sự tồn tại và khả năng hiển thị của các thuộc tính đang được truy cập cũng như kiểm tra các kiểu dữ liệu được khai báo và thực tế được sử dụng trong các thuộc tính.
    • Số lượng tham số được truyền cho lệnh gọi sprintf/printf trong khối định dạng chuỗi là chính xác.
    • Sự tồn tại của các biến có tính đến các khối được hình thành bởi các toán tử và vòng lặp phân nhánh.
    • Các kiểu ép kiểu vô dụng (ví dụ: "(string) 'foo'") và các kiểm tra nghiêm ngặt ("===" và "!==") trên dữ liệu có các kiểu và toán hạng khác nhau luôn trả về sai.

    Những cải tiến chính trong PHPStan 1.0:

    • Mức kiểm tra “9” đã được triển khai, kiểm tra việc sử dụng loại “hỗn hợp”, nhằm mục đích tổ chức chức năng tiếp nhận các tham số với các loại khác nhau. Cấp độ XNUMX xác định việc sử dụng không an toàn của "hỗn hợp", chẳng hạn như chuyển các giá trị của loại "hỗn hợp" sang loại khác, gọi các phương thức thuộc loại "hỗn hợp" và truy cập các thuộc tính của nó vì chúng có thể không tồn tại.
    • Kiểm soát xem các giá trị trả về có giống nhau đối với các lệnh gọi hàm giống hệt nhau hay không bằng cách sử dụng các chú thích @phpstan-pure và @phpstan-impure.
    • Phân tích kiểu trong cấu trúc try-catch-finally bằng cách sử dụng chú thích @throws.
    • Xác định các thuộc tính, phương thức và hằng số nội bộ (riêng tư) được xác định nhưng không được sử dụng.
    • Truyền các lệnh gọi lại không tương thích tới các hàm mảng như array_map và usort.
    • Kiểm tra kiểu để tìm các chú thích gợi ý đánh máy bị thiếu.
    • Tạo các khai báo kiểu tương thích với PHPDocs, cho phép sử dụng các loại từ thông báo lỗi trong PHPDocs.

    Nguồn: opennet.ru

  • Thêm một lời nhận xét