Installing Phan on OS X
I use Homebrew for my local PHP installation on OS X and am currently running PHP 7.0.0 RC8.
Phan is a static analyser for PHP 7 which was written by Rasmus and then rewritten by Andrew Morrison. As it benefits from PHP 7’s abstract syntax tree it can find all kinds of subtle errors, so I wanted to install it locally to have a play with it.
I started by trying to install Phan into my global composer install so that it’s available on my path. As it’s not released on Packagist, I edited ~/.composer/composer.json and added:
"repositories": [ { "type": "vcs", "url": "https://github.com/etsy/phan" } ],
to the top, so the I could then install via the standard composer method:
$ composer global require etsy/phan:dev-master
This immediately failed as I don’t have the Nikita’s ast extension installed:
Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for etsy/phan dev-master -> satisfiable by etsy/phan[dev-master]. - etsy/phan dev-master requires ext-ast * -> the requested PHP extension ast is missing from your system.
To install this extension:
$ git clone git@github.com:nikic/php-ast.git $ cd php-ast $ phpize $ ./configure --enable-ast $ make install
Now edit you php.ini file (/usr/local/etc/php/7.0/php.ini for Homebrew installations) and add extension=ast.so at the bottom.
Having installed the ast PHP 7 extension, Phan will now install:
$ composer global require etsy/phan:dev-master Changed current directory to /Users/rob/.composer ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) - Installing etsy/phan (dev-master 66dd303) Cloning 66dd303fc17aafe968fa5ff393b920ba5c222b6f Writing lock file Generating autoload files Changelogs summary: - etsy/phan installed in version dev-master
Now, Phan works from my command line!
$ phan -h Usage: /Users/rob/.composer/vendor/bin/phan [options] [files...] -f <filename> A file containing a list of PHP files to be analyzed -q Quick mode - doesn't recurse into all function calls -b Check for potential PHP 5 -> PHP 7 BC issues -i Ignore undeclared functions and classes -c Comma-separated list of classes that require parent::__construct() to be called -m <mode> Output mode: verbose, short, json, csv -o <filename> Output filename -p Show progress bar -t Emit trace IDs on messages (for grouping error types) -s <filename> Save state to the given file and read from it to speed up future executions -r Force a re-analysis of any files passed in even if they haven't changed since the last analysis -h This help
Nice article!
Also it is possible to install ast with homebrew (brew install php70-ast).