@@ -250,6 +250,10 @@ impl PackageQueryArgs {
250250 /// `package_name` is the optional package name from a `package#task` specifier.
251251 /// `cwd` is the working directory (used as fallback when no package name or filter is given).
252252 ///
253+ /// Returns `(query, is_cwd_only)` where `is_cwd_only` is `true` when the query
254+ /// falls through to the implicit-cwd path (no `-r`, `-t`, `-w`, `--filter`,
255+ /// or explicit package name).
256+ ///
253257 /// # Errors
254258 ///
255259 /// Returns [`PackageQueryError`] if conflicting flags are set, a package name
@@ -258,7 +262,7 @@ impl PackageQueryArgs {
258262 self ,
259263 package_name : Option < Str > ,
260264 cwd : & Arc < AbsolutePath > ,
261- ) -> Result < PackageQuery , PackageQueryError > {
265+ ) -> Result < ( PackageQuery , bool ) , PackageQueryError > {
262266 let Self { recursive, transitive, workspace_root, filter } = self ;
263267
264268 if recursive {
@@ -272,7 +276,7 @@ impl PackageQueryArgs {
272276 return Err ( PackageQueryError :: PackageNameWithRecursive { package_name } ) ;
273277 }
274278 // -w is redundant with -r (all packages already includes root).
275- return Ok ( PackageQuery :: all ( ) ) ;
279+ return Ok ( ( PackageQuery :: all ( ) , false ) ) ;
276280 }
277281
278282 if !filter. is_empty ( ) {
@@ -301,7 +305,7 @@ impl PackageQueryArgs {
301305 source : None ,
302306 } ) ;
303307 }
304- return Ok ( PackageQuery :: filters ( parsed) ) ;
308+ return Ok ( ( PackageQuery :: filters ( parsed) , false ) ) ;
305309 }
306310
307311 // No --filter, no --recursive.
@@ -319,15 +323,19 @@ impl PackageQueryArgs {
319323 } else {
320324 None
321325 } ;
322- return Ok ( PackageQuery :: filters ( Vec1 :: new ( PackageFilter {
323- exclude : false ,
324- selector : PackageSelector :: WorkspaceRoot ,
325- traversal,
326- source : None ,
327- } ) ) ) ;
326+ return Ok ( (
327+ PackageQuery :: filters ( Vec1 :: new ( PackageFilter {
328+ exclude : false ,
329+ selector : PackageSelector :: WorkspaceRoot ,
330+ traversal,
331+ source : None ,
332+ } ) ) ,
333+ false ,
334+ ) ) ;
328335 }
329336
330337 // No --filter, no --recursive, no -w: implicit cwd or package-name specifier.
338+ let is_cwd_only = !transitive && package_name. is_none ( ) ;
331339 let selector = package_name. map_or_else (
332340 || PackageSelector :: ContainingPackage ( Arc :: clone ( cwd) ) ,
333341 |name| PackageSelector :: Name ( PackageNamePattern :: Exact ( name) ) ,
@@ -340,12 +348,15 @@ impl PackageQueryArgs {
340348 } else {
341349 None
342350 } ;
343- Ok ( PackageQuery :: filters ( Vec1 :: new ( PackageFilter {
344- exclude : false ,
345- selector,
346- traversal,
347- source : None ,
348- } ) ) )
351+ Ok ( (
352+ PackageQuery :: filters ( Vec1 :: new ( PackageFilter {
353+ exclude : false ,
354+ selector,
355+ traversal,
356+ source : None ,
357+ } ) ) ,
358+ is_cwd_only,
359+ ) )
349360 }
350361}
351362
@@ -1040,7 +1051,7 @@ mod tests {
10401051 workspace_root : true ,
10411052 filter : Vec :: new ( ) ,
10421053 } ;
1043- let query = args. into_package_query ( None , & cwd) . unwrap ( ) ;
1054+ let ( query, _ ) = args. into_package_query ( None , & cwd) . unwrap ( ) ;
10441055 match & query. 0 {
10451056 crate :: package_graph:: PackageQueryKind :: Filters ( filters) => {
10461057 assert_eq ! ( filters. len( ) , 1 ) ;
@@ -1066,7 +1077,7 @@ mod tests {
10661077 workspace_root : true ,
10671078 filter : Vec :: new ( ) ,
10681079 } ;
1069- let query = args. into_package_query ( None , & cwd) . unwrap ( ) ;
1080+ let ( query, _ ) = args. into_package_query ( None , & cwd) . unwrap ( ) ;
10701081 assert ! (
10711082 matches!( & query. 0 , crate :: package_graph:: PackageQueryKind :: All ) ,
10721083 "expected All, got {:?}" ,
@@ -1084,7 +1095,7 @@ mod tests {
10841095 workspace_root : true ,
10851096 filter : Vec :: new ( ) ,
10861097 } ;
1087- let query = args. into_package_query ( None , & cwd) . unwrap ( ) ;
1098+ let ( query, _ ) = args. into_package_query ( None , & cwd) . unwrap ( ) ;
10881099 match & query. 0 {
10891100 crate :: package_graph:: PackageQueryKind :: Filters ( filters) => {
10901101 assert_eq ! ( filters. len( ) , 1 ) ;
@@ -1109,7 +1120,7 @@ mod tests {
11091120 workspace_root : true ,
11101121 filter : vec ! [ Str :: from( "foo" ) ] ,
11111122 } ;
1112- let query = args. into_package_query ( None , & cwd) . unwrap ( ) ;
1123+ let ( query, _ ) = args. into_package_query ( None , & cwd) . unwrap ( ) ;
11131124 match & query. 0 {
11141125 crate :: package_graph:: PackageQueryKind :: Filters ( filters) => {
11151126 assert_eq ! ( filters. len( ) , 2 ) ;
@@ -1157,7 +1168,7 @@ mod tests {
11571168 workspace_root : false ,
11581169 filter : vec ! [ Str :: from( "a b" ) ] ,
11591170 } ;
1160- let query = args. into_package_query ( None , & cwd) . unwrap ( ) ;
1171+ let ( query, _ ) = args. into_package_query ( None , & cwd) . unwrap ( ) ;
11611172 match & query. 0 {
11621173 crate :: package_graph:: PackageQueryKind :: Filters ( filters) => {
11631174 assert_eq ! ( filters. len( ) , 2 ) ;
@@ -1177,7 +1188,7 @@ mod tests {
11771188 workspace_root : true ,
11781189 filter : vec ! [ Str :: from( "foo" ) ] ,
11791190 } ;
1180- let query = args. into_package_query ( None , & cwd) . unwrap ( ) ;
1191+ let ( query, _ ) = args. into_package_query ( None , & cwd) . unwrap ( ) ;
11811192 match & query. 0 {
11821193 crate :: package_graph:: PackageQueryKind :: Filters ( filters) => {
11831194 assert_eq ! ( filters. len( ) , 2 ) ;
@@ -1197,7 +1208,7 @@ mod tests {
11971208 workspace_root : false ,
11981209 filter : Vec :: new ( ) ,
11991210 } ;
1200- let query = args. into_package_query ( None , & cwd) . unwrap ( ) ;
1211+ let ( query, _ ) = args. into_package_query ( None , & cwd) . unwrap ( ) ;
12011212 match & query. 0 {
12021213 crate :: package_graph:: PackageQueryKind :: Filters ( filters) => {
12031214 assert_eq ! ( filters. len( ) , 1 ) ;
0 commit comments