Rollup merge of #130419 - nnethercote:streamline-HirCollector, r=GuillaumeGomez
Streamline `HirCollector` r? `@GuillaumeGomez`
This commit is contained in:
commit
c9b907a567
@ -63,7 +63,7 @@ fn constness(&self) -> Option<Span> {
|
||||
}
|
||||
|
||||
struct AstValidator<'a> {
|
||||
session: &'a Session,
|
||||
sess: &'a Session,
|
||||
features: &'a Features,
|
||||
|
||||
/// The span of the `extern` in an `extern { ... }` block, if any.
|
||||
@ -267,7 +267,7 @@ fn visit_struct_field_def(&mut self, field: &'a FieldDef) {
|
||||
}
|
||||
|
||||
fn dcx(&self) -> DiagCtxtHandle<'a> {
|
||||
self.session.dcx()
|
||||
self.sess.dcx()
|
||||
}
|
||||
|
||||
fn visibility_not_permitted(&self, vis: &Visibility, note: errors::VisibilityNotPermittedNote) {
|
||||
@ -359,7 +359,7 @@ fn check_trait_fn_not_const(&self, constness: Const, parent: &TraitOrTraitImpl)
|
||||
in_impl: matches!(parent, TraitOrTraitImpl::TraitImpl { .. }),
|
||||
const_context_label: parent_constness,
|
||||
remove_const_sugg: (
|
||||
self.session.source_map().span_extend_while_whitespace(span),
|
||||
self.sess.source_map().span_extend_while_whitespace(span),
|
||||
match parent_constness {
|
||||
Some(_) => rustc_errors::Applicability::MachineApplicable,
|
||||
None => rustc_errors::Applicability::MaybeIncorrect,
|
||||
@ -472,7 +472,7 @@ fn check_bare_fn_safety(&self, span: Span, safety: Safety) {
|
||||
|
||||
fn check_defaultness(&self, span: Span, defaultness: Defaultness) {
|
||||
if let Defaultness::Default(def_span) = defaultness {
|
||||
let span = self.session.source_map().guess_head_span(span);
|
||||
let span = self.sess.source_map().guess_head_span(span);
|
||||
self.dcx().emit_err(errors::ForbiddenDefault { span, def_span });
|
||||
}
|
||||
}
|
||||
@ -480,7 +480,7 @@ fn check_defaultness(&self, span: Span, defaultness: Defaultness) {
|
||||
/// If `sp` ends with a semicolon, returns it as a `Span`
|
||||
/// Otherwise, returns `sp.shrink_to_hi()`
|
||||
fn ending_semi_or_hi(&self, sp: Span) -> Span {
|
||||
let source_map = self.session.source_map();
|
||||
let source_map = self.sess.source_map();
|
||||
let end = source_map.end_point(sp);
|
||||
|
||||
if source_map.span_to_snippet(end).is_ok_and(|s| s == ";") {
|
||||
@ -552,7 +552,7 @@ fn check_foreign_fn_bodyless(&self, ident: Ident, body: Option<&Block>) {
|
||||
}
|
||||
|
||||
fn current_extern_span(&self) -> Span {
|
||||
self.session.source_map().guess_head_span(self.extern_mod.unwrap())
|
||||
self.sess.source_map().guess_head_span(self.extern_mod.unwrap())
|
||||
}
|
||||
|
||||
/// An `fn` in `extern { ... }` cannot have qualifiers, e.g. `async fn`.
|
||||
@ -648,7 +648,7 @@ fn check_nomangle_item_asciionly(&self, ident: Ident, item_span: Span) {
|
||||
if ident.name.as_str().is_ascii() {
|
||||
return;
|
||||
}
|
||||
let span = self.session.source_map().guess_head_span(item_span);
|
||||
let span = self.sess.source_map().guess_head_span(item_span);
|
||||
self.dcx().emit_err(errors::NoMangleAscii { span });
|
||||
}
|
||||
|
||||
@ -753,7 +753,7 @@ fn visit_ty_common(&mut self, ty: &'a Ty) {
|
||||
self.dcx().emit_err(errors::PatternFnPointer { span });
|
||||
});
|
||||
if let Extern::Implicit(_) = bfty.ext {
|
||||
let sig_span = self.session.source_map().next_point(ty.span.shrink_to_lo());
|
||||
let sig_span = self.sess.source_map().next_point(ty.span.shrink_to_lo());
|
||||
self.maybe_lint_missing_abi(sig_span, ty.id);
|
||||
}
|
||||
}
|
||||
@ -795,7 +795,7 @@ fn maybe_lint_missing_abi(&mut self, span: Span, id: NodeId) {
|
||||
// FIXME(davidtwco): This is a hack to detect macros which produce spans of the
|
||||
// call site which do not have a macro backtrace. See #61963.
|
||||
if self
|
||||
.session
|
||||
.sess
|
||||
.source_map()
|
||||
.span_to_snippet(span)
|
||||
.is_ok_and(|snippet| !snippet.starts_with("#["))
|
||||
@ -885,7 +885,7 @@ fn validate_generic_param_order(dcx: DiagCtxtHandle<'_>, generics: &[GenericPara
|
||||
|
||||
impl<'a> Visitor<'a> for AstValidator<'a> {
|
||||
fn visit_attribute(&mut self, attr: &Attribute) {
|
||||
validate_attr::check_attr(&self.session.psess, attr);
|
||||
validate_attr::check_attr(&self.sess.psess, attr);
|
||||
}
|
||||
|
||||
fn visit_ty(&mut self, ty: &'a Ty) {
|
||||
@ -1192,7 +1192,7 @@ fn visit_item(&mut self, item: &'a Item) {
|
||||
} else if where_clauses.after.has_where_token {
|
||||
self.dcx().emit_err(errors::WhereClauseAfterTypeAlias {
|
||||
span: where_clauses.after.span,
|
||||
help: self.session.is_nightly_build(),
|
||||
help: self.sess.is_nightly_build(),
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1328,7 +1328,7 @@ fn visit_param_bound(&mut self, bound: &'a GenericBound, ctxt: BoundKind) {
|
||||
(BoundKind::SuperTraits, BoundConstness::Never, BoundPolarity::Maybe(_))
|
||||
if !self.features.more_maybe_bounds =>
|
||||
{
|
||||
self.session
|
||||
self.sess
|
||||
.create_feature_err(
|
||||
errors::OptionalTraitSupertrait {
|
||||
span: trait_ref.span,
|
||||
@ -1341,7 +1341,7 @@ fn visit_param_bound(&mut self, bound: &'a GenericBound, ctxt: BoundKind) {
|
||||
(BoundKind::TraitObject, BoundConstness::Never, BoundPolarity::Maybe(_))
|
||||
if !self.features.more_maybe_bounds =>
|
||||
{
|
||||
self.session
|
||||
self.sess
|
||||
.create_feature_err(
|
||||
errors::OptionalTraitObject { span: trait_ref.span },
|
||||
sym::more_maybe_bounds,
|
||||
@ -1752,13 +1752,13 @@ fn deny_equality_constraints(
|
||||
}
|
||||
|
||||
pub fn check_crate(
|
||||
session: &Session,
|
||||
sess: &Session,
|
||||
features: &Features,
|
||||
krate: &Crate,
|
||||
lints: &mut LintBuffer,
|
||||
) -> bool {
|
||||
let mut validator = AstValidator {
|
||||
session,
|
||||
sess,
|
||||
features,
|
||||
extern_mod: None,
|
||||
outer_trait_or_trait_impl: None,
|
||||
|
@ -186,8 +186,6 @@ pub(crate) fn run(
|
||||
|
||||
let mut collector = CreateRunnableDocTests::new(options, opts);
|
||||
let hir_collector = HirCollector::new(
|
||||
&compiler.sess,
|
||||
tcx.hir(),
|
||||
ErrorCodes::from(compiler.sess.opts.unstable_features.is_nightly_build()),
|
||||
enable_per_target_ignores,
|
||||
tcx,
|
||||
|
@ -6,11 +6,9 @@
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
use rustc_hir::def_id::{CRATE_DEF_ID, LocalDefId};
|
||||
use rustc_hir::{self as hir, CRATE_HIR_ID, intravisit};
|
||||
use rustc_middle::hir::map::Map;
|
||||
use rustc_middle::hir::nested_filter;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_resolve::rustdoc::span_of_fragments;
|
||||
use rustc_session::Session;
|
||||
use rustc_span::source_map::SourceMap;
|
||||
use rustc_span::{BytePos, DUMMY_SP, FileName, Pos, Span};
|
||||
|
||||
@ -63,30 +61,22 @@ fn visit_test(&mut self, test: String, config: LangString, rel_line: MdRelLine)
|
||||
fn visit_header(&mut self, _name: &str, _level: u32) {}
|
||||
}
|
||||
|
||||
pub(super) struct HirCollector<'a, 'tcx> {
|
||||
sess: &'a Session,
|
||||
map: Map<'tcx>,
|
||||
pub(super) struct HirCollector<'tcx> {
|
||||
codes: ErrorCodes,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
enable_per_target_ignores: bool,
|
||||
collector: RustCollector,
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> HirCollector<'a, 'tcx> {
|
||||
pub fn new(
|
||||
sess: &'a Session,
|
||||
map: Map<'tcx>,
|
||||
codes: ErrorCodes,
|
||||
enable_per_target_ignores: bool,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
) -> Self {
|
||||
impl<'tcx> HirCollector<'tcx> {
|
||||
pub fn new(codes: ErrorCodes, enable_per_target_ignores: bool, tcx: TyCtxt<'tcx>) -> Self {
|
||||
let collector = RustCollector {
|
||||
source_map: sess.psess.clone_source_map(),
|
||||
source_map: tcx.sess.psess.clone_source_map(),
|
||||
cur_path: vec![],
|
||||
position: DUMMY_SP,
|
||||
tests: vec![],
|
||||
};
|
||||
Self { sess, map, codes, enable_per_target_ignores, tcx, collector }
|
||||
Self { codes, enable_per_target_ignores, tcx, collector }
|
||||
}
|
||||
|
||||
pub fn collect_crate(mut self) -> Vec<ScrapedDocTest> {
|
||||
@ -98,7 +88,7 @@ pub fn collect_crate(mut self) -> Vec<ScrapedDocTest> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> HirCollector<'a, 'tcx> {
|
||||
impl<'tcx> HirCollector<'tcx> {
|
||||
fn visit_testable<F: FnOnce(&mut Self)>(
|
||||
&mut self,
|
||||
name: String,
|
||||
@ -108,7 +98,7 @@ fn visit_testable<F: FnOnce(&mut Self)>(
|
||||
) {
|
||||
let ast_attrs = self.tcx.hir().attrs(self.tcx.local_def_id_to_hir_id(def_id));
|
||||
if let Some(ref cfg) = ast_attrs.cfg(self.tcx, &FxHashSet::default()) {
|
||||
if !cfg.matches(&self.sess.psess, Some(self.tcx.features())) {
|
||||
if !cfg.matches(&self.tcx.sess.psess, Some(self.tcx.features())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -141,17 +131,17 @@ fn visit_testable<F: FnOnce(&mut Self)>(
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> intravisit::Visitor<'tcx> for HirCollector<'a, 'tcx> {
|
||||
impl<'tcx> intravisit::Visitor<'tcx> for HirCollector<'tcx> {
|
||||
type NestedFilter = nested_filter::All;
|
||||
|
||||
fn nested_visit_map(&mut self) -> Self::Map {
|
||||
self.map
|
||||
self.tcx.hir()
|
||||
}
|
||||
|
||||
fn visit_item(&mut self, item: &'tcx hir::Item<'_>) {
|
||||
let name = match &item.kind {
|
||||
hir::ItemKind::Impl(impl_) => {
|
||||
rustc_hir_pretty::id_to_string(&self.map, impl_.self_ty.hir_id)
|
||||
rustc_hir_pretty::id_to_string(&self.tcx.hir(), impl_.self_ty.hir_id)
|
||||
}
|
||||
_ => item.ident.to_string(),
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user