findNonWorkspaceDeps($path, $relative)); } return $errors; } /** @return list */ private function findNonWorkspaceDeps(string $path, string $relative): array { $errors = []; $currentSection = null; foreach (file($path) as $idx => $rawLine) { $stripped = trim($rawLine); if (preg_match('/\A\[([^\]]+)\]\z/', $stripped, $m)) { $currentSection = $m[1]; continue; } if ($currentSection === null || !in_array($currentSection, self::SECTION_NAMES, true)) { continue; } if ($stripped === '' || str_starts_with($stripped, '#')) { continue; } if (preg_match('/\A([A-Za-z0-9_-]+)\.workspace\s*=\s*true\b/', $stripped)) { continue; } if (preg_match('/\A([A-Za-z0-9_-]+)\s*=\s*\{(.+)\}\s*\z/', $stripped, $m)) { [, $name, $inner] = $m; if (preg_match('/\bworkspace\s*=\s*true\b/', $inner)) { continue; } $errors[] = "{$relative}:" . ($idx + 1) . ": `{$name}` does not use `workspace = true`"; continue; } if (preg_match('/\A([A-Za-z0-9_-]+)\s*=/', $stripped, $m)) { $errors[] = "{$relative}:" . ($idx + 1) . ": `{$m[1]}` does not use `workspace = true`"; } } return $errors; } }