Resolve $crates for pretty-printing at more appropriate time · rust-lang/rust@e40d7d9 (original) (raw)

1

1

`use {AmbiguityError, AmbiguityKind, AmbiguityErrorMisc};

`

2

2

`use {CrateLint, Resolver, ResolutionError, ScopeSet, Weak};

`

3

``

`-

use {Module, NameBinding, NameBindingKind, PathResult, Segment, ToNameBinding};

`

``

3

`+

use {Module, ModuleKind, NameBinding, NameBindingKind, PathResult, Segment, ToNameBinding};

`

4

4

`use {is_known_tool, resolve_error};

`

5

5

`use ModuleOrUniformRoot;

`

6

6

`use Namespace::*;

`

`@@ -15,12 +15,13 @@ use syntax::ast::{self, Ident};

`

15

15

`use syntax::attr;

`

16

16

`use syntax::errors::DiagnosticBuilder;

`

17

17

`use syntax::ext::base::{self, Determinacy};

`

18

``

`-

use syntax::ext::base::{MacroKind, SyntaxExtension};

`

``

18

`+

use syntax::ext::base::{Annotatable, MacroKind, SyntaxExtension};

`

19

19

`use syntax::ext::expand::{AstFragment, Invocation, InvocationKind};

`

20

20

`use syntax::ext:🪥:{self, Mark};

`

21

21

`use syntax::ext::tt::macro_rules;

`

22

22

`use syntax::feature_gate::{feature_err, is_builtin_attr_name, GateIssue};

`

23

23

`use syntax::symbol::{Symbol, keywords};

`

``

24

`+

use syntax::visit::Visitor;

`

24

25

`use syntax::util::lev_distance::find_best_match_for_name;

`

25

26

`use syntax_pos::{Span, DUMMY_SP};

`

26

27

`use errors::Applicability;

`

`@@ -126,6 +127,26 @@ impl<'a> base::Resolver for Resolver<'a> {

`

126

127

` mark

`

127

128

`}

`

128

129

``

``

130

`+

fn resolve_dollar_crates(&mut self, annotatable: &Annotatable) {

`

``

131

`+

pub struct ResolveDollarCrates<'a, 'b: 'a> {

`

``

132

`+

pub resolver: &'a mut Resolver<'b>,

`

``

133

`+

}

`

``

134

`+

impl<'a> Visitor<'a> for ResolveDollarCrates<'a, '_> {

`

``

135

`+

fn visit_ident(&mut self, ident: Ident) {

`

``

136

`+

if ident.name == keywords::DollarCrate.name() {

`

``

137

`+

let name = match self.resolver.resolve_crate_root(ident).kind {

`

``

138

`+

ModuleKind::Def(_, name) if name != keywords::Invalid.name() => name,

`

``

139

`+

_ => keywords::Crate.name(),

`

``

140

`+

};

`

``

141

`+

ident.span.ctxt().set_dollar_crate_name(name);

`

``

142

`+

}

`

``

143

`+

}

`

``

144

`+

fn visit_mac(&mut self, _: &ast::Mac) {}

`

``

145

`+

}

`

``

146

+

``

147

`+

annotatable.visit_with(&mut ResolveDollarCrates { resolver: self });

`

``

148

`+

}

`

``

149

+

129

150

`fn visit_ast_fragment_with_placeholders(&mut self, mark: Mark, fragment: &AstFragment,

`

130

151

`derives: &[Mark]) {

`

131

152

`let invocation = self.invocations[&mark];

`