]> git.lizzy.rs Git - rust.git/commitdiff
Use placeholder instead of `Option`
authorice1000 <ice1000kotlin@foxmail.com>
Thu, 5 Dec 2019 13:33:29 +0000 (08:33 -0500)
committerice1000 <ice1000kotlin@foxmail.com>
Thu, 5 Dec 2019 13:33:29 +0000 (08:33 -0500)
crates/ra_hir_def/src/nameres.rs
crates/ra_hir_def/src/nameres/collector.rs

index 0a2b32bbde7ea7a0bba6caba8eb91491a3e158cf..98bab1bfed161dca84fcc3a85989fe1cf0b2934b 100644 (file)
@@ -104,8 +104,9 @@ fn index(&self, id: LocalModuleId) -> &ModuleData {
 
 #[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
 pub enum ModuleOrigin {
-    /// It should not be `None` after collecting definitions.
-    Root(Option<FileId>),
+    CrateRoot {
+        definition: FileId,
+    },
     /// Note that non-inline modules, by definition, live inside non-macro file.
     File {
         declaration: AstId<ast::Module>,
@@ -118,15 +119,11 @@ pub enum ModuleOrigin {
 
 impl Default for ModuleOrigin {
     fn default() -> Self {
-        ModuleOrigin::Root(None)
+        ModuleOrigin::CrateRoot { definition: FileId(0) }
     }
 }
 
 impl ModuleOrigin {
-    fn root(file_id: FileId) -> Self {
-        ModuleOrigin::Root(Some(file_id))
-    }
-
     pub(crate) fn not_sure_file(file: Option<FileId>, declaration: AstId<ast::Module>) -> Self {
         match file {
             None => ModuleOrigin::Inline { definition: declaration },
@@ -138,14 +135,14 @@ fn declaration(&self) -> Option<AstId<ast::Module>> {
         match self {
             ModuleOrigin::File { declaration: module, .. }
             | ModuleOrigin::Inline { definition: module, .. } => Some(*module),
-            ModuleOrigin::Root(_) => None,
+            ModuleOrigin::CrateRoot { .. } => None,
         }
     }
 
     pub(crate) fn file_id(&self) -> Option<FileId> {
         match self {
-            ModuleOrigin::File { definition: file_id, .. } | ModuleOrigin::Root(Some(file_id)) => {
-                Some(*file_id)
+            ModuleOrigin::File { definition, .. } | ModuleOrigin::CrateRoot { definition } => {
+                Some(*definition)
             }
             _ => None,
         }
@@ -155,12 +152,11 @@ pub(crate) fn file_id(&self) -> Option<FileId> {
     /// That is, a file or a `mod foo {}` with items.
     fn definition_source(&self, db: &impl DefDatabase) -> InFile<ModuleSource> {
         match self {
-            ModuleOrigin::File { definition: file_id, .. } | ModuleOrigin::Root(Some(file_id)) => {
-                let file_id = *file_id;
+            ModuleOrigin::File { definition, .. } | ModuleOrigin::CrateRoot { definition } => {
+                let file_id = *definition;
                 let sf = db.parse(file_id).tree();
                 return InFile::new(file_id.into(), ModuleSource::SourceFile(sf));
             }
-            ModuleOrigin::Root(None) => unreachable!(),
             ModuleOrigin::Inline { definition } => {
                 InFile::new(definition.file_id, ModuleSource::Module(definition.to_node(db)))
             }
index 6f4a3e42e3c566f1abf1776353fe8712cc08d844..9d948d4f43ef5747d2c4c92cbbcd2a2c499b9faf 100644 (file)
@@ -131,7 +131,7 @@ fn collect(&mut self) {
         let file_id = crate_graph.crate_root(self.def_map.krate);
         let raw_items = self.db.raw_items(file_id.into());
         let module_id = self.def_map.root;
-        self.def_map.modules[module_id].origin = ModuleOrigin::root(file_id);
+        self.def_map.modules[module_id].origin = ModuleOrigin::CrateRoot { definition: file_id };
         ModCollector {
             def_collector: &mut *self,
             module_id,