Skip to content

Commit

Permalink
Record macro def site spans
Browse files Browse the repository at this point in the history
  • Loading branch information
Veykril committed Dec 21, 2023
1 parent 51a9e78 commit 7d762d1
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
13 changes: 11 additions & 2 deletions crates/hir-def/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {

match id {
MacroId::Macro2Id(it) => {
let loc = it.lookup(db);
let loc: Macro2Loc = it.lookup(db);

let item_tree = loc.id.item_tree(db);
let makro = &item_tree[loc.id.value];
Expand All @@ -335,10 +335,13 @@ fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {
kind: kind(loc.expander, loc.id.file_id(), makro.ast_id.upcast()),
local_inner: false,
allow_internal_unsafe: loc.allow_internal_unsafe,
def_site: db
.span_map(loc.id.file_id())
.span_for_range(db.ast_id_map(loc.id.file_id()).get(makro.ast_id).text_range()),
}
}
MacroId::MacroRulesId(it) => {
let loc = it.lookup(db);
let loc: MacroRulesLoc = it.lookup(db);

let item_tree = loc.id.item_tree(db);
let makro = &item_tree[loc.id.value];
Expand All @@ -347,6 +350,9 @@ fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {
kind: kind(loc.expander, loc.id.file_id(), makro.ast_id.upcast()),
local_inner: loc.local_inner,
allow_internal_unsafe: loc.allow_internal_unsafe,
def_site: db
.span_map(loc.id.file_id())
.span_for_range(db.ast_id_map(loc.id.file_id()).get(makro.ast_id).text_range()),
}
}
MacroId::ProcMacroId(it) => {
Expand All @@ -363,6 +369,9 @@ fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {
),
local_inner: false,
allow_internal_unsafe: false,
def_site: db
.span_map(loc.id.file_id())
.span_for_range(db.ast_id_map(loc.id.file_id()).get(makro.ast_id).text_range()),
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion crates/hir-expand/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ pub struct MacroDefId {
pub kind: MacroDefKind,
pub local_inner: bool,
pub allow_internal_unsafe: bool,
// pub def_site: Span,
pub def_site: Span,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
Expand Down
4 changes: 4 additions & 0 deletions crates/hir-expand/src/span_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ impl mbe::SpanMapper<Span> for SpanMapRef<'_> {
impl SpanMap {
pub fn span_for_range(&self, range: TextRange) -> Span {
match self {
// FIXME: Is it correct for us to only take the span at the start? This feels somewhat
// wrong. The context will be right, but the range could be considered wrong. See
// https://github.com/rust-lang/rust/issues/23480, we probably want to fetch the span at
// the start and end, then merge them like rustc does in `Span::to
Self::ExpansionSpanMap(span_map) => span_map.span_at(range.start()),
Self::RealSpanMap(span_map) => span_map.span_for_range(range),
}
Expand Down

0 comments on commit 7d762d1

Please sign in to comment.