Skip to content

Commit e9554de

Browse files
committed
fix(DebugBarOutput): Improve Laravel DebugBar integration
- Refactor methods to use dynamic class resolution for Laravel DebugBar - Add support for both Fruitcake and Barryvdh versions of Laravel DebugBar - Update composer.json to require Fruitcake's Laravel DebugBar package - Enhance type hinting and add new methods for better class management
1 parent 6c13c6b commit e9554de

File tree

6 files changed

+55
-11
lines changed

6 files changed

+55
-11
lines changed

composer-dependency-analyser.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
/** @noinspection PhpUndefinedClassInspection */
4+
/** @noinspection PhpUndefinedNamespaceInspection */
35
declare(strict_types=1);
46

57
/**
@@ -11,6 +13,8 @@
1113
* @see https://github.com/guanguans/laravel-soar
1214
*/
1315

16+
use Fruitcake\LaravelDebugbar\LaravelDebugbar;
17+
use Fruitcake\LaravelDebugbar\ServiceProvider;
1418
use ShipMonk\ComposerDependencyAnalyser\Config\Configuration;
1519
use ShipMonk\ComposerDependencyAnalyser\Config\ErrorType;
1620

@@ -31,6 +35,10 @@
3135
],
3236
[ErrorType::SHADOW_DEPENDENCY]
3337
)
38+
->ignoreUnknownClasses([
39+
LaravelDebugbar::class,
40+
ServiceProvider::class,
41+
])
3442
->ignoreErrorsOnPackages(
3543
[
3644
'nesbot/carbon',
@@ -42,7 +50,7 @@
4250
[ErrorType::SHADOW_DEPENDENCY]
4351
)
4452
->ignoreErrorsOnPackageAndPath(
45-
'barryvdh/laravel-debugbar',
53+
'fruitcake/laravel-debugbar',
4654
__DIR__.'/src/Outputs/DebugBarOutput.php',
4755
[ErrorType::DEV_DEPENDENCY_IN_PROD]
4856
)

composer.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"ergebnis/php-cs-fixer-config": "^6.59",
7070
"ergebnis/phpstan-rules": "^2.13",
7171
"ergebnis/rector-rules": "^1.9",
72+
"fruitcake/laravel-debugbar": "^3.16 || ^4.0",
7273
"guanguans/php-cs-fixer-custom-fixers": "^1.1",
7374
"guanguans/phpstan-rules": "^1.0",
7475
"guanguans/rector-rules": "^1.6",
@@ -124,6 +125,7 @@
124125
"suggest": {
125126
"barryvdh/laravel-debugbar": "Output SQL scores to Laravel DebugBar.",
126127
"buggregator/trap": "Output SQL scores to Trap.",
128+
"fruitcake/laravel-debugbar": "Output SQL scores to Laravel DebugBar.",
127129
"itsgoingd/clockwork": "Output SQL scores to Clockwork.",
128130
"laradumps/laradumps": "Output SQL scores to Laradumps.",
129131
"laravel/telescope": "Output SQL scores to Telescope.",
@@ -301,7 +303,7 @@
301303
"$PHP82 vendor/bin/grumphp run --ansi -vv"
302304
],
303305
"jack": "@php vendor/bin/jack",
304-
"jack:breakpoint": "@jack breakpoint --limit=10",
306+
"jack:breakpoint": "@jack breakpoint --limit=11",
305307
"jack:breakpoint-dev": "@jack:breakpoint --dev",
306308
"jack:open-versions": "@jack open-versions --limit=99",
307309
"jack:open-versions-dev": "@jack:open-versions --dev",

phpstan.neon.dist

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ parameters:
177177
- '#^Call to an undefined static method Guanguans\\LaravelSoar\\Facades\\Soar\:\:get.*\(\)\.$#'
178178
- '#^Call to method label\(\) on an unknown class Spatie\\.*\\Ray\.$#'
179179
- '#^Function clock not found\.$#'
180+
-
181+
identifier: class.notFound
182+
path: src/Outputs/DebugBarOutput.php
180183
-
181184
identifier: symplify.explicitInterfaceSuffixName
182185
path: src/Contracts/

src/Outputs/DebugBarOutput.php

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<?php
22

3+
/** @noinspection PhpUndefinedClassInspection */
4+
/** @noinspection PhpUndefinedNamespaceInspection */
5+
36
declare(strict_types=1);
47

58
/**
@@ -14,6 +17,7 @@
1417
namespace Guanguans\LaravelSoar\Outputs;
1518

1619
use Barryvdh\Debugbar\LaravelDebugbar;
20+
use Barryvdh\Debugbar\ServiceProvider;
1721
use DebugBar\DataCollector\MessagesCollector;
1822
use Illuminate\Console\Events\CommandFinished;
1923
use Illuminate\Support\Collection;
@@ -31,9 +35,9 @@ public function __construct(
3135
*/
3236
public function shouldOutput(CommandFinished|Response $outputter): bool
3337
{
34-
return class_exists(LaravelDebugbar::class)
35-
&& app()->has(LaravelDebugbar::class)
36-
// && resolve(LaravelDebugbar::class)->isEnabled()
38+
return class_exists($this->laravelDebugbarClass())
39+
&& app()->has($this->laravelDebugbarClass())
40+
// && resolve($this->laravelDebugbarClass())->isEnabled()
3741
&& $this->isHtmlResponse($outputter);
3842
}
3943

@@ -43,11 +47,10 @@ public function shouldOutput(CommandFinished|Response $outputter): bool
4347
*
4448
* @noinspection PhpPossiblePolymorphicInvocationInspection
4549
*/
46-
public function output(Collection $scores, CommandFinished|Response $outputter): LaravelDebugbar
50+
public function output(Collection $scores, CommandFinished|Response $outputter): \Fruitcake\LaravelDebugbar\LaravelDebugbar|LaravelDebugbar
4751
{
48-
$debugBar = resolve(LaravelDebugbar::class);
49-
50-
\assert($debugBar instanceof LaravelDebugbar);
52+
$debugBar = resolve($this->laravelDebugbarClass());
53+
\assert($debugBar instanceof \Fruitcake\LaravelDebugbar\LaravelDebugbar || $debugBar instanceof LaravelDebugbar);
5154

5255
if (!$debugBar->hasCollector($this->name)) {
5356
$debugBar->addCollector(new MessagesCollector($this->name));
@@ -56,9 +59,27 @@ public function output(Collection $scores, CommandFinished|Response $outputter):
5659
$scores->each(fn (array $score) => $debugBar->getCollector($this->name)->addMessage(
5760
$this->hydrateScore($score),
5861
$this->label,
59-
false
62+
$this->laravelDebugbarClass() === LaravelDebugbar::class ? false : []
6063
));
6164

6265
return $debugBar;
6366
}
67+
68+
/**
69+
* @api
70+
*
71+
* @return class-string<\Fruitcake\LaravelDebugbar\ServiceProvider|ServiceProvider>
72+
*/
73+
public static function laravelDebugbarServiceProviderClass(): string
74+
{
75+
return class_exists($class = \Fruitcake\LaravelDebugbar\ServiceProvider::class) ? $class : ServiceProvider::class;
76+
}
77+
78+
/**
79+
* @return class-string<\Fruitcake\LaravelDebugbar\LaravelDebugbar|LaravelDebugbar>
80+
*/
81+
private function laravelDebugbarClass(): string
82+
{
83+
return class_exists($class = \Fruitcake\LaravelDebugbar\LaravelDebugbar::class) ? $class : LaravelDebugbar::class;
84+
}
6485
}

testbench.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ laravel: '@testbench'
22

33
providers:
44
- Workbench\App\Providers\WorkbenchServiceProvider
5-
- Barryvdh\Debugbar\ServiceProvider
5+
# - Barryvdh\Debugbar\ServiceProvider
6+
# - Fruitcake\LaravelDebugbar\ServiceProvider
67
- Clockwork\Support\Laravel\ClockworkServiceProvider
78
- Guanguans\LaravelSoar\SoarServiceProvider
89
- LaraDumps\LaraDumps\LaraDumpsServiceProvider

tests/TestCase.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
namespace Guanguans\LaravelSoarTests;
2626

2727
use Guanguans\LaravelSoar\Facades\Soar;
28+
use Guanguans\LaravelSoar\Outputs\DebugBarOutput;
2829
use Illuminate\Contracts\Config\Repository;
2930
use Illuminate\Foundation\Testing\Concerns\InteractsWithViews;
3031
use Illuminate\Foundation\Testing\DatabaseMigrations;
@@ -68,6 +69,14 @@ protected function getPackageAliases(mixed $app): array
6869
];
6970
}
7071

72+
protected function getPackageProviders(mixed $app): array
73+
{
74+
return [
75+
...parent::getPackageProviders($app),
76+
DebugBarOutput::laravelDebugbarServiceProviderClass(),
77+
];
78+
}
79+
7180
protected function defineEnvironment(mixed $app): void
7281
{
7382
tap($app->make(Repository::class), function (Repository $repository): void {

0 commit comments

Comments
 (0)