insolita/yii2-codestat

受 Laravel Stats 启发的代码使用统计

安装: 159

依赖: 0

建议者: 0

安全: 0

星标: 34

关注者: 4

分支: 1

开放问题: 0

类型:yii2-extension

2.0.2 2019-05-04 22:19 UTC

README

Build Status Scrutinizer Code Quality SensioLabsInsight

screenshot

基于 phploc/phploc

安装

运行以下命令之一

composer require --dev insolita/yii2-codestat:~2.0

或者在你的 composer.json 文件的 require-dev 部分添加以下内容:

"insolita/yii2-codestat": "~2.0"

基本用法

在控制台配置文件中,在 modules 部分添加

php
'modules'=>[
 ....
        'codestat'=>[
            'class'=>\insolita\codestat\CodeStatModule::class,
            'scanTargets' => ['@backend/','@common/','@frontend/','@console/'],
            'exceptTargets' => ['*config*','vendor*','*web/','*runtime/','*views/','*tests/'],
        ]
    ],

scanTargets - 将要递归扫描的路径或路径别名数组 exceptTargets - 要排除的路径模式数组

运行以下命令以检查将要处理的文件完整列表:

./yii codestat/default/list-files

运行以下命令以输出统计摘要:

./yii codestat

运行以下命令以输出带有显示不良解析文件的统计摘要:

./yii codestat 1

显示每个定义的组的完整 phploc 报告

./yii codestat/default/advanced 
./yii codestat/default/advanced WebControllers
./yii codestat/default/advanced WebControllers,RestControllers,ConsoleControllers

显示所有匹配文件的完整 phploc 报告

./yii codestat/default/common

显示自定义目录的完整 phploc 报告

./yii codestat/default/directory @common/models

显示自定义文件的完整 phploc 报告

./yii codestat/default/file @common/lib/MySuperClass.php

列出可用的指标及其代码

./yii codestat/default/list-metrics

高级用法

自定义类分组规则

您可以通过支持格式扩展或覆盖属性 'groupRules'

'分组名称' => '基础父类'

其中 '基础父类' 应通过 (\ReflectionClass)->isSubclassOf() 进行验证

或者

'Group Name' => function(\ReflectionClass $reflection){
       //Should return true if class valid for this group, otherwise false;
  }

最终示例

php
'modules'=>[
 ....
        'codestat'=>[
            'class'=>\insolita\codestat\CodeStatModule::class,
             'groupRules' => [
                                'Jobs' => 'yii\queue\JobInterface',
                                'Handlers' => 'trntv\bus\interfaces\Handler::class',
                                'DTO' => function (\ReflectionClass $reflection) {
                                     return mb_strpos($reflection->getFileName(), 'Dto')!==false;
                                },
                                'All Tests' => function (\ReflectionClass $reflection) {
                                    return $reflection->isSubclassOf('\Codeception\Test\Unit')
                                        || StringHelper::endsWith($reflection->getName(), 'Cest');
                                },
                            ] + CodeStatModule::defaultRules(),
                    ],
        ]
    ],

重要! 列表中规则的顺序很重要,基础类 (\yii\base\Component 和 \yii\base\Object) 应位于列表末尾!

自定义代码指标

https://github.com/sebastianbergmann/phploc 提供的代码指标有很多变体,您可以定义自己的组合

对于 advanced/common/directory/file 动作,您应设置 metrics 属性为包含必要指标名称的数组

php
'modules'=>[
 ....
        'codestat'=>[
            'class'=>\insolita\codestat\CodeStatModule::class,
            'metrics'=>['loc','lloc','classCcnAvg', 'classLlocAvg', 'methodCcnAvg']
            ]
 ]

对于 summary 动作,您应在模块中提供属性 'analyseCallback',如下所示:

    'analyseCallback = function($group){
               /**@var insolita\codestat\lib\collection\Group $group **/
               $metrics=$customAnalyzer->analyze($group->getFiles());
               return ['totalFiles'=>count($group->getFiles()),  'metric1'=>$metrics[some], ...etc];
     }

它应返回包含 'metric name' => 'metric value' 数据的关联数组,并将替换内部 https://github .com/Insolita/yii2-codestat/blob/7d0fc3351718b2052624ea091ff8f154fe471aeb/src/lib/CodestatService.php#L154

以及表格摘要约定 - 如果指标名称包含斜杠 "/",则汇总行将计算平均值,否则求和