#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
pub enum ModuleOrigin {
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
pub enum ModuleOrigin {
/// Note that non-inline modules, by definition, live inside non-macro file.
File {
declaration: AstId<ast::Module>,
/// Note that non-inline modules, by definition, live inside non-macro file.
File {
declaration: AstId<ast::Module>,
pub(crate) fn not_sure_file(file: Option<FileId>, declaration: AstId<ast::Module>) -> Self {
match file {
None => ModuleOrigin::Inline { definition: declaration },
pub(crate) fn not_sure_file(file: Option<FileId>, declaration: AstId<ast::Module>) -> Self {
match file {
None => ModuleOrigin::Inline { definition: declaration },
match self {
ModuleOrigin::File { declaration: module, .. }
| ModuleOrigin::Inline { definition: module, .. } => Some(*module),
match self {
ModuleOrigin::File { declaration: module, .. }
| ModuleOrigin::Inline { definition: module, .. } => Some(*module),
/// That is, a file or a `mod foo {}` with items.
fn definition_source(&self, db: &impl DefDatabase) -> InFile<ModuleSource> {
match self {
/// 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));
}
let sf = db.parse(file_id).tree();
return InFile::new(file_id.into(), ModuleSource::SourceFile(sf));
}
ModuleOrigin::Inline { definition } => {
InFile::new(definition.file_id, ModuleSource::Module(definition.to_node(db)))
}
ModuleOrigin::Inline { definition } => {
InFile::new(definition.file_id, ModuleSource::Module(definition.to_node(db)))
}