PHP: Phan (PHP静的解析ツール)

参考

etsy/phan 0.7 が対象
その他のPHPの静的解析ツールは PHP: PHPの静的解析(phpcs, phpmd, etc...) を参照

インストール

Docker Image を使用しない場合の参考手順。
詳細は、 Getting Started を参照。

動作環境の準備

Windowsの場合: dll をダウンロードして、 php.iniextension=php_sqlite3.dllextension=php_ast.dll
Linuxの場合: (yum でも make でもお好みで) php-ast を導入する。(Installing Phan Dependencies)

phar ファイルの準備

phan/releases から、最新の phan.phar を取得してパスとおす。(phan コマンドが使えるように)

注釈

php_ast を、 phan 実行時のみ導入する場合

phan.bat
@php -d extension=php_ast.dll C:\path\to\phan.phar %*

設定ファイル(.phan/config.php)の準備

参考

プロジェクトルート/.phan/config.php に設定ファイルを準備する。

注釈

Windowsのエクスプローラーで、 .phan ディレクトリーを作成したい場合、 .phan. で作成できる。

以下、最低限の確認項目。

.phan/config.php
<?php

use \Phan\Issue;

return [
    // 報告する最小重要度レベル(Issue::SEVERITY_LOW, Issue::SEVERITY_NORMAL, Issue::SEVERITY_CRITICAL)
    'minimum_severity' => Issue::SEVERITY_LOW,
    // 抑止するissueタイプ
    'suppress_issue_types' => [
        // 'PhanUndeclaredMethod',
    ],
    // 空でない場合、リスト内のissueタイプのみが出力される
    'whitelist_issue_types' => [
        // 'PhanUndeclaredMethod',
    ],
    // 解析から除外するファイルのリスト
    'exclude_file_list' => [],
    // チェック対象のディレクトリーリスト
    'directory_list' => [
        'src',
        'vendor/symfony/console',
    ],
    // 拡張子 (e.g. php, html, htm)
    'analyzed_file_extensions' => ['php'],
    // 静的解析から除外されるがクラスとメソッドの情報が含まれるファイルを定義するディレクトリーリスト
    "exclude_analysis_directory_list" => [
        'vendor/'
    ],
];

プロジェクトルートから phan を実行する

注釈

大規模なプロジェクトの場合、 --processes, --progress-bar も検討(詳細は -h)

$ cd project_root
$ phan -o phan.log

これで、 phan.log に結果が出力される。