Skip to content

Commit 5150b98

Browse files
committed
resolve: Cleanup resolve_crate_root
1 parent 01cc982 commit 5150b98

File tree

4 files changed

+10
-13
lines changed

4 files changed

+10
-13
lines changed

src/librustc_resolve/build_reduced_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ impl<'a> Resolver<'a> {
156156

157157
// Disallow `use $crate;`
158158
if source.name == keywords::DollarCrate.name() && path.segments.len() == 1 {
159-
let crate_root = self.resolve_crate_root(source.span.ctxt(), true);
159+
let crate_root = self.resolve_crate_root(source);
160160
let crate_name = match crate_root.kind {
161161
ModuleKind::Def(_, name) => name,
162162
ModuleKind::Block(..) => unreachable!(),

src/librustc_resolve/lib.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,8 +1983,9 @@ impl<'a> Resolver<'a> {
19831983
result
19841984
}
19851985

1986-
fn resolve_crate_root(&mut self, mut ctxt: SyntaxContext, legacy: bool) -> Module<'a> {
1987-
let mark = if legacy {
1986+
fn resolve_crate_root(&mut self, ident: Ident) -> Module<'a> {
1987+
let mut ctxt = ident.span.ctxt();
1988+
let mark = if ident.name == keywords::DollarCrate.name() {
19881989
// When resolving `$crate` from a `macro_rules!` invoked in a `macro`,
19891990
// we don't want to pretend that the `macro_rules!` definition is in the `macro`
19901991
// as described in `SyntaxContext::apply_mark`, so we ignore prepended modern marks.
@@ -3347,14 +3348,11 @@ impl<'a> Resolver<'a> {
33473348
if ns == TypeNS {
33483349
if (i == 0 && name == keywords::CrateRoot.name()) ||
33493350
(i == 0 && name == keywords::Crate.name()) ||
3351+
(i == 0 && name == keywords::DollarCrate.name()) ||
33503352
(i == 1 && name == keywords::Crate.name() &&
33513353
path[0].name == keywords::CrateRoot.name()) {
3352-
// `::a::b` or `::crate::a::b`
3353-
module = Some(self.resolve_crate_root(ident.span.ctxt(), false));
3354-
continue
3355-
} else if i == 0 && name == keywords::DollarCrate.name() {
3356-
// `$crate::a::b`
3357-
module = Some(self.resolve_crate_root(ident.span.ctxt(), true));
3354+
// `::a::b`, `crate::a::b`, `::crate::a::b` or `$crate::a::b`
3355+
module = Some(self.resolve_crate_root(ident));
33583356
continue
33593357
} else if i == 1 && !ident.is_path_segment_keyword() {
33603358
let prev_name = path[0].name;

src/librustc_resolve/macros.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,9 @@ impl<'a> base::Resolver for Resolver<'a> {
155155
}
156156
});
157157

158-
let ident = path.segments[0].ident;
159-
if ident.name == keywords::DollarCrate.name() {
158+
if path.segments[0].ident.name == keywords::DollarCrate.name() {
159+
let module = self.0.resolve_crate_root(path.segments[0].ident);
160160
path.segments[0].ident.name = keywords::CrateRoot.name();
161-
let module = self.0.resolve_crate_root(ident.span.ctxt(), true);
162161
if !module.is_local() {
163162
let span = path.segments[0].ident.span;
164163
path.segments.insert(1, match module.kind {

src/librustc_resolve/resolve_imports.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
698698
"crate root imports need to be explicitly named: \
699699
`use crate as name;`".to_string()));
700700
} else {
701-
Some(self.resolve_crate_root(source.span.ctxt().modern(), false))
701+
Some(self.resolve_crate_root(source))
702702
}
703703
} else if is_extern && !source.is_path_segment_keyword() {
704704
let crate_id =

0 commit comments

Comments
 (0)