Phan - статический анализатор для PHP

keygen_B

Newbie
11.06.2020
2
0
1
Phan - статический анализатор для PHP
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
 

Об LS-LA

  • Мы, группа единомышленников, основная цель которых повышать уровень знаний и умений.
    Не забывая о материальном благополучии каждого)

About LS-LA

  • We, a group of like-minded people, whose main goal is to increase the level of knowledge and skills.
    Not forgetting about everyone’s material well-being)

Быстрая навигация

Пользовательское меню