@@ -367,17 +367,31 @@ impl LocalManifest {
367
367
pub fn remove_from_table ( & mut self , table_path : & [ String ] , name : & str ) -> CargoResult < ( ) > {
368
368
let parent_table = self . get_table_mut ( table_path) ?;
369
369
370
- let dep = parent_table
371
- . get_mut ( name)
372
- . filter ( |t| !t. is_none ( ) )
373
- . ok_or_else ( || non_existent_dependency_err ( name, table_path. join ( "." ) ) ) ?;
374
-
375
- // remove the dependency
376
- * dep = toml_edit:: Item :: None ;
370
+ match parent_table. get_mut ( name) . filter ( |t| !t. is_none ( ) ) {
371
+ Some ( dep) => {
372
+ // remove the dependency
373
+ * dep = toml_edit:: Item :: None ;
374
+
375
+ // remove table if empty
376
+ if parent_table. as_table_like ( ) . unwrap ( ) . is_empty ( ) {
377
+ * parent_table = toml_edit:: Item :: None ;
378
+ }
379
+ }
380
+ None => {
381
+ // Search in other tables.
382
+ let sections = self . get_sections ( ) ;
383
+ let found_table_path = sections. iter ( ) . find_map ( |( t, i) | {
384
+ let table_path: Vec < String > =
385
+ t. to_table ( ) . iter ( ) . map ( |s| s. to_string ( ) ) . collect ( ) ;
386
+ i. get ( name) . is_some ( ) . then ( || table_path. join ( "." ) )
387
+ } ) ;
377
388
378
- // remove table if empty
379
- if parent_table. as_table_like ( ) . unwrap ( ) . is_empty ( ) {
380
- * parent_table = toml_edit:: Item :: None ;
389
+ return Err ( non_existent_dependency_err (
390
+ name,
391
+ table_path. join ( "." ) ,
392
+ found_table_path,
393
+ ) ) ;
394
+ }
381
395
}
382
396
383
397
Ok ( ( ) )
@@ -537,9 +551,14 @@ fn non_existent_table_err(table: impl std::fmt::Display) -> anyhow::Error {
537
551
538
552
fn non_existent_dependency_err (
539
553
name : impl std:: fmt:: Display ,
540
- table : impl std:: fmt:: Display ,
554
+ search_table : impl std:: fmt:: Display ,
555
+ found_table : Option < impl std:: fmt:: Display > ,
541
556
) -> anyhow:: Error {
542
- anyhow:: format_err!( "the dependency `{name}` could not be found in `{table}`." )
557
+ let mut msg = format ! ( "the dependency `{name}` could not be found in `{search_table}`." ) ;
558
+ if let Some ( found_table) = found_table {
559
+ msg. push_str ( & format ! ( " But it was found in `{found_table}`." , ) ) ;
560
+ }
561
+ anyhow:: format_err!( msg)
543
562
}
544
563
545
564
fn remove_array_index ( array : & mut toml_edit:: Array , index : usize ) {
0 commit comments