mardi 4 août 2015

Extending Laravel 5.1 Mess Detection the right way

Laravel 5.1 has only one built-in hardcoded Mess Detection, it searches to see if @package tag is the same with /namespace, like so:

preg_match('/namespace\ ' . self::REQUIRED_NAMESPACE . '\\\(.*);/isU', $content, $namespace);
        preg_match('/\/*( )+@package\ (.*)[\r?\n]/isU', $content, $package);

        if (!isset($namespace[1]) || empty($namespace[1])) {
            continue;
        }

I want to extend this to add multiple detection classes. My folder structure currently looks like this:

Helpers >
    Commands >
        MessDetector >
            Detector >
                DetectorInterface.php
                DetectorAbstract.php
            PackageTagDetector.php
        MessDetector.php

The file MessDetector is made as an Artisan Command, that means it extends \Illuminate\Console\Command

I have a config file called mess_detection.php which has the detection rules like so:

return [
    'rules' => [
        '\Helpers\Commands\MessDetector\PackageTagDetector' =>
            [
                'rule' => '/\/*( )+@package\ (.*)[\r?\n]/isU',
                'path' => app_path(),
                'info' => 'Checking for @package tag',
                'error'=> 'Malformed or missing package tag'
            ]
        ]
    ];

But got stuck with figuring out how exactly to instantiate PackageTagDetector class in MessDetector class.

Any ideas design pattern wise?

Aucun commentaire:

Enregistrer un commentaire