Phan-PHP靜態分析器

Phan是一個PHP的靜態分析器,它傾向於最小化誤報。它試圖證明錯誤而不是正確。

它會查找常見問題,並在類型信息可用或可以推斷時驗證各種操作的類型兼容性。Phan對流量控制有很好的(但不是全面的)理解,並且不會試圖追蹤價值。

特徵:

檢查所有方法,函數,類,特徵,接口,常量,屬性和變量是否定義和可訪問。

檢查方法/函數/關閉調用中的類型安全性和參數問題。

檢查PHP7 / PHP5向後兼容性。

檢查舊版PHP 7.x次要版本中不支持的功能(例如object,void,iterable,?T,[$ x] = ...等)

檢查數組訪問是否完整。

檢查二進制操作的類型安全性。

檢查方法,函數和閉包的有效和類型安全的返回值。

檢查數組,閉包,常量,屬性,變量,一元運算符和二元運算符的否操作。

檢查未使用/死/無法訪問的代碼。(通過 - 代碼檢測)

檢查未使用的使用語句。

檢查重新定義的類,函數和方法。

用類繼承來檢查是否完整(例如檢查方法簽名兼容性)。Phan還檢查最終的類/方法被覆蓋,抽象方法被實現,並且實現的接口實際上是一個接口(等等)。

支持命名空間,特徵和可變參數。

支持聯盟類型。

支持泛型數組,如int [],UserObject [],數組等。

從Phan> = 0.12.0開始支持數組形狀,如數組等等(內部和PHPDoc標籤中)。

即將發佈的0.12.3版本將支持通過array 指示數組形狀的字段是可選的(對於@param有用)

支持phpdoc類型註釋。

支持繼承phpdoc類型註釋。

支持檢查phpdoc類型註釋是實際類型簽名的縮小形式(例如子類/子類型)

支持在元素/循環中從assert()語句和條件推斷類型。

支持棄用類,方法和函數的@deprecated註解

支持元素(如常量,函數,類,類常量,屬性或方法)的@internal註釋作為其定義的包的內部。

支持用於抑制問題的@suppress 註釋。

支持神奇的@property註釋(部分)(@property )

支持magic @method註釋(@method (

))

支持class_alias註釋(實驗性,默認關閉)

支持通過@ phan-closure-scope(示例)指示閉包將被綁定到的類,

支持分析傳遞給array_map,array_filter和其他內部數組函數的閉包和返回類型。(從Phan 0.10.1 / 0.8.9 開始)

提供廣泛的配置以減弱分析,使其在大型草率代碼庫上非常有用

可以在許多內核上運行。(需要pcntl)

可以在後臺運行(守護進程模式),然後快速響應請求來分析最新版本的文件。這也可以充當語??言服務器協議中的一個linter。語言服務器實現的一部分基於felixfbecker / php-language-server。在後臺運行時,Phan可以從各種編輯器中使用。

輸出以文本,checkstyle,json,pylint,csv或代碼氣味格式發送。

可以在源代碼上運行用戶插件以檢查特定於您的代碼的內容。Phan包含了您可能希望為您的項目啟用的各種插件。

下載地址:https://github.com/phan/phan


分享到:


相關文章: