Phan/phan Symfony5 项目的配置
Phan/phan configuration for Symfony5 project
我是静态分析的新手,我正在尝试在我当前的项目中使用 phan/phan。
我的phan/config.php如下。
<?php
/**
* This configuration will be read and overlaid on top of the
* default configuration. Command-line arguments will be applied
* after this file is read.
*/
return [
// Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
// `'7.4'`, `null`.
// If this is set to `null`,
// then Phan assumes the PHP version which is closest to the minor version
// of the php executable used to execute Phan.
//
// Note that the **only** effect of choosing `'5.6'` is to infer
// that functions removed in php 7.0 exist.
// (See `backward_compatibility_checks` for additional options)
// TODO: Set this.
'target_php_version' => null,
// A list of directories that should be parsed for class and
// method information. After excluding the directories
// defined in exclude_analysis_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.
'directory_list' => [
'src',
'vendor/symfony/console',
],
// A regex used to match every file name that you want to
// exclude from parsing. Actual value will exclude every
// "test", "tests", "Test" and "Tests" folders found in
// "vendor/" directory.
'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',
// A directory list 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.
//
// n.b.: If you'd like to parse but not analyze 3rd
// party code, directories containing that code
// should be added to both the `directory_list`
// and `exclude_analysis_directory_list` arrays.
'exclude_analysis_directory_list' => [
'vendor/'
],
];
?>
我的问题是我有很多这样的“误报”错误:
src\Controller\UserController.php:6 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace Route (\Symfony\Component\Routing\Annotation\Route)
src\Controller\UserController.php:7 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace UserPasswordEncoderInterface (\Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface)
src\Controller\UserController.php:8 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace ContainerBagInterface (\Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface)
src\Controller\UserController.php:9 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace Security (\Sensio\Bundle\FrameworkExtraBundle\Configuration\Security)
phan 似乎无法检测到 Symfony 供应商,我想知道如何更正它?
我在 Symfony 5 项目中使用 php 7.4
这似乎是一个已知问题:
https://github.com/phan/phan/issues/1757
在这个 Github 问题中,他们建议使用 Phan 扩展:https://github.com/Drenso/PhanExtensions#annotationsymfonyannotationplugin
或者尝试使用 PHPStan 或 Psalm。
我找到了,问题出在以下几行:
'directory_list' => [
'src',
'vendor/symfony/console',
],
这直接取自 Phan 示例配置,但由于 directory_list 中只包含文件夹 'vendor/symfony/console',Phan 无法知道其他 Symfony 组件。
我已将其替换为:
'directory_list' => [
'src',
'vendor',
],
通过包含整个供应商目录,它被解析并且 Phan 知道 src 中使用的每个供应商对象。
正如 Leprechaun 所提到的,我遇到了另一个问题,即注释未被 phan 正确解析,因此不得不包含以下插件
'plugins' => [
'vendor/drenso/phan-extensions/Plugin/Annotation/SymfonyAnnotationPlugin.php'
],
现在可以了。
我是静态分析的新手,我正在尝试在我当前的项目中使用 phan/phan。
我的phan/config.php如下。
<?php
/**
* This configuration will be read and overlaid on top of the
* default configuration. Command-line arguments will be applied
* after this file is read.
*/
return [
// Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
// `'7.4'`, `null`.
// If this is set to `null`,
// then Phan assumes the PHP version which is closest to the minor version
// of the php executable used to execute Phan.
//
// Note that the **only** effect of choosing `'5.6'` is to infer
// that functions removed in php 7.0 exist.
// (See `backward_compatibility_checks` for additional options)
// TODO: Set this.
'target_php_version' => null,
// A list of directories that should be parsed for class and
// method information. After excluding the directories
// defined in exclude_analysis_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.
'directory_list' => [
'src',
'vendor/symfony/console',
],
// A regex used to match every file name that you want to
// exclude from parsing. Actual value will exclude every
// "test", "tests", "Test" and "Tests" folders found in
// "vendor/" directory.
'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',
// A directory list 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.
//
// n.b.: If you'd like to parse but not analyze 3rd
// party code, directories containing that code
// should be added to both the `directory_list`
// and `exclude_analysis_directory_list` arrays.
'exclude_analysis_directory_list' => [
'vendor/'
],
];
?>
我的问题是我有很多这样的“误报”错误:
src\Controller\UserController.php:6 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace Route (\Symfony\Component\Routing\Annotation\Route) src\Controller\UserController.php:7 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace UserPasswordEncoderInterface (\Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface) src\Controller\UserController.php:8 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace ContainerBagInterface (\Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface) src\Controller\UserController.php:9 PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace Security (\Sensio\Bundle\FrameworkExtraBundle\Configuration\Security)
phan 似乎无法检测到 Symfony 供应商,我想知道如何更正它?
我在 Symfony 5 项目中使用 php 7.4
这似乎是一个已知问题: https://github.com/phan/phan/issues/1757
在这个 Github 问题中,他们建议使用 Phan 扩展:https://github.com/Drenso/PhanExtensions#annotationsymfonyannotationplugin
或者尝试使用 PHPStan 或 Psalm。
我找到了,问题出在以下几行:
'directory_list' => [
'src',
'vendor/symfony/console',
],
这直接取自 Phan 示例配置,但由于 directory_list 中只包含文件夹 'vendor/symfony/console',Phan 无法知道其他 Symfony 组件。
我已将其替换为:
'directory_list' => [
'src',
'vendor',
],
通过包含整个供应商目录,它被解析并且 Phan 知道 src 中使用的每个供应商对象。
正如 Leprechaun 所提到的,我遇到了另一个问题,即注释未被 phan 正确解析,因此不得不包含以下插件
'plugins' => [
'vendor/drenso/phan-extensions/Plugin/Annotation/SymfonyAnnotationPlugin.php'
],
现在可以了。