$files */ $files = collect($directories) ->filter(fn (string $dir): bool => is_dir($dir)) ->flatMap(function (string $dir): array { $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS) ); $paths = []; foreach ($iterator as $file) { if (! $file->isFile() || $file->getExtension() !== 'php') { continue; } $paths[] = $file->getPathname(); } return $paths; }) ->values(); $hits = []; foreach ($files as $path) { $contents = file_get_contents($path); if (! is_string($contents) || $contents === '') { continue; } foreach ($forbiddenPatterns as $pattern) { if (! preg_match($pattern, $contents, $matches, PREG_OFFSET_CAPTURE)) { continue; } $offset = (int) ($matches[0][1] ?? 0); $lineNumber = substr_count(substr($contents, 0, $offset), "\n") + 1; $excerpt = trim((string) ($matches[0][0] ?? '')); $hits[] = str_replace($root.'/', '', $path).':'.$lineNumber.' -> '.str($excerpt)->limit(160)->value(); } } expect($hits)->toBeEmpty('Found legacy-to-canonical backfill patterns:\n'.implode("\n", $hits)); });