make file id repr private again

This commit is contained in:
Aleksey Kladov 2019-10-29 15:01:55 +03:00
parent 5b803055b7
commit dba767802d

View file

@ -39,20 +39,23 @@ macro_rules! impl_intern_key {
/// finite (because everything bottoms out at the real `FileId`) and small /// finite (because everything bottoms out at the real `FileId`) and small
/// (`MacroCallId` uses the location interner). /// (`MacroCallId` uses the location interner).
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum HirFileId { pub struct HirFileId(HirFileIdRepr);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
enum HirFileIdRepr {
FileId(FileId), FileId(FileId),
MacroFile(MacroFile), MacroFile(MacroFile),
} }
impl From<FileId> for HirFileId { impl From<FileId> for HirFileId {
fn from(id: FileId) -> Self { fn from(id: FileId) -> Self {
HirFileId::FileId(id) HirFileId(HirFileIdRepr::FileId(id))
} }
} }
impl From<MacroFile> for HirFileId { impl From<MacroFile> for HirFileId {
fn from(id: MacroFile) -> Self { fn from(id: MacroFile) -> Self {
HirFileId::MacroFile(id) HirFileId(HirFileIdRepr::MacroFile(id))
} }
} }
@ -60,9 +63,9 @@ impl HirFileId {
/// For macro-expansion files, returns the file original source file the /// For macro-expansion files, returns the file original source file the
/// expansion originated from. /// expansion originated from.
pub fn original_file(self, db: &impl AstDatabase) -> FileId { pub fn original_file(self, db: &impl AstDatabase) -> FileId {
match self { match self.0 {
HirFileId::FileId(file_id) => file_id, HirFileIdRepr::FileId(file_id) => file_id,
HirFileId::MacroFile(macro_file) => { HirFileIdRepr::MacroFile(macro_file) => {
let loc = db.lookup_intern_macro(macro_file.macro_call_id); let loc = db.lookup_intern_macro(macro_file.macro_call_id);
loc.ast_id.file_id().original_file(db) loc.ast_id.file_id().original_file(db)
} }
@ -71,9 +74,9 @@ impl HirFileId {
/// Get the crate which the macro lives in, if it is a macro file. /// Get the crate which the macro lives in, if it is a macro file.
pub fn macro_crate(self, db: &impl AstDatabase) -> Option<CrateId> { pub fn macro_crate(self, db: &impl AstDatabase) -> Option<CrateId> {
match self { match self.0 {
HirFileId::FileId(_) => None, HirFileIdRepr::FileId(_) => None,
HirFileId::MacroFile(macro_file) => { HirFileIdRepr::MacroFile(macro_file) => {
let loc = db.lookup_intern_macro(macro_file.macro_call_id); let loc = db.lookup_intern_macro(macro_file.macro_call_id);
Some(loc.def.krate) Some(loc.def.krate)
} }
@ -215,9 +218,11 @@ pub(crate) fn parse_or_expand_query(
db: &impl AstDatabase, db: &impl AstDatabase,
file_id: HirFileId, file_id: HirFileId,
) -> Option<SyntaxNode> { ) -> Option<SyntaxNode> {
match file_id { match file_id.0 {
HirFileId::FileId(file_id) => Some(db.parse(file_id).tree().syntax().clone()), HirFileIdRepr::FileId(file_id) => Some(db.parse(file_id).tree().syntax().clone()),
HirFileId::MacroFile(macro_file) => db.parse_macro(macro_file).map(|it| it.syntax_node()), HirFileIdRepr::MacroFile(macro_file) => {
db.parse_macro(macro_file).map(|it| it.syntax_node())
}
} }
} }