aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-php-rpc/php/stubs/Composer/Repository
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-04 05:09:04 +0900
committernsfisis <nsfisis@gmail.com>2026-08-04 05:43:32 +0900
commit80631930a6ca7b64d96a89de61c8b63f302161a8 (patch)
treedc5acf4a8dbe74b576ec7826206defa0e3f8fba1 /crates/shirabe-php-rpc/php/stubs/Composer/Repository
parent850b67c048bbf80d9739520d950f4dd1ed4190a5 (diff)
downloadphp-shirabe-80631930a6ca7b64d96a89de61c8b63f302161a8.tar.gz
php-shirabe-80631930a6ca7b64d96a89de61c8b63f302161a8.tar.zst
php-shirabe-80631930a6ca7b64d96a89de61c8b63f302161a8.zip
feat(plugin): generate proxy stubs for the package and repository graph
Emit the eleven stubs a subscriber plugin's object-graph calls reach (BasePackage through RootPackage, the installed-repository hierarchy, RepositoryManager, InstallationManager). The generator learns the member kinds these classes need: builtin interfaces contribute no closure entries, public static properties are materialized, public instance properties forward through __get/__set, __toString forwards like a plain method, __clone throws (proxy clone semantics are still an open design question), and a subclass stub may add interfaces to its inherited surface. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-php-rpc/php/stubs/Composer/Repository')
-rw-r--r--crates/shirabe-php-rpc/php/stubs/Composer/Repository/ArrayRepository.php99
-rw-r--r--crates/shirabe-php-rpc/php/stubs/Composer/Repository/FilesystemRepository.php34
-rw-r--r--crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledArrayRepository.php14
-rw-r--r--crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledFilesystemRepository.php14
-rw-r--r--crates/shirabe-php-rpc/php/stubs/Composer/Repository/RepositoryManager.php89
-rw-r--r--crates/shirabe-php-rpc/php/stubs/Composer/Repository/WritableArrayRepository.php41
6 files changed, 291 insertions, 0 deletions
diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Repository/ArrayRepository.php b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/ArrayRepository.php
new file mode 100644
index 00000000..33454fa2
--- /dev/null
+++ b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/ArrayRepository.php
@@ -0,0 +1,99 @@
+<?php
+
+// Generated by scripts/plugin-stub-generator; do not edit by hand.
+// Proxy stub for Composer\Repository\ArrayRepository: the public surface forwards to the Rust-side entity over RPC.
+
+namespace Composer\Repository;
+
+use Composer\Package\PackageInterface;
+
+class ArrayRepository implements RepositoryInterface, \ShirabeRustStub
+{
+ /** @var int */
+ protected $__rhandle;
+ /** @var int */
+ protected $__epoch;
+
+ public function __construct(int $rhandle = 0, int $epoch = 0)
+ {
+ if (func_num_args() < 2) {
+ // Constructing the class from plugin code (a common idiom for e.g. `new BufferIO()`)
+ // is an open question of the plugin design; only proxy instantiation passes a
+ // Rust handle. Fail with a diagnosable message instead of an ArgumentCountError.
+ throw new \RuntimeException(
+ 'Shirabe does not support constructing ' . static::class . ' inside the plugin process yet'
+ );
+ }
+ $this->__rhandle = $rhandle;
+ $this->__epoch = $epoch;
+ }
+
+ public function __destruct()
+ {
+ \ShirabeRustObjectRegistry::release($this->__rhandle);
+ }
+
+ public function __shirabeRustHandleDescriptor(): array
+ {
+ return [
+ '__rhandle' => $this->__rhandle,
+ '__class' => static::class,
+ '__epoch' => $this->__epoch,
+ ];
+ }
+
+ public function hasPackage(PackageInterface $package)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'hasPackage', [$package]);
+ }
+
+ public function findPackage(string $name, $constraint)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'findPackage', [$name, $constraint]);
+ }
+
+ public function findPackages(string $name, $constraint = null)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'findPackages', [$name, $constraint]);
+ }
+
+ public function getPackages()
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getPackages', []);
+ }
+
+ public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = [])
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'loadPackages', [$packageNameMap, $acceptableStabilities, $stabilityFlags, $alreadyLoaded]);
+ }
+
+ public function search(string $query, int $mode = 0, ?string $type = null)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'search', [$query, $mode, $type]);
+ }
+
+ public function getProviders(string $packageName)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getProviders', [$packageName]);
+ }
+
+ public function getRepoName()
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getRepoName', []);
+ }
+
+ public function addPackage(PackageInterface $package)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'addPackage', [$package]);
+ }
+
+ public function removePackage(PackageInterface $package)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'removePackage', [$package]);
+ }
+
+ public function count(): int
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'count', []);
+ }
+}
diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Repository/FilesystemRepository.php b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/FilesystemRepository.php
new file mode 100644
index 00000000..00e42ac6
--- /dev/null
+++ b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/FilesystemRepository.php
@@ -0,0 +1,34 @@
+<?php
+
+// Generated by scripts/plugin-stub-generator; do not edit by hand.
+// Proxy stub for Composer\Repository\FilesystemRepository: the public surface forwards to the Rust-side entity over RPC.
+
+namespace Composer\Repository;
+
+use Composer\Pcre\Preg;
+
+class FilesystemRepository extends WritableArrayRepository
+{
+ public static function safelyLoadInstalledVersions(string $path): bool
+ {
+ $installedVersionsData = @file_get_contents($path);
+ $pattern = <<<'REGEX'
+{(?(DEFINE)
+ (?<number> -? \s*+ \d++ (?:\.\d++)? )
+ (?<boolean> true | false | null )
+ (?<strings> (?&string) (?: \s*+ \. \s*+ (?&string))*+ )
+ (?<string> (?: " (?:[^"\\$]*+ | \\ ["\\0] )* " | ' (?:[^'\\]*+ | \\ ['\\] )* ' ) )
+ (?<array> array\( \s*+ (?: (?:(?&number)|(?&strings)) \s*+ => \s*+ (?: (?:__DIR__ \s*+ \. \s*+)? (?&strings) | (?&value) ) \s*+, \s*+ )*+ \s*+ \) )
+ (?<value> (?: (?&number) | (?&boolean) | (?&strings) | (?&array) ) )
+)
+^<\?php\s++return\s++(?&array)\s*+;$}ix
+REGEX;
+ if (is_string($installedVersionsData) && Preg::isMatch($pattern, trim($installedVersionsData))) {
+ \Composer\InstalledVersions::reload(eval('?>'.Preg::replace('{=>\s*+__DIR__\s*+\.\s*+([\'"])}', '=> '.var_export(dirname($path), true).' . $1', $installedVersionsData)));
+
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledArrayRepository.php b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledArrayRepository.php
new file mode 100644
index 00000000..6cee4b45
--- /dev/null
+++ b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledArrayRepository.php
@@ -0,0 +1,14 @@
+<?php
+
+// Generated by scripts/plugin-stub-generator; do not edit by hand.
+// Proxy stub for Composer\Repository\InstalledArrayRepository: the public surface forwards to the Rust-side entity over RPC.
+
+namespace Composer\Repository;
+
+class InstalledArrayRepository extends WritableArrayRepository implements InstalledRepositoryInterface
+{
+ public function isFresh(): bool
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'isFresh', []);
+ }
+}
diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledFilesystemRepository.php b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledFilesystemRepository.php
new file mode 100644
index 00000000..f4fb9e2b
--- /dev/null
+++ b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/InstalledFilesystemRepository.php
@@ -0,0 +1,14 @@
+<?php
+
+// Generated by scripts/plugin-stub-generator; do not edit by hand.
+// Proxy stub for Composer\Repository\InstalledFilesystemRepository: the public surface forwards to the Rust-side entity over RPC.
+
+namespace Composer\Repository;
+
+class InstalledFilesystemRepository extends FilesystemRepository implements InstalledRepositoryInterface
+{
+ public function isFresh()
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'isFresh', []);
+ }
+}
diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Repository/RepositoryManager.php b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/RepositoryManager.php
new file mode 100644
index 00000000..252bab4d
--- /dev/null
+++ b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/RepositoryManager.php
@@ -0,0 +1,89 @@
+<?php
+
+// Generated by scripts/plugin-stub-generator; do not edit by hand.
+// Proxy stub for Composer\Repository\RepositoryManager: the public surface forwards to the Rust-side entity over RPC.
+
+namespace Composer\Repository;
+
+use Composer\Package\PackageInterface;
+
+class RepositoryManager implements \ShirabeRustStub
+{
+ /** @var int */
+ protected $__rhandle;
+ /** @var int */
+ protected $__epoch;
+
+ public function __construct(int $rhandle = 0, int $epoch = 0)
+ {
+ if (func_num_args() < 2) {
+ // Constructing the class from plugin code (a common idiom for e.g. `new BufferIO()`)
+ // is an open question of the plugin design; only proxy instantiation passes a
+ // Rust handle. Fail with a diagnosable message instead of an ArgumentCountError.
+ throw new \RuntimeException(
+ 'Shirabe does not support constructing ' . static::class . ' inside the plugin process yet'
+ );
+ }
+ $this->__rhandle = $rhandle;
+ $this->__epoch = $epoch;
+ }
+
+ public function __destruct()
+ {
+ \ShirabeRustObjectRegistry::release($this->__rhandle);
+ }
+
+ public function __shirabeRustHandleDescriptor(): array
+ {
+ return [
+ '__rhandle' => $this->__rhandle,
+ '__class' => static::class,
+ '__epoch' => $this->__epoch,
+ ];
+ }
+
+ public function findPackage(string $name, $constraint): ?PackageInterface
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'findPackage', [$name, $constraint]);
+ }
+
+ public function findPackages(string $name, $constraint): array
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'findPackages', [$name, $constraint]);
+ }
+
+ public function addRepository(RepositoryInterface $repository): void
+ {
+ \ShirabeRpcRuntime::callRust($this->__rhandle, 'addRepository', [$repository]);
+ }
+
+ public function prependRepository(RepositoryInterface $repository): void
+ {
+ \ShirabeRpcRuntime::callRust($this->__rhandle, 'prependRepository', [$repository]);
+ }
+
+ public function createRepository(string $type, array $config, ?string $name = null): RepositoryInterface
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'createRepository', [$type, $config, $name]);
+ }
+
+ public function setRepositoryClass(string $type, $class): void
+ {
+ \ShirabeRpcRuntime::callRust($this->__rhandle, 'setRepositoryClass', [$type, $class]);
+ }
+
+ public function getRepositories(): array
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getRepositories', []);
+ }
+
+ public function setLocalRepository(InstalledRepositoryInterface $repository): void
+ {
+ \ShirabeRpcRuntime::callRust($this->__rhandle, 'setLocalRepository', [$repository]);
+ }
+
+ public function getLocalRepository(): InstalledRepositoryInterface
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getLocalRepository', []);
+ }
+}
diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Repository/WritableArrayRepository.php b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/WritableArrayRepository.php
new file mode 100644
index 00000000..8f2b8377
--- /dev/null
+++ b/crates/shirabe-php-rpc/php/stubs/Composer/Repository/WritableArrayRepository.php
@@ -0,0 +1,41 @@
+<?php
+
+// Generated by scripts/plugin-stub-generator; do not edit by hand.
+// Proxy stub for Composer\Repository\WritableArrayRepository: the public surface forwards to the Rust-side entity over RPC.
+
+namespace Composer\Repository;
+
+use Composer\Installer\InstallationManager;
+
+class WritableArrayRepository extends ArrayRepository implements WritableRepositoryInterface
+{
+ public function write(bool $devMode, InstallationManager $installationManager)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'write', [$devMode, $installationManager]);
+ }
+
+ public function getCanonicalPackages()
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getCanonicalPackages', []);
+ }
+
+ public function reload()
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'reload', []);
+ }
+
+ public function setDevPackageNames(array $devPackageNames)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'setDevPackageNames', [$devPackageNames]);
+ }
+
+ public function getDevPackageNames()
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getDevPackageNames', []);
+ }
+
+ public function getDevMode()
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getDevMode', []);
+ }
+}