aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository/composer_repository.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-05 04:45:11 +0900
committernsfisis <nsfisis@gmail.com>2026-06-05 04:45:11 +0900
commitd0edb5b7ac3456f99c2f2576e8992cc12d60574a (patch)
treeb69546366676c06e1c8fabddb592c202436a92b2 /crates/shirabe/src/repository/composer_repository.rs
parent53800ab77565de1c16fb8a95e047eba1cb3a160c (diff)
downloadphp-shirabe-d0edb5b7ac3456f99c2f2576e8992cc12d60574a.tar.gz
php-shirabe-d0edb5b7ac3456f99c2f2576e8992cc12d60574a.tar.zst
php-shirabe-d0edb5b7ac3456f99c2f2576e8992cc12d60574a.zip
refactor(json): model JsonFile encode/write options as a typed struct
Replace the i64 bitmask + encode_with_indent split with a JsonEncodeOptions struct (Default = JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE, default indent). encode/write each get a default form plus an explicit encode_with_options/write_with_options variant, mirroring PHP's optional $options argument. write_with_options always encodes with self.indent, matching PHP write(). Also reconcile call sites with the PHP sources: most ported sites passed 0 where Composer omits the argument (= default flags), so JsonManipulator/ShowCommand and JsonConfigSource now use the default options; only ComposerRepository and Locker genuinely pass 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/repository/composer_repository.rs')
-rw-r--r--crates/shirabe/src/repository/composer_repository.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/crates/shirabe/src/repository/composer_repository.rs b/crates/shirabe/src/repository/composer_repository.rs
index 9e5e48c..591497d 100644
--- a/crates/shirabe/src/repository/composer_repository.rs
+++ b/crates/shirabe/src/repository/composer_repository.rs
@@ -4,10 +4,9 @@ use indexmap::IndexMap;
use shirabe_external_packages::composer::metadata_minifier::MetadataMinifier;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
- Countable, InvalidArgumentException, JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE,
- LogicException, PHP_EOL, PhpMixed, RuntimeException, UnexpectedValueException,
- extension_loaded, hash, http_build_query, in_array, json_decode, parse_url_all, realpath,
- strtolower, strtr, urlencode, var_export,
+ Countable, InvalidArgumentException, LogicException, PHP_EOL, PhpMixed, RuntimeException,
+ UnexpectedValueException, extension_loaded, hash, http_build_query, in_array, json_decode,
+ parse_url_all, realpath, strtolower, strtr, urlencode, var_export,
};
use shirabe_semver::compiling_matcher::CompilingMatcher;
@@ -22,6 +21,7 @@ use crate::downloader::TransportException;
use crate::event_dispatcher::EventDispatcher;
use crate::io::IOInterface;
use crate::io::IOInterfaceImmutable;
+use crate::json::JsonEncodeOptions;
use crate::json::JsonFile;
use crate::package::BasePackageHandle;
use crate::package::PackageInterface;
@@ -2976,7 +2976,10 @@ impl ComposerRepository {
.map(|(k, v)| (k.clone(), Box::new(v.clone())))
.collect(),
);
- json = JsonFile::encode(&as_mixed, 0);
+ json = JsonFile::encode_with_options(
+ &as_mixed,
+ JsonEncodeOptions::none(),
+ );
}
}
self.cache.write(ck, &json);
@@ -3168,7 +3171,7 @@ impl ComposerRepository {
.map(|(k, v)| (k.clone(), Box::new(v.clone())))
.collect(),
);
- json = JsonFile::encode(&as_mixed, 0);
+ json = JsonFile::encode_with_options(&as_mixed, JsonEncodeOptions::none());
}
if !self.cache.is_read_only() {
self.cache.write(cache_key, &json);
@@ -3346,7 +3349,13 @@ impl ComposerRepository {
.map(|(k, v)| (k.clone(), Box::new(v.clone())))
.collect(),
);
- json = JsonFile::encode(&as_mixed, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
+ json = JsonFile::encode_with_options(
+ &as_mixed,
+ JsonEncodeOptions {
+ pretty_print: false,
+ ..Default::default()
+ },
+ );
}
if !self.cache.is_read_only() {
self.cache.write(cache_key, &json);