@@ -135,8 +135,12 @@ impl ops::Deref for CrateName {
135135/// Origin of the crates. It is used in emitting monikers.
136136#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
137137pub enum CrateOrigin {
138- /// Crates that are from crates.io official registry,
139- CratesIo { repo : Option < String > , name : Option < String > } ,
138+ /// Crates that are from the rustc workspace
139+ Rustc { name : String } ,
140+ /// Crates that are workspace members,
141+ Local { repo : Option < String > , name : Option < String > } ,
142+ /// Crates that are non member libraries.
143+ Library { repo : Option < String > , name : String } ,
140144 /// Crates that are provided by the language, like std, core, proc-macro, ...
141145 Lang ( LangCrateOrigin ) ,
142146}
@@ -257,6 +261,32 @@ pub struct ProcMacro {
257261 pub expander : Arc < dyn ProcMacroExpander > ,
258262}
259263
264+ #[ derive( Debug , Copy , Clone ) ]
265+ pub enum ReleaseChannel {
266+ Stable ,
267+ Beta ,
268+ Nightly ,
269+ }
270+
271+ impl ReleaseChannel {
272+ pub fn as_str ( self ) -> & ' static str {
273+ match self {
274+ ReleaseChannel :: Stable => "stable" ,
275+ ReleaseChannel :: Beta => "beta" ,
276+ ReleaseChannel :: Nightly => "nightly" ,
277+ }
278+ }
279+
280+ pub fn from_str ( str : & str ) -> Option < Self > {
281+ Some ( match str {
282+ "stable" => ReleaseChannel :: Stable ,
283+ "beta" => ReleaseChannel :: Beta ,
284+ "nightly" => ReleaseChannel :: Nightly ,
285+ _ => return None ,
286+ } )
287+ }
288+ }
289+
260290#[ derive( Debug , Clone ) ]
261291pub struct CrateData {
262292 pub root_file_id : FileId ,
@@ -271,11 +301,13 @@ pub struct CrateData {
271301 pub display_name : Option < CrateDisplayName > ,
272302 pub cfg_options : CfgOptions ,
273303 pub potential_cfg_options : CfgOptions ,
274- pub target_layout : TargetLayoutLoadResult ,
275304 pub env : Env ,
276305 pub dependencies : Vec < Dependency > ,
277306 pub origin : CrateOrigin ,
278307 pub is_proc_macro : bool ,
308+ // FIXME: These things should not be per crate! These are more per workspace crate graph level things
309+ pub target_layout : TargetLayoutLoadResult ,
310+ pub channel : Option < ReleaseChannel > ,
279311}
280312
281313#[ derive( Debug , Clone , Copy , PartialEq , Eq , PartialOrd , Ord , Hash ) ]
@@ -329,6 +361,7 @@ impl CrateGraph {
329361 is_proc_macro : bool ,
330362 origin : CrateOrigin ,
331363 target_layout : Result < Arc < str > , Arc < str > > ,
364+ channel : Option < ReleaseChannel > ,
332365 ) -> CrateId {
333366 let data = CrateData {
334367 root_file_id,
@@ -342,6 +375,7 @@ impl CrateGraph {
342375 origin,
343376 target_layout,
344377 is_proc_macro,
378+ channel,
345379 } ;
346380 let crate_id = CrateId ( self . arena . len ( ) as u32 ) ;
347381 let prev = self . arena . insert ( crate_id, data) ;
@@ -653,8 +687,9 @@ mod tests {
653687 CfgOptions :: default ( ) ,
654688 Env :: default ( ) ,
655689 false ,
656- CrateOrigin :: CratesIo { repo : None , name : None } ,
690+ CrateOrigin :: Local { repo : None , name : None } ,
657691 Err ( "" . into ( ) ) ,
692+ None ,
658693 ) ;
659694 let crate2 = graph. add_crate_root (
660695 FileId ( 2u32 ) ,
@@ -665,8 +700,9 @@ mod tests {
665700 CfgOptions :: default ( ) ,
666701 Env :: default ( ) ,
667702 false ,
668- CrateOrigin :: CratesIo { repo : None , name : None } ,
703+ CrateOrigin :: Local { repo : None , name : None } ,
669704 Err ( "" . into ( ) ) ,
705+ None ,
670706 ) ;
671707 let crate3 = graph. add_crate_root (
672708 FileId ( 3u32 ) ,
@@ -677,8 +713,9 @@ mod tests {
677713 CfgOptions :: default ( ) ,
678714 Env :: default ( ) ,
679715 false ,
680- CrateOrigin :: CratesIo { repo : None , name : None } ,
716+ CrateOrigin :: Local { repo : None , name : None } ,
681717 Err ( "" . into ( ) ) ,
718+ None ,
682719 ) ;
683720 assert ! ( graph
684721 . add_dep( crate1, Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) , crate2) )
@@ -703,8 +740,9 @@ mod tests {
703740 CfgOptions :: default ( ) ,
704741 Env :: default ( ) ,
705742 false ,
706- CrateOrigin :: CratesIo { repo : None , name : None } ,
743+ CrateOrigin :: Local { repo : None , name : None } ,
707744 Err ( "" . into ( ) ) ,
745+ None ,
708746 ) ;
709747 let crate2 = graph. add_crate_root (
710748 FileId ( 2u32 ) ,
@@ -715,8 +753,9 @@ mod tests {
715753 CfgOptions :: default ( ) ,
716754 Env :: default ( ) ,
717755 false ,
718- CrateOrigin :: CratesIo { repo : None , name : None } ,
756+ CrateOrigin :: Local { repo : None , name : None } ,
719757 Err ( "" . into ( ) ) ,
758+ None ,
720759 ) ;
721760 assert ! ( graph
722761 . add_dep( crate1, Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) , crate2) )
@@ -738,8 +777,9 @@ mod tests {
738777 CfgOptions :: default ( ) ,
739778 Env :: default ( ) ,
740779 false ,
741- CrateOrigin :: CratesIo { repo : None , name : None } ,
780+ CrateOrigin :: Local { repo : None , name : None } ,
742781 Err ( "" . into ( ) ) ,
782+ None ,
743783 ) ;
744784 let crate2 = graph. add_crate_root (
745785 FileId ( 2u32 ) ,
@@ -750,8 +790,9 @@ mod tests {
750790 CfgOptions :: default ( ) ,
751791 Env :: default ( ) ,
752792 false ,
753- CrateOrigin :: CratesIo { repo : None , name : None } ,
793+ CrateOrigin :: Local { repo : None , name : None } ,
754794 Err ( "" . into ( ) ) ,
795+ None ,
755796 ) ;
756797 let crate3 = graph. add_crate_root (
757798 FileId ( 3u32 ) ,
@@ -762,8 +803,9 @@ mod tests {
762803 CfgOptions :: default ( ) ,
763804 Env :: default ( ) ,
764805 false ,
765- CrateOrigin :: CratesIo { repo : None , name : None } ,
806+ CrateOrigin :: Local { repo : None , name : None } ,
766807 Err ( "" . into ( ) ) ,
808+ None ,
767809 ) ;
768810 assert ! ( graph
769811 . add_dep( crate1, Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) , crate2) )
@@ -785,8 +827,9 @@ mod tests {
785827 CfgOptions :: default ( ) ,
786828 Env :: default ( ) ,
787829 false ,
788- CrateOrigin :: CratesIo { repo : None , name : None } ,
830+ CrateOrigin :: Local { repo : None , name : None } ,
789831 Err ( "" . into ( ) ) ,
832+ None ,
790833 ) ;
791834 let crate2 = graph. add_crate_root (
792835 FileId ( 2u32 ) ,
@@ -797,8 +840,9 @@ mod tests {
797840 CfgOptions :: default ( ) ,
798841 Env :: default ( ) ,
799842 false ,
800- CrateOrigin :: CratesIo { repo : None , name : None } ,
843+ CrateOrigin :: Local { repo : None , name : None } ,
801844 Err ( "" . into ( ) ) ,
845+ None ,
802846 ) ;
803847 assert ! ( graph
804848 . add_dep(
0 commit comments