Skip to content

Commit 7e366e0

Browse files
committed
Tool to make optional parameters required across the codebase
1 parent c28ee25 commit 7e366e0

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

Diff for: bin/make-optional-parameters-required.php

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env php
2+
<?php declare(strict_types = 1);
3+
4+
use PhpParser\Node;
5+
use PhpParser\NodeTraverser;
6+
use PhpParser\NodeVisitor\CloningVisitor;
7+
use PhpParser\NodeVisitorAbstract;
8+
use PhpParser\ParserFactory;
9+
use PhpParser\PrettyPrinter\Standard;
10+
use Symfony\Component\Finder\Finder;
11+
12+
$dir = $argv[1];
13+
14+
if (!str_starts_with($dir, '/')) {
15+
$dir = getcwd() . '/' . $dir;
16+
}
17+
18+
(static function () use ($dir): void {
19+
require_once __DIR__ . '/../vendor/autoload.php';
20+
21+
$parser = (new ParserFactory())->createForHostVersion();
22+
$traverser = new NodeTraverser(new CloningVisitor());
23+
$printer = new Standard();
24+
$finder = new Finder();
25+
$finder->followLinks();
26+
27+
$removeParamDefaultTraverser = new NodeTraverser(new class () extends NodeVisitorAbstract {
28+
29+
public function enterNode(Node $node)
30+
{
31+
if (!$node instanceof Node\Param) {
32+
return null;
33+
}
34+
35+
$node->default = null;
36+
37+
return $node;
38+
}
39+
40+
});
41+
foreach ($finder->files()->name('*.php')->in($dir) as $fileInfo) {
42+
$oldStmts = $parser->parse(file_get_contents($fileInfo->getPathname()));
43+
$oldTokens = $parser->getTokens();
44+
45+
$newStmts = $traverser->traverse($oldStmts);
46+
$newStmts = $removeParamDefaultTraverser->traverse($newStmts);
47+
48+
$newCode = $printer->printFormatPreserving($newStmts, $oldStmts, $oldTokens);
49+
file_put_contents($fileInfo->getPathname(), $newCode);
50+
}
51+
})();

0 commit comments

Comments
 (0)