Giter Club home page Giter Club logo

phpinsights's Introduction

PHP Insights PHP Insights Preview

Unit Tests Total Downloads Latest Version License

For full documentation, visit phpinsights.com.

PHP Insights was carefully crafted to simplify the analysis of your code directly from your terminal, and is the perfect starting point to analyze the code quality of your PHP projects. It was created by Nuno Maduro, logo design Caneco, and currently is maintained by Chris Gmyr, Jibรฉ Barth, and Steve McDougall.

๐Ÿš€ Quick start

First, install:

composer require nunomaduro/phpinsights --dev

Then, use it:

./vendor/bin/phpinsights

For Laravel:

First, publish the configuration file:

php artisan vendor:publish --provider="NunoMaduro\PhpInsights\Application\Adapters\Laravel\InsightsServiceProvider"

Then, use it:

php artisan insights

โœจ Features

  • Analysis of code quality and coding style
  • Beautiful overview of code architecture and its complexity
  • Designed to work out-of-the-box with Laravel, Symfony, Yii, Magento, and more
  • Contains built-in checks for making code reliable, loosely coupled, simple, and clean

๐Ÿ’– Support the development

Do you like this project? Support it by donating

Click the "๐Ÿ’– Sponsor" at the top of this repo.

PHP Insights is open-sourced software licensed under the MIT license.

phpinsights's People

Contributors

50bhan avatar akosglue avatar allcontributors[bot] avatar bastien-phi avatar bu4ak avatar caneco avatar cmgmyr avatar garak avatar gummibeer avatar hdcore avatar helyakin avatar jibbarth avatar jochensengier avatar jonassiewertsen avatar juststeveking avatar killua99 avatar krisnaw avatar lancepioch avatar mikeerickson avatar mrmadclown avatar nunomaduro avatar ocrampete16 avatar olivernybroe avatar owenvoke avatar pluiesurlavitre avatar seriquynh avatar smokills avatar szepeviktor avatar tarlepp avatar tvbeek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

phpinsights's Issues

new Insight: Dirty Class Detector

/**
 * Dirty Class Detector.
 *
 * @package Dirtyclassdetector
 */

use PhpParser\Error;
use PhpParser\ParserFactory;
use PhpParser\Node;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitorAbstract;

require __DIR__.'/vendor/autoload.php';

$code = file_get_contents($argv[1]);

$hasSideEffect = false;

$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
try {
    $ast = $parser->parse($code);
} catch (Error $error) {
    echo "Parse error: {$error->getMessage()}\n";
    exit(1);
}

$cleaner = new NodeTraverser;
$cleaner->addVisitor(new class extends NodeVisitorAbstract {
    public function leaveNode(Node $node) {
        // TODO class+trait+interface count must be 1, declare count 0-1, group/use 0+
        if (
            $node instanceof Node\Stmt\Interface_
            || $node instanceof Node\Stmt\Trait_
            || $node instanceof Node\Stmt\Class_
            || $node instanceof Node\Stmt\Use_
            || $node instanceof Node\Stmt\GroupUse
            || $node instanceof Node\Stmt\Declare_
        ) {
            return NodeTraverser::REMOVE_NODE;
        }
    }
});
$cleaned = $cleaner->traverse($ast);

$detector = new NodeTraverser;
$detector->addVisitor(new class extends NodeVisitorAbstract {
    public function leaveNode(Node $node) {
        global $hasSideEffect;
        // TODO namespace 0-1, name 1 per namespace
        if ($node instanceof Node\Stmt\Namespace_ || $node instanceof Node\Name) {
            return;
        }
        echo "Side effect: {$node->getType()}\n";
        $hasSideEffect = true;
    }
});
$detector->traverse($cleaned);

if ($hasSideEffect) {
    exit(2);
}

Implement output-format option

People may want to see the results from PHP Insights within a beautiful html page, or may want to check the results using the json format.

All the classes from PHP Insights are internal, so we are able to refactor without making a breaking change.

Dockerized version

Hi :)

Just a quick heads up: i've created a dockerized version to more easily run this in CI / locally or wherever on any type of project so it can more easily help with (i.e.) transitioning code to newer PHP versions.

This also lowers the barrier of getting everything up and running to test it out :)

One can simply run docker run -v $(pwd):/app gekkie/phpinsights to get going

Composer issue, package require nette/utils

My composer.json do not have nette/utils or object-calisthenics/phpcs-calisthenics-rules dependency

Using version ^1.0 for nunomaduro/phpinsights
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for nette/utils (locked at v3.0.1) -> satisfiable by nette/utils[v3.0.1].
    - nunomaduro/phpinsights v1.0.0 requires object-calisthenics/phpcs-calisthenics-rules ^3.5 -> satisfiable by object-calisthenics/phpcs-calisthenics-rules[v3.5.0].
    - nunomaduro/phpinsights v1.0.1 requires object-calisthenics/phpcs-calisthenics-rules ^3.5 -> satisfiable by object-calisthenics/phpcs-calisthenics-rules[v3.5.0].
    - nunomaduro/phpinsights v1.0.2 requires object-calisthenics/phpcs-calisthenics-rules ^3.5 -> satisfiable by object-calisthenics/phpcs-calisthenics-rules[v3.5.0].
    - nunomaduro/phpinsights v1.0.3 requires object-calisthenics/phpcs-calisthenics-rules ^3.5 -> satisfiable by object-calisthenics/phpcs-calisthenics-rules[v3.5.0].
    - nunomaduro/phpinsights v1.0.4 requires object-calisthenics/phpcs-calisthenics-rules ^3.5 -> satisfiable by object-calisthenics/phpcs-calisthenics-rules[v3.5.0].
    - nunomaduro/phpinsights v1.0.5 requires object-calisthenics/phpcs-calisthenics-rules ^3.5 -> satisfiable by object-calisthenics/phpcs-calisthenics-rules[v3.5.0].
    - Conclusion: don't install object-calisthenics/phpcs-calisthenics-rules v3.5.0
    - Installation request for nunomaduro/phpinsights ^1.0 -> satisfiable by nunomaduro/phpinsights[v1.0.0, v1.0.1, v1.0.2, v1.0.3, v1.0.4, v1.0.5].

Installation failed, reverting ./composer.json to its original content.

[art] Add a logo/banner

If you are a designer and want to contribute to open source would be cool add a logo/banner to this website.

insights command hangs at 80%

Hi, I'm using the laravel preset on windows,
The command hangs at 80% (527/652 files?) with no log or error.

Could you let me know where in the code I could temporarily inject a log function that spits out the currently analyzed file/method?

Thank you

Wrong 'unused function parameter' issue

Hi, Nuno! Great package, congrats with release!
I think I found a minor bug when using compact() function in controllers in Laravel, here is the example from BlogPostController:

public function show(PublishedBlogPost $blogPost)
{
   return view('blog.post', compact('blogPost'));
}

Issue that insights give me:

[Code] Unused function parameter:
app/Http/Controllers/BlogPostController.php:28: The method parameter $blogPost is never used

Double checks?

I'm not sure if this is just a mistake or is it possible that some checks will be executed twice?

Checks like Nullable type for null default value or Useless parentheses

Undefined index: require

I have run phpinsights but I get the following error:

~/Sites/guapapp > php artisan insights

   ErrorException  : Undefined index: require

at /Users/kattatzu/Sites/guapapp/vendor/nunomaduro/phpinsights/src/Domain/Insights/Laravel/ComposerCheckLaravelVersion.php:28
    24|         } catch (RuntimeException $e) {
    25|             return true;
    26|         }
    27|
  > 28|         return strpos('5.8.*', $contents['require']['laravel/framework']) === false;
    29|     }
    30|
    31|     /**
    32|      * {@inheritdoc}

  Exception trace:

  1   Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Undefined index: require", "/Users/kattatzu/Sites/guapapp/vendor/nunomaduro/phpinsights/src/Domain/Insights/Laravel/ComposerCheckLaravelVersion.php", [])
      /Users/kattatzu/Sites/guapapp/vendor/nunomaduro/phpinsights/src/Domain/Insights/Laravel/ComposerCheckLaravelVersion.php:28

  2   NunoMaduro\PhpInsights\Domain\Insights\Laravel\ComposerCheckLaravelVersion::hasIssue()
      /Users/kattatzu/Sites/guapapp/vendor/nunomaduro/phpinsights/src/Application/Console/Helpers/Row.php:95

Please use the argument -v to see more details.

Packages defines global functions

I noticed that phpinsights defines global Laravel functions in your application. So if you've modified these functions to have different behavior etc, then yours fail because composer bootstraps packages first.

So, I can't use it basically.

Doesn't run when installed globally

I tried to install it globally using composer global require nunomaduro/phpinsights because I have dependency conflicts in my project (non-Laravel) that I wanted to try it on. When running, I get a ton of autoloader errors.

$ php ~/.config/composer/vendor/bin/phpinsights
PHP Warning:  include_once(vendor/squizlabs/php_codesniffer/autoload.php): failed to open stream: No such file or directory in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Kernel.php on line 22
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. NunoMaduro\PhpInsights\Domain\Kernel::bootstrap() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:18
PHP Warning:  include_once(): Failed opening 'vendor/squizlabs/php_codesniffer/autoload.php' for inclusion (include_path='.:/usr/share/php') in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Kernel.php on line 22
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. NunoMaduro\PhpInsights\Domain\Kernel::bootstrap() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:18
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 314
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 315
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 314
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 315
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 314
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 315
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 314
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 315
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 314
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Notice:  Uninitialized string offset: 1 in /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php on line 315
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. NunoMaduro\PhpInsights\Domain\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:58
PHP  13. NunoMaduro\PhpInsights\Domain\Analyser->analyseFile() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Analyser.php:55
PHP Fatal error:  Interface 'PHP_CodeSniffer\Sniffs\Sniff' not found in /home/francis/.config/composer/vendor/object-calisthenics/phpcs-calisthenics-rules/src/ObjectCalisthenics/Sniffs/Classes/ForbiddenPublicPropertySniff.php on line 11
PHP Stack trace:
PHP   1. {main}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:/home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() /home/francis/.config/composer/vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/francis/.config/composer/vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() /home/francis/.config/composer/vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() /home/francis/.config/composer/vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{/home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. array_map() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:79
PHP  13. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory::NunoMaduro\PhpInsights\Domain\Insights\{closure}() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:79
PHP  14. class_implements() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:70
PHP  15. spl_autoload_call() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:70
PHP  16. Composer\Autoload\ClassLoader->loadClass() /home/francis/.config/composer/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:70
PHP  17. Composer\Autoload\includeFile() /home/francis/.config/composer/vendor/composer/ClassLoader.php:322
PHP  18. include() /home/francis/.config/composer/vendor/composer/ClassLoader.php:444

Command will fail on models that contain only properties with inheritdoc comments

Running php artisan insights on a Laravel 5.8 app, I got the following error message
image
The command failed at this file

<?php

namespace App\Models\MasterData;

use App\Models\BaseModel;

class Organization extends BaseModel
{
    /**
     * {@inheritdoc}
     */
    public $timestamps = false;
}

I was able to confirm that:

  • the command will run successfully if I removed the inheritdoc comment.
  • the command will fail only if the model contains no methods, only properties. If the model has one or more methods then the command will run successfully

To reproduce, add the provided model code above to your application and try running the command.

Allow memory size exhausted.

This error pops up:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 33554440 bytes) in [projectfolder]/vendor/nunomaduro/phpinsights/src/Domain/Collector.php on line 349

Use of undefined constant ICONV_IMPL - assumed 'ICONV_IMPL'

I've just installed phpinsights with the composer require command, but when I run the binary a huge error comes out:

PHP Warning:  Use of undefined constant ICONV_IMPL - assumed 'ICONV_IMPL' (this will throw an Error in a future version of PHP) in ./vendor/nette/utils/src/Utils/Strings.php on line 171
PHP Stack trace:
PHP   1. {main}() ./vendor/nunomaduro/phpinsights/bin/phpinsights:0
PHP   2. {closure:./vendor/nunomaduro/phpinsights/bin/phpinsights:10-37}() ./vendor/nunomaduro/phpinsights/bin/phpinsights:37
PHP   3. Symfony\Component\Console\Application->run() ./vendor/nunomaduro/phpinsights/bin/phpinsights:36
PHP   4. Symfony\Component\Console\Application->doRun() ./vendor/symfony/console/Application.php:145
PHP   5. Symfony\Component\Console\Application->doRunCommand() ./vendor/symfony/console/Application.php:269
PHP   6. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->run() ./vendor/symfony/console/Application.php:908
PHP   7. NunoMaduro\PhpInsights\Application\Console\Commands\InvokableCommand->execute() ./vendor/symfony/console/Command/Command.php:255
PHP   8. call_user_func:{./vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39}() ./vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP   9. NunoMaduro\PhpInsights\Application\Console\Commands\AnalyseCommand->__invoke() ./vendor/nunomaduro/phpinsights/src/Application/Console/Commands/InvokableCommand.php:39
PHP  10. NunoMaduro\PhpInsights\Application\Console\Analyser->analyse() ./vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php:68
PHP  11. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory->get() ./vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php:43
PHP  12. array_map() ./vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:79
PHP  13. NunoMaduro\PhpInsights\Domain\Insights\InsightCollectionFactory::NunoMaduro\PhpInsights\Domain\Insights\{closure:./vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:69-79}() ./vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:79
PHP  14. NunoMaduro\PhpInsights\Domain\Insights\InsightFactory->makeFrom() ./vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:73
PHP  15. NunoMaduro\PhpInsights\Domain\Insights\InsightFactory->getSniffCollector() ./vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightFactory.php:71
PHP  16. League\Container\Container->get() ./vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightFactory.php:175
PHP  17. League\Container\Definition\DefinitionAggregate->resolve() ./vendor/league/container/src/Container.php:153
PHP  18. League\Container\Definition\Definition->resolve() ./vendor/league/container/src/Definition/DefinitionAggregate.php:94
PHP  19. League\Container\Definition\Definition->resolveCallable() ./vendor/league/container/src/Definition/Definition.php:196
PHP  20. call_user_func_array:{./vendor/league/container/src/Definition/Definition.php:233}() ./vendor/league/container/src/Definition/Definition.php:233
PHP  21. NunoMaduro\PhpInsights\Application\Injectors\FileProcessors::NunoMaduro\PhpInsights\Application\Injectors\{closure:./vendor/nunomaduro/phpinsights/src/Application/Injectors/FileProcessors.php:28-51}() ./vendor/league/container/src/Definition/Definition.php:233
PHP  22. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->get() ./vendor/nunomaduro/phpinsights/src/Application/Injectors/FileProcessors.php:31
PHP  23. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->make() ./vendor/symfony/dependency-injection/Container.php:225
PHP  24. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->load() ./vendor/symfony/dependency-injection/Container.php:243
PHP  25. require() /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php:174
PHP  26. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->load() /tmp/easy_coding_standard/ContainerXTmLt2g/getSniffFileProcessorService.php:9
PHP  27. require() /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php:174
PHP  28. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->load() /tmp/easy_coding_standard/ContainerXTmLt2g/getFileFactoryService.php:9
PHP  29. require() /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php:174
PHP  30. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->load() /tmp/easy_coding_standard/ContainerXTmLt2g/getErrorAndDiffCollectorService.php:9
PHP  31. require() /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php:174
PHP  32. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->load() /tmp/easy_coding_standard/ContainerXTmLt2g/getChangedFilesDetectorService.php:9
PHP  33. require() /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php:174
PHP  34. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->load() /tmp/easy_coding_standard/ContainerXTmLt2g/getTagAwareAdapterService.php:9
PHP  35. require() /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php:174
PHP  36. ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->load() /tmp/easy_coding_standard/ContainerXTmLt2g/getSimpleCacheAdapterService.php:9
PHP  37. require() /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php:174
PHP  38. Symplify\EasyCodingStandard\ChangedFilesDetector\Cache\Simple\FilesystemCacheFactory->create() /tmp/easy_coding_standard/ContainerXTmLt2g/getFilesystemCacheService.php:9
PHP  39. Nette\Utils\Strings::webalize() ./vendor/symplify/easy-coding-standard/packages/ChangedFilesDetector/src/Cache/Simple/FilesystemCacheFactory.php:22
PHP  40. Nette\Utils\Strings::toAscii() ./vendor/nette/utils/src/Utils/Strings.php:201
PHP Fatal error:  Uncaught Error: Call to undefined function Nette\Utils\iconv() in ./vendor/nette/utils/src/Utils/Strings.php:185
Stack trace:
#0 ./vendor/nette/utils/src/Utils/Strings.php(201): Nette\Utils\Strings::toAscii('/opt/lampp/htdo...')
#1 ./vendor/symplify/easy-coding-standard/packages/ChangedFilesDetector/src/Cache/Simple/FilesystemCacheFactory.php(22): Nette\Utils\Strings::webalize('/opt/lampp/htdo...')
#2 /tmp/easy_coding_standard/ContainerXTmLt2g/getFilesystemCacheService.php(9): Symplify\EasyCodingStandard\ChangedFilesDetector\Cache\Simple\FilesystemCacheFactory->create()
#3 /tmp/easy_coding_standard/ContainerXTmLt2g/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container.php(174): require('/tmp/easy_codin...')
#4 /tmp/easy_coding_standard/ContainerXTmLt2g/getSimpleCacheAdapterService.php(9): ContainerXTmLt2g\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd29074Container->l in ./vendor/nette/utils/src/Utils/Strings.php on line 185

I have a "vanilla" php project, with just some composer library.

Thank you for your help

Better readability

Make the results of code, complexity, architecture and style more readable. With the dark color, the results are hard to read.

Ignore specific files

Is there any way to ignore specific files/directories?

I want to exclude _ide_helper.php ๐Ÿ˜„

Usage in CI tools - implement exit status code

In order to add PHP Insights to CI tools, we should implement the exit status code from the console command. All the classes from PHP Insights are internal, so we are able to refactor without making a breaking change.

Would be cool to add the following options to the console commands or to the config file:

--min-quality, --min-complexity, --min-architecture, --min-style.

Some examples:

./vendor/bin/phpinsights
# Status code: 0
./vendor/bin/phpinsights --min-complexity=90
# With complexity 93.3 
# Status code: 0
./vendor/bin/phpinsights --min-complexity=90
# With complexity 88.3 
# Status code: 1

Return value of ...getCommentContent must be of the type string, boolean returned

Running against a relatively small Laravel 5.7 app:

$ php artisan insights
  96/126 [โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘]  76%
In EmptyCommentSniff.php line 153:

  Return value of SlevomatCodingStandard\Sniffs\Commenting\EmptyCommentSniff::getCommentContent() must be of the type string, boolean returned

Add optionally a description to an `Insight`

To solve this issue, you should create an interface called HasDescription, that can be added to an Insight. The goal: If an Insight contains the interface HasDescription, then we description somewhere why the Insight exists, why is bad, suggestion on how can be fixed; etc.

Directory is not set correctly in Win environment

If you try to run phpinsights in a Windows environment, it throws a Runtime Exception saying "The file composer.json must exist. You should run PHP Insights from the root of your project.".

Reason:
nunomaduro\phpinsights\src\Application\Console\Commands\AnalyseCommand.php:105

if ($directory[0] !== DIRECTORY_SEPARATOR) {

This check does obviously not work if $directoy is something like "C:\foldername\anotherfoldername", leading to a wrong concatenation in line 106.

Add JSON output

It could be used in CI.

E.g. alert on usage of global variables.

iconv(): Wrong charset, conversion from UTF-8 to ASCII//TRANSLIT//IGNORE is not allowed

When running Insights on my Laravel project, I get the following stack

[14-May-2019 11:33:45 UTC] [2019-05-14 11:33:45] testing.ERROR: iconv(): Wrong charset, conversion from `UTF-8' to `ASCII//TRANSLIT//IGNORE' is not allowed {"exception":"[object] (ErrorException(code: 0): iconv(): Wrong charset, conversion from `UTF-8' to `ASCII//TRANSLIT//IGNORE' is not allowed at /app/vendor/nette/utils/src/Utils/Strings.php:185)
[stacktrace]
#0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(8, 'iconv(): Wrong ...', '/app/vendor/net...', 185, Array)
#1 /app/vendor/nette/utils/src/Utils/Strings.php(185): iconv('UTF-8', 'ASCII//TRANSLIT...', '/app')
#2 /app/vendor/nette/utils/src/Utils/Strings.php(201): Nette\\Utils\\Strings::toAscii('/app')
#3 /app/vendor/symplify/easy-coding-standard/packages/ChangedFilesDetector/src/Cache/Simple/FilesystemCacheFactory.php(22): Nette\\Utils\\Strings::webalize('/app')
#4 /tmp/easy_coding_standard/ContainerDWVx86O/getFilesystemCacheService.php(9): Symplify\\EasyCodingStandard\\ChangedFilesDetector\\Cache\\Simple\\FilesystemCacheFactory->create()
#5 /tmp/easy_coding_standard/ContainerDWVx86O/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container.php(174): require('/tmp/easy_codin...')
#6 /tmp/easy_coding_standard/ContainerDWVx86O/getSimpleCacheAdapterService.php(9): ContainerDWVx86O\\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container->load('getFilesystemCa...')
#7 /tmp/easy_coding_standard/ContainerDWVx86O/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container.php(174): require('/tmp/easy_codin...')
#8 /tmp/easy_coding_standard/ContainerDWVx86O/getTagAwareAdapterService.php(9): ContainerDWVx86O\\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container->load('getSimpleCacheA...')
#9 /tmp/easy_coding_standard/ContainerDWVx86O/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container.php(174): require('/tmp/easy_codin...')
#10 /tmp/easy_coding_standard/ContainerDWVx86O/getChangedFilesDetectorService.php(9): ContainerDWVx86O\\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container->load('getTagAwareAdap...')
#11 /tmp/easy_coding_standard/ContainerDWVx86O/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container.php(174): require('/tmp/easy_codin...')
#12 /tmp/easy_coding_standard/ContainerDWVx86O/getErrorAndDiffCollectorService.php(9): ContainerDWVx86O\\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container->load('getChangedFiles...')
#13 /tmp/easy_coding_standard/ContainerDWVx86O/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container.php(174): require('/tmp/easy_codin...')
#14 /tmp/easy_coding_standard/ContainerDWVx86O/getFileFactoryService.php(9): ContainerDWVx86O\\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container->load('getErrorAndDiff...')
#15 /tmp/easy_coding_standard/ContainerDWVx86O/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container.php(174): require('/tmp/easy_codin...')
#16 /tmp/easy_coding_standard/ContainerDWVx86O/getSniffFileProcessorService.php(9): ContainerDWVx86O\\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container->load('getFileFactoryS...')
#17 /tmp/easy_coding_standard/ContainerDWVx86O/HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container.php(174): require('/tmp/easy_codin...')
#18 /app/vendor/symfony/dependency-injection/Container.php(243): ContainerDWVx86O\\HttpKernelSymplify_EasyCodingStandard_HttpKernel_EasyCodingStandardKernelProd19580Container->load('getSniffFilePro...')
#19 /app/vendor/symfony/dependency-injection/Container.php(225): Symfony\\Component\\DependencyInjection\\Container->make('Symplify\\\\EasyCo...', 1)
#20 /app/vendor/nunomaduro/phpinsights/src/Application/Injectors/FileProcessors.php(31): Symfony\\Component\\DependencyInjection\\Container->get('Symplify\\\\EasyCo...')
#21 [internal function]: NunoMaduro\\PhpInsights\\Application\\Injectors\\FileProcessors::NunoMaduro\\PhpInsights\\Application\\Injectors\\{closure}()
#22 /app/vendor/league/container/src/Definition/Definition.php(233): call_user_func_array(Object(Closure), Array)
#23 /app/vendor/league/container/src/Definition/Definition.php(196): League\\Container\\Definition\\Definition->resolveCallable(Object(Closure))
#24 /app/vendor/league/container/src/Definition/DefinitionAggregate.php(94): League\\Container\\Definition\\Definition->resolve(false)
#25 /app/vendor/league/container/src/Container.php(153): League\\Container\\Definition\\DefinitionAggregate->resolve('NunoMaduro\\\\PhpI...', false)
#26 /app/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightFactory.php(175): League\\Container\\Container->get('NunoMaduro\\\\PhpI...')
#27 /app/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightFactory.php(71): NunoMaduro\\PhpInsights\\Domain\\Insights\\InsightFactory->getSniffCollector(Array)
#28 /app/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php(74): NunoMaduro\\PhpInsights\\Domain\\Insights\\InsightFactory->makeFrom('ObjectCalisthen...', Array)
#29 [internal function]: NunoMaduro\\PhpInsights\\Domain\\Insights\\InsightCollectionFactory::NunoMaduro\\PhpInsights\\Domain\\Insights\\{closure}('ObjectCalisthen...')
#30 /app/vendor/nunomaduro/phpinsights/src/Domain/Insights/InsightCollectionFactory.php(79): array_map(Object(Closure), Array)
#31 /app/vendor/nunomaduro/phpinsights/src/Application/Console/Analyser.php(43): NunoMaduro\\PhpInsights\\Domain\\Insights\\InsightCollectionFactory->get(Array, Array, '/app')
#32 /app/vendor/nunomaduro/phpinsights/src/Application/Console/Commands/AnalyseCommand.php(68): NunoMaduro\\PhpInsights\\Application\\Console\\Analyser->analyse(Object(NunoMaduro\\PhpInsights\\Application\\Console\\Style), Array, '/app')
#33 /app/vendor/nunomaduro/phpinsights/src/Application/Adapters/Laravel/Commands/InsightsCommand.php(43): NunoMaduro\\PhpInsights\\Application\\Console\\Commands\\AnalyseCommand->__invoke(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#34 [internal function]: NunoMaduro\\PhpInsights\\Application\\Adapters\\Laravel\\Commands\\InsightsCommand->handle(Object(NunoMaduro\\PhpInsights\\Application\\Console\\Commands\\AnalyseCommand))
#35 /app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#36 /app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#37 /app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#38 /app/vendor/laravel/framework/src/Illuminate/Container/Container.php(572): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#39 /app/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): Illuminate\\Container\\Container->call(Array)
#40 /app/vendor/symfony/console/Command/Command.php(255): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#41 /app/vendor/laravel/framework/src/Illuminate/Console/Command.php(170): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#42 /app/vendor/symfony/console/Application.php(908): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#43 /app/vendor/symfony/console/Application.php(269): Symfony\\Component\\Console\\Application->doRunCommand(Object(NunoMaduro\\PhpInsights\\Application\\Adapters\\Laravel\\Commands\\InsightsCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#44 /app/vendor/symfony/console/Application.php(145): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#45 /app/vendor/laravel/framework/src/Illuminate/Console/Application.php(89): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#46 /app/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#47 /app/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#48 {main}
"}


In Strings.php line 185:

  iconv(): Wrong charset, conversion from `UTF-8' to `ASCII//TRANSLIT//IGNORE' is not allowed

I haven't figured out what's the root cause yet.

Missing docs on configure Insights in phpinsights.php

First of all: Great product!!

im trying to configure the phpinsights.php but missing docs on how to configure built in insights?

e.g. I dont want a space after NOT operator.
if (!in_array(...)) should be if (! in_array(...))

So docs on how to disable it.

Missing issue template

If you would like to contribute to PHP Insights, you can try to add the GitHub issue template.

Argument 2 passed to SlevomatCodingStandard\Sniffs\Operators\RequireOnlyStandaloneIncrementAndDecrementOperatorsSniff::isStandalone() must be of the type integer, null given

Hi, interesting looking tool.

I'm getting the following at around 70% on the first Laravel project I tried.

Argument 2 passed to SlevomatCodingStandard\Sniffs\Operators\RequireOnlyStandaloneIncrementAndDecrementOperatorsSniff::isStandalone() must be of the type integer, null given, called in /[project_path]/vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Operators/RequireOnlyStandaloneIncrementAndDecrementOperatorsSniff.php on line 68

Windows support

First of all, great work with the package ๐Ÿฅ‡

Just wanted to let you know that when running on windows (bash) the package doesn't work. It only works with Windows Linux subsystem

What doesn't work

$ php ./vendor/bin/phpinsights

dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../nunomaduro/phpinsights/bin" && pwd)

if [ -d /proc/cygdrive ]; then
    case $(which php) in
        $(readlink -n /proc/cygdrive)/*)
            # We are in Cygwin using Windows php, so the path must be translated
            dir=$(cygpath -m "$dir");
            ;;
    esac
fi

"${dir}/phpinsights" "$@"
$ php artisan insights

[2019-05-14 11:27:49] local.ERROR: The file `composer.json` must exist. You should run PHP Insights from the root of your project. {"exception":"[object] (RuntimeException(code: 0): The file `composer.json` must exist. You should run PHP Insights from the root of your project. at D:\\Code\\xxxxx\\vendor\
unomaduro\\phpinsights\\src\\Application\\Console\\Commands\\AnalyseCommand.php:64)
[stacktrace]
#0 D:\\Code\\xxxxx\\vendor\
unomaduro\\phpinsights\\src\\Application\\Adapters\\Laravel\\Commands\\InsightsCommand.php(43): NunoMaduro\\PhpInsights\\Application\\Console\\Commands\\AnalyseCommand->__invoke(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#1 [internal function]: NunoMaduro\\PhpInsights\\Application\\Adapters\\Laravel\\Commands\\InsightsCommand->handle(Object(NunoMaduro\\PhpInsights\\Application\\Console\\Commands\\AnalyseCommand))
#2 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\BoundMethod.php(32): call_user_func_array(Array, Array)
#3 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\BoundMethod.php(90): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#4 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\BoundMethod.php(34): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#5 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php(576): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#6 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Console\\Command.php(183): Illuminate\\Container\\Container->call(Array)
#7 D:\\Code\\xxxxx\\vendor\\symfony\\console\\Command\\Command.php(255): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#8 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Console\\Command.php(170): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#9 D:\\Code\\xxxxx\\vendor\\symfony\\console\\Application.php(908): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#10 D:\\Code\\xxxxx\\vendor\\symfony\\console\\Application.php(269): Symfony\\Component\\Console\\Application->doRunCommand(Object(NunoMaduro\\PhpInsights\\Application\\Adapters\\Laravel\\Commands\\InsightsCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#11 D:\\Code\\xxxxx\\vendor\\symfony\\console\\Application.php(145): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#12 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Console\\Application.php(90): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#13 D:\\Code\\xxxxx\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Console\\Kernel.php(122): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 D:\\Code\\xxxxx\\artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#15 {main}
"} 

Through Windows Linux Subsystem terminal:

$ php ./vendor/bin/phpinsights

//Same as first snippet

What works:

Through Windows Linux Subsystem terminal:

$ php artisan insights

//Works!

Posting it mostly as a reference for anyone else who have trouble getting it to work. (Not sure if windows are meant to be supported anyway ๐Ÿ˜„ )

Dependency version mismatch for Laravel 5.8.x - symfony/finder

Hi Nuno,

Laravel 5.8.x uses the version ^4.2 of symfony/finder.

But this package needs the 4.3.x-dev, giving the following requirements error:

image

Is there a reason to have this 4.3.x-dev version? If not, I would propose to downgrade to 4.2.x.

Thanks, and great work!
Bruno

Undefined offset: 0 | Fatal error: Uncaught TypeError: Argument 2 passed to SlevomatCodingStandard\Helpers\UseStatementHelper::getUseStatementPointers() must be of the type int, null given

Tried to run it on a Laravel app. Got this fatal error:

 605/910 [โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘]  66%PHP Notice:  Undefined offset: 0 in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php on line 147

Notice: Undefined offset: 0 in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php on line 147
PHP Fatal error:  Uncaught TypeError: Argument 2 passed to SlevomatCodingStandard\Helpers\UseStatementHelper::getUseStatementPointers() must be of the type int, null given, called in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php on line 149 and defined in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php:193
Stack trace:
#0 /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php(149): SlevomatCodingStandard\Helpers\UseStatementHelper::getUseStatementPointers(Object(NunoMaduro\PhpInsights\Domain\File), NULL)
#1 /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php(111): SlevomatCodingStandard\Helpers\UseStatementHelper::getFileUseStatements(Object(NunoMaduro\PhpInsights\Domain\File))
#2 /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/PHP/OptimizedFunctions in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php on line 193

Fatal error: Uncaught TypeError: Argument 2 passed to SlevomatCodingStandard\Helpers\UseStatementHelper::getUseStatementPointers() must be of the type int, null given, called in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php on line 149 and defined in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php:193
Stack trace:
#0 /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php(149): SlevomatCodingStandard\Helpers\UseStatementHelper::getUseStatementPointers(Object(NunoMaduro\PhpInsights\Domain\File), NULL)
#1 /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php(111): SlevomatCodingStandard\Helpers\UseStatementHelper::getFileUseStatements(Object(NunoMaduro\PhpInsights\Domain\File))
#2 /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/PHP/OptimizedFunctions in /Users/filipac/.composer/vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/UseStatementHelper.php on line 193

[Laravel] Support lower Laravel version then 5.7

Minimum Laravel version is currently 5.7 due to the requirement of symfony/console 4.2

Older Laravel versions use much older version (example: L5.1 LTS required 2.7.*)

This may not be the only dependency issue, but is as far as I got when attempting to install the package

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.