@@ -313,7 +313,7 @@ async fn async_main() -> Result<()> {
313313 crate :: initialize ( InitializeOptions {
314314 registry : cli. registry ,
315315 cache_dir : cli. cache_dir . map ( Into :: into) ,
316- legacy_peer_deps : cli. legacy_peer_deps ,
316+ legacy_peer_deps : legacy_peer_deps_override ( cli. legacy_peer_deps ) ,
317317 manifests_concurrency_limit : cli. manifests_concurrency_limit ,
318318 script_concurrency_limit : cli. script_concurrency_limit ,
319319 } )
@@ -496,6 +496,14 @@ fn has_flag_before_delimiter(args: &[String], flag: &str) -> bool {
496496 . any ( |arg| arg == flag)
497497}
498498
499+ // `ArgAction::SetTrue` materializes an absent flag as `Some(false)`. The CLI
500+ // historically treated that as no override so the configured/default peer
501+ // policy remains in effect; embedders can still pass `Some(false)` directly to
502+ // `initialize` when they intentionally want to include peer dependencies.
503+ fn legacy_peer_deps_override ( value : Option < bool > ) -> Option < bool > {
504+ value. filter ( |enabled| * enabled)
505+ }
506+
499507fn detect_help_target ( args : & [ String ] ) -> Option < HelpTarget > {
500508 let command = detect_command ( args) ?;
501509 ( command != "help" && command != "version" ) . then ( || HelpTarget {
@@ -611,3 +619,24 @@ fn dependency_failure_details(error: &anyhow::Error) -> Option<ErrorDetails> {
611619 . collect ( ) ,
612620 } )
613621}
622+
623+ #[ cfg( test) ]
624+ mod tests {
625+ use clap:: Parser ;
626+
627+ use super :: * ;
628+
629+ #[ test]
630+ fn absent_legacy_peer_flag_does_not_override_the_default ( ) {
631+ let absent = Cli :: try_parse_from ( [ "utoo" ] ) . expect ( "bare CLI should parse" ) ;
632+ assert_eq ! ( absent. legacy_peer_deps, Some ( false ) ) ;
633+ assert_eq ! ( legacy_peer_deps_override( absent. legacy_peer_deps) , None ) ;
634+
635+ let present = Cli :: try_parse_from ( [ "utoo" , "--legacy-peer-deps" ] )
636+ . expect ( "legacy peer flag should parse" ) ;
637+ assert_eq ! (
638+ legacy_peer_deps_override( present. legacy_peer_deps) ,
639+ Some ( true )
640+ ) ;
641+ }
642+ }
0 commit comments