为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony5 项目的 Phan/phan 配置

Symfony5 项目的 Phan/phan 配置

PHP
吃鸡游戏 2023-06-24 17:08:41
我是静态分析新手,我正在尝试在当前项目中使用 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. 似乎 phan 无法检测到 Symfony 供应商,我想知道如何纠正它?我正在 Symfony 5 项目中使用 php 7.4
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我发现了,问题出在以下几行:


'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'

],

现在可以了。


查看完整回答
反对 回复 2023-06-24
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

看起来这是已知问题: https ://github.com/phan/phan/issues/1757

在此 Github 问题中,他们建议使用 Phan 扩展:https://github.com/Drenso/PhanExtensions#annotationsymfonyannotationplugin

或者尝试使用 PHPStan 或 Psalm。


查看完整回答
反对 回复 2023-06-24
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信