Phan - статический анализатор для PHP, который предпочитает минимизировать ложные срабатывания. Он пытается доказать неправильность, а не правильность.
Он ищет общие проблемы и проверяет совместимость типов при различных операциях, когда информация о типе доступна или может быть выведена. Фан имеет хорошее (но не всестороннее) понимание управления потоком данных и не пытается отслеживать значения.
Функции:
- Убедитесь, что все методы, функции, классы, черты, интерфейсы, константы, свойства и переменные определены и доступны.
- Проверьте безопасность типов и вопросы арности при вызовах методов / функций / замыканий.
- Проверьте обратную совместимость PHP7 / PHP5.
- Проверьте функции, которые не поддерживались в более старых второстепенных выпусках PHP 7.x (например, object, void, iterable,? T, [$ x] = ...; и т. Д.)
- Проверьте работоспособность с доступом к массиву.
- Проверьте типобезопасность бинарных операций.
- Проверяйте допустимые и безопасные для типов возвращаемые значения для методов, функций и замыканий.
- Проверяйте отсутствие операций для массивов, замыканий, констант, свойств, переменных, унарных и бинарных операторов.
- Проверьте наличие неиспользуемого / мертвого / недоступного кода. (Передайте --dead-code-detection)
- Проверьте наличие неиспользованных заявлений об использовании.
- Проверьте, не переопределяются ли классы, функции и методы.
- Проверка работоспособности с помощью наследования классов (например, проверка совместимости подписи метода). Phan также проверяет, не переопределяются ли окончательные классы / методы, реализованы ли абстрактные методы и действительно ли реализованный интерфейс является интерфейсом (и так далее).
- Поддерживает пространства имен, черты и вариативность.
- Поддерживает типы союза.
- Поддерживает универсальные массивы, такие как int [], UserObject [], array <int, UserObject> и т. Д.
- Поддерживает формы массивов, такие как array {key: string, otherKey:? StdClass} и т. Д. (Внутренне и в тегах PHPDoc), начиная с Phan> = 0.12.0.
- В предстоящем выпуске 0.12.3 будет поддерживаться указание, что поля формы массива являются необязательными через array {requiredKey: string, optionalKey?: String} (полезно для @param)
- Поддерживает аннотации типа phpdoc.
- Поддерживает наследование аннотаций типа phpdoc.
- Поддерживает проверку того, что аннотации типов phpdoc являются суженной формой (например, подклассы / подтипы) реальных сигнатур типов.
- Поддерживает вывод типов из операторов assert () и условий в элементах / циклах if.
- Поддерживает аннотацию @deprecated для устаревших классов, методов и функций
- Поддерживает аннотацию @internal для элементов (например, константы, функции, класса, константы класса, свойства или метода) как внутренних по отношению к пакету, в котором они определены.
- Поддерживает аннотации @suppress <ISSUE_TYPE> для подавления проблем.
- Поддерживает магические аннотации @property (частичные) (@property <union_type> <variable_name>)
- Поддерживает магические аннотации @method (@method <union_type> <method_name> (<union_type> <param1_name>))
- Поддерживает аннотации class_alias (экспериментально, по умолчанию отключено)
- Поддерживает указание класса, к которому будет привязано закрытие, через @ phan-closure-scope (пример)
- Поддерживает анализ замыканий и типов возвращаемых значений, передаваемых в array_map, array_filter и другие внутренние функции массива. (по данным Phan 0.10.1 + / 0.8.9 +)
- Предлагает обширную конфигурацию для ослабления анализа, чтобы сделать его полезным на больших неаккуратных базах кода.
- Может работать на многих ядрах. (требуется pcntl)
- Может работать в фоновом режиме (режим демона), чтобы затем быстро отвечать на запросы для анализа последней версии файла. Это также может действовать как линтер в протоколе языкового сервера. Части реализации языкового сервера основаны на felixfbecker / php-language-server. Во время работы в фоновом режиме Phan можно использовать из различных редакторов.
- Вывод выводится в форматах text, checkstyle, json, pylint, csv или codeclimate.
- Может запускать пользовательские плагины в исходном коде для проверок, специфичных для вашего кода. Phan включает в себя различные плагины, которые вы можете включить в свой проект.
Код:
Usage: ./phan [options] [files...]
-f, --file-list <filename>
A file containing a list of PHP files to be analyzed
-l, --directory <directory>
A directory that should be parsed for class and
method information. After excluding the directories
defined in --exclude-directory-list, the remaining
files will be statically analyzed for errors.
Thus, both first-party and third-party code being used by
your application should be included in this list.
You may include multiple `--directory DIR` options.
--exclude-file <file>
A file that should not be parsed or analyzed (or read
at all). This is useful for excluding hopelessly
unanalyzable files.
-3, --exclude-directory-list <dir_list>
A comma-separated list of directories that defines files
that will be excluded from static analysis, but whose
class and method information should be included.
Generally, you'll want to include the directories for
third-party code (such as "vendor/") in this list.
--include-analysis-file-list <file_list>
A comma-separated list of files that will be included in
static analysis. All others won't be analyzed.
This is primarily intended for performing standalone
incremental analysis.
-d, --project-root-directory </path/to/project>
Hunt for a directory named .phan in the provided directory
and read configuration file .phan/config.php from that path.
-r, --file-list-only
A file containing a list of PHP files to be analyzed to the
exclusion of any other directories or files passed in. This
is unlikely to be useful.
-k, --config-file
A path to a config file to load (instead of the default of
.phan/config.php).
-m <mode>, --output-mode
Output mode from 'text', 'json', 'csv', 'codeclimate', 'checkstyle', or 'pylint'
-o, --output <filename>
Output filename
--init
[--init-level=3]
[--init-analyze-dir=path/to/src]
[--init-analyze-file=path/to/file.php]
[--init-no-composer]
Generates a `.phan/config.php` in the current directory
based on the project's composer.json.
The logic used to generate the config file is currently very simple.
Some third party classes (e.g. in vendor/)
will need to be manually added to 'directory_list' or excluded,
and you may end up with a large number of issues to be manually suppressed.
See https://github.com/phan/phan/wiki/Tutorial-for-Analyzing-a-Large-Sloppy-Code-Base
[--init-level] affects the generated settings in `.phan/config.php`
(e.g. null_casts_as_array).
`--init-level` can be set to 1 (strictest) to 5 (least strict)
[--init-analyze-dir] can be used as a relative path alongside directories
that Phan infers from composer.json's "autoload" settings
[--init-analyze-file] can be used as a relative path alongside files
that Phan infers from composer.json's "bin" settings
[--init-no-composer] can be used to tell Phan that the project
is not a composer project.
Phan will not check for composer.json or vendor/,
and will not include those paths in the generated config.
[--init-overwrite] will allow 'phan --init' to overwrite .phan/config.php.
--color
Add colors to the outputted issues. Tested in Unix.
This is recommended for only the default --output-mode ('text')
-p, --progress-bar
Show progress bar
-q, --quick
Quick mode - doesn't recurse into all function calls
-b, --backward-compatibility-checks
Check for potential PHP 5 -> PHP 7 BC issues
--target-php-version {7.0,7.1,7.2,native}
The PHP version that the codebase will be checked for compatibility against.
For best results, the PHP binary used to run Phan should have the same PHP version.
(Phan relies on Reflection for some param counts
and checks for undefined classes/methods/functions)
-i, --ignore-undeclared
Ignore undeclared functions and classes
-y, --minimum-severity <level in {0,5,10}>
Minimum severity level (low=0, normal=5, critical=10) to report.
Defaults to 0.
-c, --parent-constructor-required
Comma-separated list of classes that require
parent::__construct() to be called
-x, --dead-code-detection
Emit issues for classes, methods, functions, constants and
properties that are probably never referenced and can
possibly be removed.
-j, --processes <int>
The number of parallel processes to run during the analysis
phase. Defaults to 1.
-z, --signature-compatibility
Analyze signatures for methods that are overrides to ensure
compatibility with what they're overriding.
--disable-plugins
Don't run any plugins. Slightly faster.
--plugin <pluginName|path/to/Plugin.php>
Add an additional plugin to run. This flag can be repeated.
(Either pass the name of the plugin or a relative/absolute path to the plugin)
--strict-param-checking
Enables the config option `strict_param_checking`.
--strict-property-checking
Enables the config option `strict_property_checking`.
--strict-return-checking
Enables the config option `strict_return_checking`.
--strict-type-checking
Equivalent to
`--strict-param-checking --strict-property-checking --strict-return-checking`.
--use-fallback-parser
If a file to be analyzed is syntactically invalid
(i.e. "php --syntax-check path/to/file" would emit a syntax error),
then retry, using a different, slower error tolerant parser to parse it.
(And phan will then analyze what could be parsed).
This flag is experimental and may result in unexpected exceptions or errors.
This flag does not affect excluded files and directories.
--allow-polyfill-parser
If the `php-ast` extension isn't available or is an outdated version,
then use a slower parser (based on tolerant-php-parser) instead.
Note that https://github.com/Microsoft/tolerant-php-parser
has some known bugs which may result in false positive parse errors.
--force-polyfill-parser
Use a slower parser (based on tolerant-php-parser) instead of the native parser,
even if the native parser is available.
Useful mainly for debugging.
-s, --daemonize-socket </path/to/file.sock>
Unix socket for Phan to listen for requests on, in daemon mode.
--daemonize-tcp-port <default|1024-65535>
TCP port for Phan to listen for JSON requests on, in daemon mode.
(e.g. 'default', which is an alias for port 4846.)
`phan_client` can be used to communicate with the Phan Daemon.
-v, --version
Print phan's version number
-h, --help
This help information
--extended-help
This help information, plus less commonly used flags
(E.g. for daemon mode)
DOWNLOAD PHAN