Skip to content

Commit 0415822

Browse files
authored
Merge pull request #11 from chrisdicarlo/use-config-directly
Refactor to check config directly
2 parents 16455de + f1c1e99 commit 0415822

File tree

4 files changed

+148
-41
lines changed

4 files changed

+148
-41
lines changed

src/Commands/LaravelConfigCheckerCommand.php

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use ChrisDiCarlo\LaravelConfigChecker\Resolvers\BladeFileResolver;
88
use ChrisDiCarlo\LaravelConfigChecker\Resolvers\PhpFileResolver;
99
use ChrisDiCarlo\LaravelConfigChecker\Support\FileChecker;
10-
use ChrisDiCarlo\LaravelConfigChecker\Support\LoadConfigKeys;
1110
use Illuminate\Console\Command;
1211
use Illuminate\Support\Collection;
1312

@@ -26,8 +25,6 @@ class LaravelConfigCheckerCommand extends Command
2625

2726
public $description = 'Check all references to config values in PHP and Blade files';
2827

29-
private Collection $configKeys;
30-
3128
private array $bladeIssues = [];
3229

3330
private array $phpIssues = [];
@@ -41,12 +38,9 @@ public function getIssues(): Collection
4138
}
4239

4340
public function handle(
44-
LoadConfigKeys $loadConfigKeys,
4541
PhpFileResolver $phpFiles,
4642
BladeFileResolver $bladeFiles
4743
): int {
48-
$this->configKeys = $loadConfigKeys();
49-
5044
if ($this->option('no-progress')) {
5145
intro('--no-progress option used. Disabling progress bar.');
5246

@@ -57,7 +51,7 @@ public function handle(
5751
foreach ($phpFiles as $file) {
5852
$content = file_get_contents($file->getRealPath());
5953

60-
$fileChecker = new FileChecker($this->configKeys, $content);
54+
$fileChecker = new FileChecker($content);
6155

6256
foreach ($fileChecker->check() as $issue) {
6357
$this->phpIssues[$file->getRelativePathname()][] = $issue;
@@ -70,7 +64,7 @@ public function handle(
7064
$bladeFiles = $bladeFiles->resolve();
7165
foreach ($bladeFiles as $file) {
7266
$content = file_get_contents($file->getRealPath());
73-
$fileChecker = new FileChecker($this->configKeys, $content);
67+
$fileChecker = new FileChecker($content);
7468

7569
foreach ($fileChecker->check() as $issue) {
7670
$this->bladeIssues[$file->getRelativePathname()][] = $issue;
@@ -87,7 +81,7 @@ public function handle(
8781

8882
$content = file_get_contents($file->getRealPath());
8983

90-
$fileChecker = new FileChecker($this->configKeys, $content);
84+
$fileChecker = new FileChecker($content);
9185

9286
foreach ($fileChecker->check() as $issue) {
9387
$this->phpIssues[$file->getRelativePathname()][] = $issue;
@@ -104,7 +98,7 @@ public function handle(
10498
$progress->hint = "Checking {$file->getRelativePathname()}";
10599

106100
$content = file_get_contents($file->getRealPath());
107-
$fileChecker = new FileChecker($this->configKeys, $content);
101+
$fileChecker = new FileChecker($content);
108102

109103
foreach ($fileChecker->check() as $issue) {
110104
$this->bladeIssues[$file->getRelativePathname()][] = $issue;

src/Support/FileChecker.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
namespace ChrisDiCarlo\LaravelConfigChecker\Support;
66

77
use Illuminate\Support\Collection;
8+
use Illuminate\Support\Facades\Config;
89

910
class FileChecker
1011
{
1112
public function __construct(
12-
private readonly Collection $configKeys,
1313
private readonly string $content,
1414
) {}
1515

@@ -46,7 +46,7 @@ private function checkForFacadeUsage(string $content): array
4646
$offset = (int) $match[1];
4747
$lineNumber = substr_count(substr($content, 0, $offset), "\n") + 1;
4848

49-
if ($this->configKeys->doesntContain($key)) {
49+
if (! Config::has($key)) {
5050
$issues[] = [
5151
'key' => $key,
5252
'type' => sprintf('Config::%s()', $matches[1][$index][0]),
@@ -71,7 +71,7 @@ private function checkForHelperUsage(string $content): array
7171
$offset = (int) $match[1];
7272
$lineNumber = substr_count(substr($content, 0, $offset), "\n") + 1;
7373

74-
if ($this->configKeys->doesntContain($key)) {
74+
if (! Config::has($key)) {
7575
$issues[] = [
7676
'key' => $key,
7777
'type' => 'config()',

tests/FileCheckerTest.php

Lines changed: 115 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
use ChrisDiCarlo\LaravelConfigChecker\Support\FileChecker;
66
use ChrisDiCarlo\LaravelConfigChecker\Support\FileCheckInfo;
77
use Illuminate\Support\Collection;
8+
use Illuminate\Support\Facades\Config;
89

910
beforeEach(function () {
10-
$this->configKeys = collect([
11-
'file',
12-
'file.valid_key',
13-
'file.nested',
14-
'file.nested.key',
11+
Config::set('file', [
12+
'valid_key' => 'value',
13+
'nested' => [
14+
'key' => 'value',
15+
],
1516
]);
1617
});
1718
it('returns a collection of FileCheckInfo objects', function () {
@@ -20,7 +21,7 @@
2021
Config::get("invalid_key");
2122
PHP;
2223

23-
$fileChecker = new FileChecker($this->configKeys, $content);
24+
$fileChecker = new FileChecker($content);
2425

2526
$issues = $fileChecker->check();
2627

@@ -34,7 +35,7 @@
3435
echo "Hello, World!";
3536
PHP;
3637

37-
$fileChecker = new FileChecker($this->configKeys, $content);
38+
$fileChecker = new FileChecker($content);
3839

3940
$issues = $fileChecker->check();
4041

@@ -44,7 +45,7 @@
4445
{{ "Hello, World!" }}
4546
BLADE;
4647

47-
$fileChecker = new FileChecker($this->configKeys, $content);
48+
$fileChecker = new FileChecker($content);
4849

4950
$issues = $fileChecker->check();
5051

@@ -59,7 +60,7 @@
5960
config("file.valid_key");
6061
PHP;
6162

62-
$fileChecker = new FileChecker($this->configKeys, $content);
63+
$fileChecker = new FileChecker($content);
6364

6465
$issues = $fileChecker->check();
6566

@@ -71,7 +72,7 @@
7172
{{ config("file.valid_key") }}
7273
BLADE;
7374

74-
$fileChecker = new FileChecker($this->configKeys, $content);
75+
$fileChecker = new FileChecker($content);
7576

7677
$issues = $fileChecker->check();
7778

@@ -89,7 +90,7 @@
8990
config("file.valid_key");
9091
PHP;
9192

92-
$fileChecker = new FileChecker($this->configKeys, $content);
93+
$fileChecker = new FileChecker($content);
9394

9495
$issues = $fileChecker->check();
9596

@@ -117,7 +118,7 @@
117118
{{ config("file.valid_key") }}
118119
BLADE;
119120

120-
$fileChecker = new FileChecker($this->configKeys, $content);
121+
$fileChecker = new FileChecker($content);
121122

122123
$issues = $fileChecker->check();
123124

@@ -140,7 +141,7 @@
140141
it('handles empty content gracefully', function () {
141142
$content = '';
142143

143-
$fileChecker = new FileChecker($this->configKeys, $content);
144+
$fileChecker = new FileChecker($content);
144145

145146
$issues = $fileChecker->check();
146147

@@ -158,12 +159,34 @@
158159
config("file.valid_key");
159160
PHP;
160161

161-
$fileChecker = new FileChecker($this->configKeys, $content);
162+
$fileChecker = new FileChecker($content);
162163

163164
$issues = $fileChecker->check();
164165

165-
expect($issues->contains('key', 'file.valid_key'))->toBeFalse();
166-
expect($issues->contains('key', 'file.invalid_key'))->toBeTrue();
166+
expect($issues->contains(function ($issue) {
167+
return $issue->key === 'file.invalid_key' &&
168+
$issue->type === 'Config::get()';
169+
}))->toBeTrue();
170+
expect($issues->contains(function ($issue) {
171+
return $issue->key === 'file.invalid_key' &&
172+
$issue->type === 'Config::has()';
173+
}))->toBeTrue();
174+
expect($issues->contains(function ($issue) {
175+
return $issue->key === 'file.invalid_key' &&
176+
$issue->type === 'config()';
177+
}))->toBeTrue();
178+
expect($issues->contains(function ($issue) {
179+
return $issue->key === 'file.valid_key' &&
180+
$issue->type === 'Config::get()';
181+
}))->toBeFalse();
182+
expect($issues->contains(function ($issue) {
183+
return $issue->key === 'file.valid_key' &&
184+
$issue->type === 'Config::has()';
185+
}))->toBeFalse();
186+
expect($issues->contains(function ($issue) {
187+
return $issue->key === 'file.valid_key' &&
188+
$issue->type === 'config()';
189+
}))->toBeFalse();
167190

168191
$content = <<<'BLADE'
169192
{{ Config::get("file.invalid_key") }}
@@ -174,12 +197,34 @@
174197
{{ config("file.valid_key") }}
175198
BLADE;
176199

177-
$fileChecker = new FileChecker($this->configKeys, $content);
200+
$fileChecker = new FileChecker($content);
178201

179202
$issues = $fileChecker->check();
180203

181-
expect($issues->contains('key', 'file.valid_key'))->toBeFalse();
182-
expect($issues->contains('key', 'file.invalid_key'))->toBeTrue();
204+
expect($issues->contains(function ($issue) {
205+
return $issue->key === 'file.invalid_key' &&
206+
$issue->type === 'Config::get()';
207+
}))->toBeTrue();
208+
expect($issues->contains(function ($issue) {
209+
return $issue->key === 'file.invalid_key' &&
210+
$issue->type === 'Config::has()';
211+
}))->toBeTrue();
212+
expect($issues->contains(function ($issue) {
213+
return $issue->key === 'file.invalid_key' &&
214+
$issue->type === 'config()';
215+
}))->toBeTrue();
216+
expect($issues->contains(function ($issue) {
217+
return $issue->key === 'file.valid_key' &&
218+
$issue->type === 'Config::get()';
219+
}))->toBeFalse();
220+
expect($issues->contains(function ($issue) {
221+
return $issue->key === 'file.valid_key' &&
222+
$issue->type === 'Config::has()';
223+
}))->toBeFalse();
224+
expect($issues->contains(function ($issue) {
225+
return $issue->key === 'file.valid_key' &&
226+
$issue->type === 'config()';
227+
}))->toBeFalse();
183228
});
184229

185230
it('detects issues for invalid nested keys', function () {
@@ -193,12 +238,34 @@
193238
config("file.valid_key");
194239
PHP;
195240

196-
$fileChecker = new FileChecker($this->configKeys, $content);
241+
$fileChecker = new FileChecker($content);
197242

198243
$issues = $fileChecker->check();
199244

200-
expect($issues->contains('key', 'file.valid_key'))->toBeFalse();
201-
expect($issues->contains('key', 'file.nested.invalid_key'))->toBeTrue();
245+
expect($issues->contains(function ($issue) {
246+
return $issue->key === 'file.nested.invalid_key' &&
247+
$issue->type === 'Config::get()';
248+
}))->toBeTrue();
249+
expect($issues->contains(function ($issue) {
250+
return $issue->key === 'file.nested.invalid_key' &&
251+
$issue->type === 'Config::has()';
252+
}))->toBeTrue();
253+
expect($issues->contains(function ($issue) {
254+
return $issue->key === 'file.nested.invalid_key' &&
255+
$issue->type === 'config()';
256+
}))->toBeTrue();
257+
expect($issues->contains(function ($issue) {
258+
return $issue->key === 'file.valid_key' &&
259+
$issue->type === 'Config::get()';
260+
}))->toBeFalse();
261+
expect($issues->contains(function ($issue) {
262+
return $issue->key === 'file.valid_key' &&
263+
$issue->type === 'Config::has()';
264+
}))->toBeFalse();
265+
expect($issues->contains(function ($issue) {
266+
return $issue->key === 'file.valid_key' &&
267+
$issue->type === 'config()';
268+
}))->toBeFalse();
202269

203270
$content = <<<'BLADE'
204271
{{ Config::get("file.nested.invalid_key") }}
@@ -209,12 +276,34 @@
209276
{{ config("file.valid_key") }}
210277
BLADE;
211278

212-
$fileChecker = new FileChecker($this->configKeys, $content);
279+
$fileChecker = new FileChecker($content);
213280

214281
$issues = $fileChecker->check();
215282

216-
expect($issues->contains('key', 'file.valid_key'))->toBeFalse();
217-
expect($issues->contains('key', 'file.nested.invalid_key'))->toBeTrue();
283+
expect($issues->contains(function ($issue) {
284+
return $issue->key === 'file.nested.invalid_key' &&
285+
$issue->type === 'Config::get()';
286+
}))->toBeTrue();
287+
expect($issues->contains(function ($issue) {
288+
return $issue->key === 'file.nested.invalid_key' &&
289+
$issue->type === 'Config::has()';
290+
}))->toBeTrue();
291+
expect($issues->contains(function ($issue) {
292+
return $issue->key === 'file.nested.invalid_key' &&
293+
$issue->type === 'config()';
294+
}))->toBeTrue();
295+
expect($issues->contains(function ($issue) {
296+
return $issue->key === 'file.valid_key' &&
297+
$issue->type === 'Config::get()';
298+
}))->toBeFalse();
299+
expect($issues->contains(function ($issue) {
300+
return $issue->key === 'file.valid_key' &&
301+
$issue->type === 'Config::has()';
302+
}))->toBeFalse();
303+
expect($issues->contains(function ($issue) {
304+
return $issue->key === 'file.valid_key' &&
305+
$issue->type === 'config()';
306+
}))->toBeFalse();
218307
});
219308

220309
it('ignores methods called config', function () {
@@ -227,7 +316,7 @@
227316
Config::get('some.other.invalid.key');
228317
PHP;
229318

230-
$fileChecker = new FileChecker($this->configKeys, $content);
319+
$fileChecker = new FileChecker($content);
231320

232321
$issues = $fileChecker->check();
233322

0 commit comments

Comments
 (0)