From 427e059e4ffc6ce5ff130c803f9e533b7c125089 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 7 Aug 2026 20:51:59 +0900 Subject: feat(plugin): cross alias packages over RPC as proxy stubs AliasPackage, CompleteAliasPackage and RootAliasPackage now have generated proxy stubs, so a package handed to a plugin no longer has to be a real package: it crosses as the stub matching its concrete variant, answers getAliasOf / setRootPackageAlias / isRootPackageAlias / hasSelfVersionRequires, and can be constructed from plugin code. The setters RootPackageInterface declares are routed through that interface for every root package instead of through the base Package state. Only the alias variant needs it -- RootAliasPackage overrides all nine to write through to the package it aliases -- but a real RootPackage delegates to the same base state either way, so both take one path. An alias of an alias has no representation here, so narrowing the constructor argument to a real package is an explicit error rather than a silent demotion. Co-Authored-By: Claude Opus 5 (1M context) --- .../php/stubs/Composer/Package/AliasPackage.php | 35 ++++++ .../Composer/Package/CompleteAliasPackage.php | 140 +++++++++++++++++++++ .../stubs/Composer/Package/RootAliasPackage.php | 120 ++++++++++++++++++ 3 files changed, 295 insertions(+) create mode 100644 crates/shirabe-php-rpc/php/stubs/Composer/Package/AliasPackage.php create mode 100644 crates/shirabe-php-rpc/php/stubs/Composer/Package/CompleteAliasPackage.php create mode 100644 crates/shirabe-php-rpc/php/stubs/Composer/Package/RootAliasPackage.php (limited to 'crates/shirabe-php-rpc/php/stubs') diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Package/AliasPackage.php b/crates/shirabe-php-rpc/php/stubs/Composer/Package/AliasPackage.php new file mode 100644 index 00000000..f7e2e404 --- /dev/null +++ b/crates/shirabe-php-rpc/php/stubs/Composer/Package/AliasPackage.php @@ -0,0 +1,35 @@ +__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust(0, '__shirabeConstruct', [static::class, [$aliasOf, $version, $prettyVersion]]); + \ShirabeRustObjectRegistry::adopt($this->__rhandle, $this); + } + + public function getAliasOf() + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getAliasOf', []); + } + + public function setRootPackageAlias(bool $value): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setRootPackageAlias', [$value]); + } + + public function isRootPackageAlias(): bool + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'isRootPackageAlias', []); + } + + public function hasSelfVersionRequires(): bool + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'hasSelfVersionRequires', []); + } +} diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Package/CompleteAliasPackage.php b/crates/shirabe-php-rpc/php/stubs/Composer/Package/CompleteAliasPackage.php new file mode 100644 index 00000000..19555915 --- /dev/null +++ b/crates/shirabe-php-rpc/php/stubs/Composer/Package/CompleteAliasPackage.php @@ -0,0 +1,140 @@ +__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust(0, '__shirabeConstruct', [static::class, [$aliasOf, $version, $prettyVersion]]); + \ShirabeRustObjectRegistry::adopt($this->__rhandle, $this); + } + + public function getScripts(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getScripts', []); + } + + public function setScripts(array $scripts): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setScripts', [$scripts]); + } + + public function getRepositories(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getRepositories', []); + } + + public function setRepositories(array $repositories): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setRepositories', [$repositories]); + } + + public function getLicense(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getLicense', []); + } + + public function setLicense(array $license): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setLicense', [$license]); + } + + public function getKeywords(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getKeywords', []); + } + + public function setKeywords(array $keywords): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setKeywords', [$keywords]); + } + + public function getDescription(): ?string + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getDescription', []); + } + + public function setDescription(?string $description): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setDescription', [$description]); + } + + public function getHomepage(): ?string + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getHomepage', []); + } + + public function setHomepage(?string $homepage): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setHomepage', [$homepage]); + } + + public function getAuthors(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getAuthors', []); + } + + public function setAuthors(array $authors): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setAuthors', [$authors]); + } + + public function getSupport(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getSupport', []); + } + + public function setSupport(array $support): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setSupport', [$support]); + } + + public function getFunding(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getFunding', []); + } + + public function setFunding(array $funding): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setFunding', [$funding]); + } + + public function isAbandoned(): bool + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'isAbandoned', []); + } + + public function getReplacementPackage(): ?string + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getReplacementPackage', []); + } + + public function setAbandoned($abandoned): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setAbandoned', [$abandoned]); + } + + public function getArchiveName(): ?string + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getArchiveName', []); + } + + public function setArchiveName(?string $name): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setArchiveName', [$name]); + } + + public function getArchiveExcludes(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getArchiveExcludes', []); + } + + public function setArchiveExcludes(array $excludes): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setArchiveExcludes', [$excludes]); + } +} diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Package/RootAliasPackage.php b/crates/shirabe-php-rpc/php/stubs/Composer/Package/RootAliasPackage.php new file mode 100644 index 00000000..9c4a294f --- /dev/null +++ b/crates/shirabe-php-rpc/php/stubs/Composer/Package/RootAliasPackage.php @@ -0,0 +1,120 @@ +__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust(0, '__shirabeConstruct', [static::class, [$aliasOf, $version, $prettyVersion]]); + \ShirabeRustObjectRegistry::adopt($this->__rhandle, $this); + } + + public function getAliases(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getAliases', []); + } + + public function getMinimumStability(): string + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getMinimumStability', []); + } + + public function getStabilityFlags(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getStabilityFlags', []); + } + + public function getReferences(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getReferences', []); + } + + public function getPreferStable(): bool + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getPreferStable', []); + } + + public function getConfig(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getConfig', []); + } + + public function setRequires(array $requires): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setRequires', [$requires]); + } + + public function setDevRequires(array $devRequires): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setDevRequires', [$devRequires]); + } + + public function setConflicts(array $conflicts): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setConflicts', [$conflicts]); + } + + public function setProvides(array $provides): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setProvides', [$provides]); + } + + public function setReplaces(array $replaces): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setReplaces', [$replaces]); + } + + public function setAutoload(array $autoload): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setAutoload', [$autoload]); + } + + public function setDevAutoload(array $devAutoload): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setDevAutoload', [$devAutoload]); + } + + public function setStabilityFlags(array $stabilityFlags): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setStabilityFlags', [$stabilityFlags]); + } + + public function setMinimumStability(string $minimumStability): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setMinimumStability', [$minimumStability]); + } + + public function setPreferStable(bool $preferStable): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setPreferStable', [$preferStable]); + } + + public function setConfig(array $config): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setConfig', [$config]); + } + + public function setReferences(array $references): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setReferences', [$references]); + } + + public function setAliases(array $aliases): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setAliases', [$aliases]); + } + + public function setSuggests(array $suggests): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setSuggests', [$suggests]); + } + + public function setExtra(array $extra): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'setExtra', [$extra]); + } +} -- cgit v1.3.1