@@ -104,8 +104,9 @@ impl std::ops::Index<LocalModuleId> for CrateDefMap {
104
104
105
105
#[ derive( Debug , PartialEq , Eq , Clone , Copy , Hash ) ]
106
106
pub enum ModuleOrigin {
107
- /// It should not be `None` after collecting definitions.
108
- Root ( Option < FileId > ) ,
107
+ CrateRoot {
108
+ definition : FileId ,
109
+ } ,
109
110
/// Note that non-inline modules, by definition, live inside non-macro file.
110
111
File {
111
112
declaration : AstId < ast:: Module > ,
@@ -118,15 +119,11 @@ pub enum ModuleOrigin {
118
119
119
120
impl Default for ModuleOrigin {
120
121
fn default ( ) -> Self {
121
- ModuleOrigin :: Root ( None )
122
+ ModuleOrigin :: CrateRoot { definition : FileId ( 0 ) }
122
123
}
123
124
}
124
125
125
126
impl ModuleOrigin {
126
- fn root ( file_id : FileId ) -> Self {
127
- ModuleOrigin :: Root ( Some ( file_id) )
128
- }
129
-
130
127
pub ( crate ) fn not_sure_file ( file : Option < FileId > , declaration : AstId < ast:: Module > ) -> Self {
131
128
match file {
132
129
None => ModuleOrigin :: Inline { definition : declaration } ,
@@ -138,14 +135,14 @@ impl ModuleOrigin {
138
135
match self {
139
136
ModuleOrigin :: File { declaration : module, .. }
140
137
| ModuleOrigin :: Inline { definition : module, .. } => Some ( * module) ,
141
- ModuleOrigin :: Root ( _ ) => None ,
138
+ ModuleOrigin :: CrateRoot { .. } => None ,
142
139
}
143
140
}
144
141
145
142
pub ( crate ) fn file_id ( & self ) -> Option < FileId > {
146
143
match self {
147
- ModuleOrigin :: File { definition : file_id , .. } | ModuleOrigin :: Root ( Some ( file_id ) ) => {
148
- Some ( * file_id )
144
+ ModuleOrigin :: File { definition, .. } | ModuleOrigin :: CrateRoot { definition } => {
145
+ Some ( * definition )
149
146
}
150
147
_ => None ,
151
148
}
@@ -155,12 +152,11 @@ impl ModuleOrigin {
155
152
/// That is, a file or a `mod foo {}` with items.
156
153
fn definition_source ( & self , db : & impl DefDatabase ) -> InFile < ModuleSource > {
157
154
match self {
158
- ModuleOrigin :: File { definition : file_id , .. } | ModuleOrigin :: Root ( Some ( file_id ) ) => {
159
- let file_id = * file_id ;
155
+ ModuleOrigin :: File { definition, .. } | ModuleOrigin :: CrateRoot { definition } => {
156
+ let file_id = * definition ;
160
157
let sf = db. parse ( file_id) . tree ( ) ;
161
158
return InFile :: new ( file_id. into ( ) , ModuleSource :: SourceFile ( sf) ) ;
162
159
}
163
- ModuleOrigin :: Root ( None ) => unreachable ! ( ) ,
164
160
ModuleOrigin :: Inline { definition } => {
165
161
InFile :: new ( definition. file_id , ModuleSource :: Module ( definition. to_node ( db) ) )
166
162
}
0 commit comments