071. 项目代码统计——wnx/laravel-stats
项目代码统计——wnx/laravel-stats
今天介绍的这个扩展包 github.com/stefanzweifel/laravel-s... 是用来做代码统计的,它可以帮助我们分析整个项目的每个功能使用了多少个类,方法,写了多少行等等,扩展包能直观的展示出代码的统计结果,方便我们发现问题,做接下来的代码优化。
安装
用一个相对完整的项目做代码统计可能会更加直观,这里使用 Larabbs 项目,其中的 API 分支中有完整的网站以及所有的接口代码,尝试着进行代码分析,先来安装一下。
$ git checkout -b stats
$ composer require "wnx/laravel-stats" --dev
发布配置文件:
$ php artisan vendor:publish --provider="Wnx\LaravelStats\StatsServiceProvider"
使用
使用起来很简单,扩展包提供了命令 stats
:
$ php artisan stats
看一下统计结果:
- Name —— 名称;
- Classes —— 类的数量;
- Methods —— 方法的数量;
- Lines —— 行数;
- LoC —— 逻辑所占的行数;
不是太好理解的是 LoC ,逻辑所占的行数,其实这里是利用了扩展包 PHPLoc ,某个 issue 中可以看到作者的回答,github.com/sebastianbergmann/phplo... ,其实只是大致统计了分号的数量.
命令还能传入参数格式化成 Json,php artisan stats --format=json
方便我们做其他的数据处理。
增加其他类的统计
统计的说明扩展包的文档中有写,注意某些类并没有统计到,可以自己注册:
$ mkdir app/Classifiers
$ touch app/Classifiers/TransformerClassifier.php
app/Classifiers/TransformerClassifier.php
<?php
namespace App\Classifiers;
use Wnx\LaravelStats\ReflectionClass;
use Wnx\LaravelStats\Contracts\Classifier;
use League\Fractal\TransformerAbstract;
class TransformerClassifier implements Classifier
{
public function getName()
{
return 'Transformer';
}
public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(TransformerAbstract::class);
}
}
再来统计一下 Api Controller 。
app/Classifiers/ApiControllerClassifier.php
<?php
namespace App\Classifiers;
use Wnx\LaravelStats\ReflectionClass;
use Wnx\LaravelStats\Contracts\Classifier;
use App\Http\Controllers\Api\Controller;
class ApiControllerClassifier implements Classifier
{
public function getName()
{
return 'ApiController';
}
public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(Controller::class);
}
}
代码版本控制
$ git add -A
$ git commit -m 'wnx/laravel-stats'