php - Symfony5 项目的 Phan/phan 配置

标签 php symfony static-analysis

我是静态分析新手,我正在尝试在当前项目中使用 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

最佳答案

我找到了,问题出在以下几行:

'directory_list' => [
    'src',
    'vendor/symfony/console',
],

这直接取自 Phan 示例配置,但由于目录列表中仅包含文件夹“vendor/symfony/console”,Phan 无法了解其他 Symfony 组件。

我已将其替换为:

'directory_list' => [
    'src',
    'vendor',
],

通过包含整个供应商目录,它被解析并且 Phan 知道 src 中使用的每个供应商对象。

正如 Leprechaun 提到的,我遇到了另一个问题,即 phan 没有正确解析注释,并且必须包含以下插件

'plugins' => [
    'vendor/drenso/phan-extensions/Plugin/Annotation/SymfonyAnnotationPlugin.php'
],

现在可以了。

关于php - Symfony5 项目的 Phan/phan 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62519263/

相关文章:

php - 复选框重复

javascript - 运行 PHP 脚本时显示加载图像

php - 在 Symfony2 中使用 PHPExcel 读取 Excel 文件,编辑一个单元格的内容然后保存到数据库

php - 如何使用 Symfony 将网页(html)插入数据库?

java - 在实体、DTO 包上禁用 Sonar 重复

php - 如何计算不同的日期时间戳并根据固定百分比过滤条目?

php - 避免在页面刷新时重新发送数据

php - "Source image not resolvable"LiipImagineBundle

c - 带有 clang 的多个源文件的 AST

c - Xcode C 代码, "division by zero"分析器问题