@@ -12,8 +12,8 @@ use proc_macro_api::ProcMacroClient;
1212use rustc_hash:: { FxHashMap , FxHashSet } ;
1313
1414use crate :: {
15- cargo_workspace, cfg_flag:: CfgFlag , utf8_stdout , CargoConfig , CargoWorkspace , ProjectJson ,
16- ProjectManifest , Sysroot , TargetKind ,
15+ cargo_workspace, cfg_flag:: CfgFlag , sysroot :: SysrootCrate , utf8_stdout , CargoConfig ,
16+ CargoWorkspace , ProjectJson , ProjectManifest , Sysroot , TargetKind ,
1717} ;
1818
1919/// `PackageRoot` describes a package root folder.
@@ -249,18 +249,14 @@ impl ProjectWorkspace {
249249 if let Some ( & from) = crates. get ( & from) {
250250 if let Some ( ( public_deps, _proc_macro) ) = & sysroot_dps {
251251 for ( name, to) in public_deps. iter ( ) {
252- if let Err ( _) = crate_graph. add_dep ( from, name. clone ( ) , * to) {
253- log:: error!( "cyclic dependency on {} for {:?}" , name, from)
254- }
252+ add_dep ( & mut crate_graph, from, name. clone ( ) , * to)
255253 }
256254 }
257255
258256 for dep in & krate. deps {
259257 let to_crate_id = dep. crate_id ;
260258 if let Some ( & to) = crates. get ( & to_crate_id) {
261- if let Err ( _) = crate_graph. add_dep ( from, dep. name . clone ( ) , to) {
262- log:: error!( "cyclic dependency {:?} -> {:?}" , from, to) ;
263- }
259+ add_dep ( & mut crate_graph, from, dep. name . clone ( ) , to)
264260 }
265261 }
266262 }
@@ -299,16 +295,12 @@ impl ProjectWorkspace {
299295 }
300296 if cargo[ tgt] . is_proc_macro {
301297 if let Some ( proc_macro) = libproc_macro {
302- if let Err ( _) = crate_graph. add_dep (
298+ add_dep (
299+ & mut crate_graph,
303300 crate_id,
304301 CrateName :: new ( "proc_macro" ) . unwrap ( ) ,
305302 proc_macro,
306- ) {
307- log:: error!(
308- "cyclic dependency on proc_macro for {}" ,
309- & cargo[ pkg] . name
310- )
311- }
303+ ) ;
312304 }
313305 }
314306
@@ -323,21 +315,12 @@ impl ProjectWorkspace {
323315 // cargo metadata does not do any normalization,
324316 // so we do it ourselves currently
325317 let name = CrateName :: normalize_dashes ( & name) ;
326- if to != from && crate_graph. add_dep ( from, name, to) . is_err ( ) {
327- log:: error!(
328- "cyclic dependency between targets of {}" ,
329- & cargo[ pkg] . name
330- )
318+ if to != from {
319+ add_dep ( & mut crate_graph, from, name, to) ;
331320 }
332321 }
333322 for ( name, krate) in public_deps. iter ( ) {
334- if let Err ( _) = crate_graph. add_dep ( from, name. clone ( ) , * krate) {
335- log:: error!(
336- "cyclic dependency on {} for {}" ,
337- name,
338- & cargo[ pkg] . name
339- )
340- }
323+ add_dep ( & mut crate_graph, from, name. clone ( ) , * krate) ;
341324 }
342325 }
343326 }
@@ -349,13 +332,7 @@ impl ProjectWorkspace {
349332 let name = CrateName :: new ( & dep. name ) . unwrap ( ) ;
350333 if let Some ( & to) = pkg_to_lib_crate. get ( & dep. pkg ) {
351334 for & from in pkg_crates. get ( & pkg) . into_iter ( ) . flatten ( ) {
352- if let Err ( _) = crate_graph. add_dep ( from, name. clone ( ) , to) {
353- log:: error!(
354- "cyclic dependency {} -> {}" ,
355- & cargo[ pkg] . name,
356- & cargo[ dep. pkg] . name
357- )
358- }
335+ add_dep ( & mut crate_graph, from, name. clone ( ) , to)
359336 }
360337 }
361338 }
@@ -391,15 +368,7 @@ impl ProjectWorkspace {
391368 pkg_to_lib_crate. insert ( pkg, crate_id) ;
392369 // Add dependencies on the core / std / alloc for rustc
393370 for ( name, krate) in public_deps. iter ( ) {
394- if let Err ( _) =
395- crate_graph. add_dep ( crate_id, name. clone ( ) , * krate)
396- {
397- log:: error!(
398- "cyclic dependency on {} for {}" ,
399- name,
400- & cargo[ pkg] . name
401- )
402- }
371+ add_dep ( & mut crate_graph, crate_id, name. clone ( ) , * krate) ;
403372 }
404373 rustc_pkg_crates. entry ( pkg) . or_insert_with ( Vec :: new) . push ( crate_id) ;
405374 }
@@ -412,13 +381,7 @@ impl ProjectWorkspace {
412381 let name = CrateName :: new ( & dep. name ) . unwrap ( ) ;
413382 if let Some ( & to) = pkg_to_lib_crate. get ( & dep. pkg ) {
414383 for & from in rustc_pkg_crates. get ( & pkg) . into_iter ( ) . flatten ( ) {
415- if let Err ( _) = crate_graph. add_dep ( from, name. clone ( ) , to) {
416- log:: error!(
417- "cyclic dependency {} -> {}" ,
418- & rustc_workspace[ pkg] . name,
419- & rustc_workspace[ dep. pkg] . name
420- )
421- }
384+ add_dep ( & mut crate_graph, from, name. clone ( ) , to) ;
422385 }
423386 }
424387 }
@@ -434,13 +397,7 @@ impl ProjectWorkspace {
434397 continue ;
435398 }
436399 for & from in pkg_crates. get ( & pkg) . into_iter ( ) . flatten ( ) {
437- if let Err ( _) = crate_graph. add_dep ( from, name. clone ( ) , to) {
438- log:: error!(
439- "cyclic dependency {} -> {}" ,
440- & cargo[ pkg] . name,
441- & rustc_workspace[ dep] . name
442- )
443- }
400+ add_dep ( & mut crate_graph, from, name. clone ( ) , to) ;
444401 }
445402 }
446403 }
@@ -511,19 +468,18 @@ fn sysroot_to_crate_graph(
511468) -> ( Vec < ( CrateName , CrateId ) > , Option < CrateId > ) {
512469 let mut cfg_options = CfgOptions :: default ( ) ;
513470 cfg_options. extend ( get_rustc_cfg_options ( target) ) ;
514- let sysroot_crates: FxHashMap < _ , _ > = sysroot
471+ let sysroot_crates: FxHashMap < SysrootCrate , CrateId > = sysroot
515472 . crates ( )
516473 . filter_map ( |krate| {
517474 let file_id = load ( & sysroot[ krate] . root ) ?;
518475
519476 let env = Env :: default ( ) ;
520477 let proc_macro = vec ! [ ] ;
521- let name = CrateName :: new ( & sysroot[ krate] . name )
522- . expect ( "Sysroot crates' names do not contain dashes" ) ;
478+ let display_name = CrateDisplayName :: from_canonical_name ( sysroot[ krate] . name . clone ( ) ) ;
523479 let crate_id = crate_graph. add_crate_root (
524480 file_id,
525481 Edition :: Edition2018 ,
526- Some ( name . into ( ) ) ,
482+ Some ( display_name ) ,
527483 cfg_options. clone ( ) ,
528484 env,
529485 proc_macro,
@@ -536,9 +492,7 @@ fn sysroot_to_crate_graph(
536492 for & to in sysroot[ from] . deps . iter ( ) {
537493 let name = CrateName :: new ( & sysroot[ to] . name ) . unwrap ( ) ;
538494 if let ( Some ( & from) , Some ( & to) ) = ( sysroot_crates. get ( & from) , sysroot_crates. get ( & to) ) {
539- if let Err ( _) = crate_graph. add_dep ( from, name, to) {
540- log:: error!( "cyclic dependency between sysroot crates" )
541- }
495+ add_dep ( crate_graph, from, name, to) ;
542496 }
543497 }
544498 }
@@ -579,3 +533,9 @@ fn get_rustc_cfg_options(target: Option<&str>) -> Vec<CfgFlag> {
579533
580534 res
581535}
536+
537+ fn add_dep ( graph : & mut CrateGraph , from : CrateId , name : CrateName , to : CrateId ) {
538+ if let Err ( err) = graph. add_dep ( from, name, to) {
539+ log:: error!( "{}" , err)
540+ }
541+ }
0 commit comments