Auto merge of #80782 - petrochenkov:viscopes, r=matthewjasper

resolve: Scope visiting doesn't need an `Ident`

Resolution scope visitor (`fn visit_scopes`) currently takes an `Ident` parameter, but it doesn't need a full identifier, or even its span, it only needs the `SyntaxContext` part.
The `SyntaxContext` part is necessary because scope visitor has to jump to macro definition sites, so it has to be directed by macro expansion information somehow.

I think it's clearer to pass only the necessary part.
Yes, usually visiting happens as a part of an identifier resolution, but in cases like collecting traits in scope (#80765) or collecting typo suggestions that's not the case.

r? `@matthewjasper`
This commit is contained in:
bors 2021-01-10 23:36:33 +00:00
commit 26d451f4b3
6 changed files with 90 additions and 57 deletions

View file

@ -622,6 +622,10 @@ impl SyntaxContext {
pub fn dollar_crate_name(self) -> Symbol {
HygieneData::with(|data| data.syntax_context_data[self.0 as usize].dollar_crate_name)
}
pub fn edition(self) -> Edition {
self.outer_expn_data().edition
}
}
impl fmt::Debug for SyntaxContext {

View file

@ -300,6 +300,10 @@ pub struct SpanData {
}
impl SpanData {
#[inline]
pub fn span(&self) -> Span {
Span::new(self.lo, self.hi, self.ctxt)
}
#[inline]
pub fn with_lo(&self, lo: BytePos) -> Span {
Span::new(lo, self.hi, self.ctxt)
@ -468,7 +472,7 @@ impl Span {
/// Edition of the crate from which this span came.
pub fn edition(self) -> edition::Edition {
self.ctxt().outer_expn_data().edition
self.ctxt().edition()
}
#[inline]