aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/util
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-23 19:54:08 +0900
committernsfisis <nsfisis@gmail.com>2026-08-23 19:54:08 +0900
commit0b9834a90b20a90908acc8f698742c7218450008 (patch)
tree8361267d7481fffafada762ff40de4c42c57b155 /crates/shirabe/src/util
parent0b48f4a46d24248e4c012ef37d25b5963c27a78c (diff)
downloadphp-shirabe-0b9834a90b20a90908acc8f698742c7218450008.tar.gz
php-shirabe-0b9834a90b20a90908acc8f698742c7218450008.tar.zst
php-shirabe-0b9834a90b20a90908acc8f698742c7218450008.zip
docs(plugin): bring boundary text in line with the implementation
Comments that pointed at design notes kept outside the repository are dead ends for anyone reading only the tree, so what each of them explained now lives in a tagged TODO at the site it applies to. Several of those sites also stated something the implementation does not do, and the TODOs record the actual gap instead: the two halves of the codec recognize handle descriptors by different rules, the scripts Command path drops the exception class and collects output in a BufferedOutput that cannot carry an interactive command, find_shortest_path panics where PHP throws, and the package dispatch hand-rolls the variant selection AnyPackage should own. The classifier document likewise described rust-snapshot, plugin-constructible and several of the open questions as designed rather than as built. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/util')
-rw-r--r--crates/shirabe/src/util/filesystem.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/crates/shirabe/src/util/filesystem.rs b/crates/shirabe/src/util/filesystem.rs
index 8408a8a9..b20f5f48 100644
--- a/crates/shirabe/src/util/filesystem.rs
+++ b/crates/shirabe/src/util/filesystem.rs
@@ -533,8 +533,12 @@ impl Filesystem {
prefer_relative: bool,
) -> String {
if !self.is_absolute_path(from) || !self.is_absolute_path(to) {
- // PHP throws InvalidArgumentException
- // Returning early-formatted Result is not possible without changing signature; panic to surface in tests.
+ // TODO(error-model): PHP throws InvalidArgumentException. Plugins reach this method
+ // through the RPC proxy, where a relative path is ordinary input rather than a
+ // programming error, and this panic kills the process instead of reaching their
+ // catch block; the plugin dispatcher repeats the check for that reason. Returning
+ // `anyhow::Result` from here and from `find_shortest_path_code` removes both the
+ // panic and the duplicated check.
panic!(
"{}",
format!("$from ({}) and $to ({}) must be absolute paths.", from, to)
@@ -596,6 +600,8 @@ impl Filesystem {
prefer_relative: bool,
) -> String {
if !self.is_absolute_path(from) || !self.is_absolute_path(to) {
+ // TODO(error-model): as in `find_shortest_path` — PHP throws
+ // InvalidArgumentException, and this panic cannot reach a plugin's catch block.
panic!(
"{}",
format!("$from ({}) and $to ({}) must be absolute paths.", from, to)