PHPStan 1.0 發布,PHP 程式碼靜態分析器

經過六年的開發,靜態分析器 PHPStan 1.0 的第一個穩定版本發布了,它允許您在不執行 PHP 程式碼和使用單元測試的情況下查找 PHP 程式碼中的錯誤。 該專案程式碼是用 PHP 編寫的,並根據 MIT 許可證分發。

此分析器提供 10 個等級的檢查,其中每個後續等級都會擴展前一個等級的功能並提供更嚴格的檢查:

  • 基本檢查,定義未知的類別、函數和方法($this)、未定義的變數以及傳遞錯誤數量的參數。
  • 使用 __call 和 __get 識別可能未定義的變數、未知的魔術方法和類別屬性。
  • 偵測所有表達式中的未知方法,不限於透過 $this 的呼叫。 檢查 PHPDocs。
  • 檢查傳回類型並將類型指派給屬性。
  • 「死」(從未被呼叫)代碼的基本識別。 識別始終傳回 false 的 instanceof 呼叫、從不觸發的「else」區塊以及傳回後的程式碼。
  • 檢查傳遞給方法和函數的參數類型。
  • 關於缺少類型資訊註釋的警告。
  • 關於定義兩種或多種類型集合的錯誤聯合類型的警告。
  • 關於呼叫方法和存取類型為“nullable”的屬性的警告。
  • 檢查“混合”類型的使用。

    已發現的潛在問題的範例:

    • 在instanceof、catch、typehints 和其他語言構造中使用的類別的存在。
    • 所呼叫的方法和函數的存在和可用性,以及傳遞的參數數量。
    • 檢查該方法傳回的資料類型是否與傳回表達式中定義的類型相同。
    • 正在存取的屬性的存在和可見性,並檢查屬性中使用的聲明和實際資料類型。
    • 字串格式化區塊中傳遞給 sprintf/printf 呼叫的參數數量是正確的。
    • 變數的存在考慮到由分支運算子和循環形成的區塊。
    • 對不同類型和操作數的資料進行無用的類型轉換(例如“(string) 'foo'”)和嚴格測試(“===”和“!==”)總是會傳回 false。

    PHPStan 1.0 的主要創新:

    • 已實現“9”檢查級別,檢查“混合”類型的使用,旨在組織函數接收不同類型的參數。 XNUMX級標識「混合」的不安全使用,例如將「混合」類型的值傳遞給另一種類型,呼叫「混合」類型的方法,以及存取其屬性,因為它們可能不存在。
    • 使用@phpstan-pure和@phpstan-impure註解控制相同函數呼叫的回傳值是否相同。
    • 使用 @throws 註解在 try-catch-finally 建構中進行類型分析。
    • 識別已定義但未使用的內部(私有)屬性、方法和常數。
    • 將不相容的回呼傳遞給陣列函數,例如 array_map 和 usort。
    • 類型檢查是否缺少類型提示註釋。
    • 使類型聲明與 PHPDocs 相容,允許在 PHPDocs 中使用錯誤訊息中的類型。

    來源: opennet.ru

  • 添加評論