071. 项目代码统计——wnx/laravel-stats

项目代码统计——wnx/laravel-stats

今天介绍的这个扩展包 https://github.com/stefanzweifel/laravel-s... 是用来做代码统计的,它可以帮助我们分析整个项目的每个功能使用了多少个类,方法,写了多少行等等,扩展包能直观的展示出代码的统计结果,方便我们发现问题,做接下来的代码优化。

安装

用一个相对完整的项目做代码统计可能会更加直观,这里使用 Larabbs 项目,其中的 API 分支中有完整的网站以及所有的接口代码,尝试着进行代码分析,先来安装一下。

$ git checkout -b stats
$ composer require "wnx/laravel-stats" --dev

file

发布配置文件:

$ php artisan vendor:publish --provider="Wnx\LaravelStats\StatsServiceProvider"

file

使用

使用起来很简单,扩展包提供了命令 stats

$ php artisan stats

file

看一下统计结果:

  • Name —— 名称;
  • Classes —— 类的数量;
  • Methods —— 方法的数量;
  • Lines —— 行数;
  • LoC —— 逻辑所占的行数;

不是太好理解的是 LoC ,逻辑所占的行数,其实这里是利用了扩展包 PHPLoc ,某个 issue 中可以看到作者的回答,https://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);
    }
}

file

再来统计一下 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);
    }
}

file

代码版本控制

$ git add -A
$ git commit -m 'wnx/laravel-stats'

本文章首发在 LearnKu.com 网站上。
上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
发起讨论 只看当前版本


暂无话题~