Skip to content

Commit 6a347f3

Browse files
committed
resolve: Remove Deref<Target=Resolver> implementations
It's now immediately clear what fields belong to the global resolver state and what are specific to passes/visitors.
1 parent df03e42 commit 6a347f3

File tree

8 files changed

+269
-319
lines changed

8 files changed

+269
-319
lines changed

src/librustc_resolve/build_reduced_graph.rs

+106-120
Large diffs are not rendered by default.

src/librustc_resolve/check_unused.rs

+7-24
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
// - `check_crate` finally emits the diagnostics based on the data generated
2424
// in the last step
2525

26-
use std::ops::{Deref, DerefMut};
27-
2826
use crate::Resolver;
2927
use crate::resolve_imports::ImportDirectiveSubclass;
3028

@@ -49,45 +47,30 @@ impl<'a> UnusedImport<'a> {
4947
}
5048

5149
struct UnusedImportCheckVisitor<'a, 'b> {
52-
resolver: &'a mut Resolver<'b>,
50+
r: &'a mut Resolver<'b>,
5351
/// All the (so far) unused imports, grouped path list
5452
unused_imports: NodeMap<UnusedImport<'a>>,
5553
base_use_tree: Option<&'a ast::UseTree>,
5654
base_id: ast::NodeId,
5755
item_span: Span,
5856
}
5957

60-
// Deref and DerefMut impls allow treating UnusedImportCheckVisitor as Resolver.
61-
impl<'a, 'b> Deref for UnusedImportCheckVisitor<'a, 'b> {
62-
type Target = Resolver<'b>;
63-
64-
fn deref<'c>(&'c self) -> &'c Resolver<'b> {
65-
&*self.resolver
66-
}
67-
}
68-
69-
impl<'a, 'b> DerefMut for UnusedImportCheckVisitor<'a, 'b> {
70-
fn deref_mut<'c>(&'c mut self) -> &'c mut Resolver<'b> {
71-
&mut *self.resolver
72-
}
73-
}
74-
7558
impl<'a, 'b> UnusedImportCheckVisitor<'a, 'b> {
7659
// We have information about whether `use` (import) directives are actually
7760
// used now. If an import is not used at all, we signal a lint error.
7861
fn check_import(&mut self, id: ast::NodeId) {
7962
let mut used = false;
80-
self.per_ns(|this, ns| used |= this.used_imports.contains(&(id, ns)));
63+
self.r.per_ns(|this, ns| used |= this.used_imports.contains(&(id, ns)));
8164
if !used {
82-
if self.maybe_unused_trait_imports.contains(&id) {
65+
if self.r.maybe_unused_trait_imports.contains(&id) {
8366
// Check later.
8467
return;
8568
}
8669
self.unused_import(self.base_id).add(id);
8770
} else {
8871
// This trait import is definitely used, in a way other than
8972
// method resolution.
90-
self.maybe_unused_trait_imports.remove(&id);
73+
self.r.maybe_unused_trait_imports.remove(&id);
9174
if let Some(i) = self.unused_imports.get_mut(&self.base_id) {
9275
i.unused.remove(&id);
9376
}
@@ -271,7 +254,7 @@ pub fn check_crate(resolver: &mut Resolver<'_>, krate: &ast::Crate) {
271254
}
272255

273256
let mut visitor = UnusedImportCheckVisitor {
274-
resolver,
257+
r: resolver,
275258
unused_imports: Default::default(),
276259
base_use_tree: None,
277260
base_id: ast::DUMMY_NODE_ID,
@@ -304,7 +287,7 @@ pub fn check_crate(resolver: &mut Resolver<'_>, krate: &ast::Crate) {
304287
let ms = MultiSpan::from_spans(spans.clone());
305288
let mut span_snippets = spans.iter()
306289
.filter_map(|s| {
307-
match visitor.session.source_map().span_to_snippet(*s) {
290+
match visitor.r.session.source_map().span_to_snippet(*s) {
308291
Ok(s) => Some(format!("`{}`", s)),
309292
_ => None,
310293
}
@@ -326,7 +309,7 @@ pub fn check_crate(resolver: &mut Resolver<'_>, krate: &ast::Crate) {
326309
"remove the unused import"
327310
};
328311

329-
visitor.session.buffer_lint_with_diagnostic(
312+
visitor.r.session.buffer_lint_with_diagnostic(
330313
lint::builtin::UNUSED_IMPORTS,
331314
unused.use_tree_id,
332315
ms,

src/librustc_resolve/diagnostics.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
396396
) -> Option<(Vec<Segment>, Vec<String>)> {
397397
// Replace first ident with `self` and check if that is valid.
398398
path[0].ident.name = kw::SelfLower;
399-
let result = self.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
399+
let result = self.r.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
400400
debug!("make_missing_self_suggestion: path={:?} result={:?}", path, result);
401401
if let PathResult::Module(..) = result {
402402
Some((path, Vec::new()))
@@ -420,7 +420,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
420420
) -> Option<(Vec<Segment>, Vec<String>)> {
421421
// Replace first ident with `crate` and check if that is valid.
422422
path[0].ident.name = kw::Crate;
423-
let result = self.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
423+
let result = self.r.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
424424
debug!("make_missing_crate_suggestion: path={:?} result={:?}", path, result);
425425
if let PathResult::Module(..) = result {
426426
Some((
@@ -451,7 +451,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
451451
) -> Option<(Vec<Segment>, Vec<String>)> {
452452
// Replace first ident with `crate` and check if that is valid.
453453
path[0].ident.name = kw::Super;
454-
let result = self.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
454+
let result = self.r.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
455455
debug!("make_missing_super_suggestion: path={:?} result={:?}", path, result);
456456
if let PathResult::Module(..) = result {
457457
Some((path, Vec::new()))
@@ -484,13 +484,13 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
484484
// 1) some consistent ordering for emitted dignostics, and
485485
// 2) `std` suggestions before `core` suggestions.
486486
let mut extern_crate_names =
487-
self.resolver.extern_prelude.iter().map(|(ident, _)| ident.name).collect::<Vec<_>>();
487+
self.r.extern_prelude.iter().map(|(ident, _)| ident.name).collect::<Vec<_>>();
488488
extern_crate_names.sort_by_key(|name| Reverse(name.as_str()));
489489

490490
for name in extern_crate_names.into_iter() {
491491
// Replace first ident with a crate name and check if that is valid.
492492
path[0].ident.name = name;
493-
let result = self.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
493+
let result = self.r.resolve_path(&path, None, parent_scope, false, span, CrateLint::No);
494494
debug!("make_external_crate_suggestion: name={:?} path={:?} result={:?}",
495495
name, path, result);
496496
if let PathResult::Module(..) = result {
@@ -556,7 +556,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
556556
// ie. `use a::b::{c, d, e};`
557557
// ^^^
558558
let (found_closing_brace, binding_span) = find_span_of_binding_until_next_binding(
559-
self.resolver.session, directive.span, directive.use_span,
559+
self.r.session, directive.span, directive.use_span,
560560
);
561561
debug!("check_for_module_export_macro: found_closing_brace={:?} binding_span={:?}",
562562
found_closing_brace, binding_span);
@@ -571,7 +571,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
571571
// ie. `use a::b::{c, d};`
572572
// ^^^
573573
if let Some(previous_span) = extend_span_to_previous_binding(
574-
self.resolver.session, binding_span,
574+
self.r.session, binding_span,
575575
) {
576576
debug!("check_for_module_export_macro: previous_span={:?}", previous_span);
577577
removal_span = removal_span.with_lo(previous_span.lo());
@@ -589,12 +589,12 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
589589
// or `use a::{b, c, d}};`
590590
// ^^^^^^^^^^^
591591
let (has_nested, after_crate_name) = find_span_immediately_after_crate_name(
592-
self.resolver.session, module_name, directive.use_span,
592+
self.r.session, module_name, directive.use_span,
593593
);
594594
debug!("check_for_module_export_macro: has_nested={:?} after_crate_name={:?}",
595595
has_nested, after_crate_name);
596596

597-
let source_map = self.resolver.session.source_map();
597+
let source_map = self.r.session.source_map();
598598

599599
// Add the import to the start, with a `{` if required.
600600
let start_point = source_map.start_point(after_crate_name);

0 commit comments

Comments
 (0)