From 32cb11a39f72726060ae12deca7b62137ec73a77 Mon Sep 17 00:00:00 2001 From: provokateurin Date: Sat, 14 Sep 2024 21:31:01 +0200 Subject: [PATCH] build: Add script to fix strict-types Signed-off-by: provokateurin --- build/fix-strict-types.php | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 build/fix-strict-types.php diff --git a/build/fix-strict-types.php b/build/fix-strict-types.php new file mode 100755 index 0000000000000..5d1a10e7a4416 --- /dev/null +++ b/build/fix-strict-types.php @@ -0,0 +1,56 @@ +#!/usr/bin/env php +createForHostVersion(); + +$nodeTraverser = new NodeTraverser(); +$nodeTraverser->addVisitor(new CloningVisitor()); +$nodeTraverser->addVisitor(new NameResolver()); + +$prettyPrinter = new PrettyPrinter\Standard(); + +$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('lib')); + +/** @var SplFileInfo $info */ +foreach ($iterator as $info) { + if ($info->getType() !== 'file' || $info->getExtension() !== 'php') { + continue; + } + + error_log($info->getRealPath()); + + $code = file_get_contents($info->getRealPath()); + $oldStmts = $parser->parse($code); + $oldTokens = $parser->getTokens(); + $newStmts = $nodeTraverser->traverse($oldStmts); + + $hasStrictTypes = false; + foreach ($newStmts as $stmt) { + if ($stmt instanceof Declare_) { + $hasStrictTypes = true; + break; + } + } + + if (!$hasStrictTypes) { + array_unshift($newStmts, new Declare_([new DeclareItem('strict_types', new PhpParser\Node\Scalar\Int_(1))])); + file_put_contents($info->getRealPath(), $prettyPrinter->printFormatPreserving($newStmts, $oldStmts, $oldTokens)); + } +}