Skip to content

Commit 577d85f

Browse files
authored
Rollup merge of #109358 - petrochenkov:nosess, r=cjgillot
rustc: Remove unused `Session` argument from some attribute functions (One auxiliary test file containing one of these functions was unused, so I removed it instead of updating.)
2 parents 950aa3e + 67a2c5b commit 577d85f

File tree

37 files changed

+173
-299
lines changed

37 files changed

+173
-299
lines changed

compiler/rustc_ast/src/attr/mod.rs

+22
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ impl Attribute {
180180
self.doc_str().map_or(false, |s| comments::may_have_doc_links(s.as_str()))
181181
}
182182

183+
pub fn is_proc_macro_attr(&self) -> bool {
184+
[sym::proc_macro, sym::proc_macro_attribute, sym::proc_macro_derive]
185+
.iter()
186+
.any(|kind| self.has_name(*kind))
187+
}
188+
183189
/// Extracts the MetaItem from inside this Attribute.
184190
pub fn meta(&self) -> Option<MetaItem> {
185191
match &self.kind {
@@ -627,6 +633,22 @@ pub fn mk_attr_name_value_str(
627633
mk_attr(g, style, path, args, span)
628634
}
629635

636+
pub fn filter_by_name(attrs: &[Attribute], name: Symbol) -> impl Iterator<Item = &Attribute> {
637+
attrs.iter().filter(move |attr| attr.has_name(name))
638+
}
639+
640+
pub fn find_by_name(attrs: &[Attribute], name: Symbol) -> Option<&Attribute> {
641+
filter_by_name(attrs, name).next()
642+
}
643+
644+
pub fn first_attr_value_str_by_name(attrs: &[Attribute], name: Symbol) -> Option<Symbol> {
645+
find_by_name(attrs, name).and_then(|attr| attr.value_str())
646+
}
647+
648+
pub fn contains_name(attrs: &[Attribute], name: Symbol) -> bool {
649+
find_by_name(attrs, name).is_some()
650+
}
651+
630652
pub fn list_contains_name(items: &[NestedMetaItem], name: Symbol) -> bool {
631653
items.iter().any(|item| item.has_name(name))
632654
}

compiler/rustc_ast_lowering/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2185,7 +2185,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
21852185
def_id: self.local_def_id(param.id),
21862186
name,
21872187
span: self.lower_span(param.span()),
2188-
pure_wrt_drop: self.tcx.sess.contains_name(&param.attrs, sym::may_dangle),
2188+
pure_wrt_drop: attr::contains_name(&param.attrs, sym::may_dangle),
21892189
kind,
21902190
colon_span: param.colon_span.map(|s| self.lower_span(s)),
21912191
source,

compiler/rustc_ast_passes/src/ast_validation.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -799,11 +799,11 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
799799
}
800800

801801
fn visit_item(&mut self, item: &'a Item) {
802-
if item.attrs.iter().any(|attr| self.session.is_proc_macro_attr(attr)) {
802+
if item.attrs.iter().any(|attr| attr.is_proc_macro_attr()) {
803803
self.has_proc_macro_decls = true;
804804
}
805805

806-
if self.session.contains_name(&item.attrs, sym::no_mangle) {
806+
if attr::contains_name(&item.attrs, sym::no_mangle) {
807807
self.check_nomangle_item_asciionly(item.ident, item.span);
808808
}
809809

@@ -973,7 +973,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
973973
}
974974
// Ensure that `path` attributes on modules are recorded as used (cf. issue #35584).
975975
if !matches!(mod_kind, ModKind::Loaded(_, Inline::Yes, _))
976-
&& !self.session.contains_name(&item.attrs, sym::path)
976+
&& !attr::contains_name(&item.attrs, sym::path)
977977
{
978978
self.check_mod_file_item_asciionly(item.ident);
979979
}
@@ -1248,7 +1248,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
12481248
}
12491249

12501250
fn visit_assoc_item(&mut self, item: &'a AssocItem, ctxt: AssocCtxt) {
1251-
if self.session.contains_name(&item.attrs, sym::no_mangle) {
1251+
if attr::contains_name(&item.attrs, sym::no_mangle) {
12521252
self.check_nomangle_item_asciionly(item.ident, item.span);
12531253
}
12541254

compiler/rustc_ast_passes/src/feature_gate.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_ast as ast;
22
use rustc_ast::visit::{self, AssocCtxt, FnCtxt, FnKind, Visitor};
3-
use rustc_ast::{AssocConstraint, AssocConstraintKind, NodeId};
3+
use rustc_ast::{attr, AssocConstraint, AssocConstraintKind, NodeId};
44
use rustc_ast::{PatKind, RangeEnd};
55
use rustc_errors::{Applicability, StashKey};
66
use rustc_feature::{AttributeGate, BuiltinAttribute, Features, GateIssue, BUILTIN_ATTRIBUTE_MAP};
@@ -232,7 +232,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
232232
}
233233

234234
ast::ItemKind::Fn(..) => {
235-
if self.sess.contains_name(&i.attrs, sym::start) {
235+
if attr::contains_name(&i.attrs, sym::start) {
236236
gate_feature_post!(
237237
&self,
238238
start,
@@ -245,7 +245,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
245245
}
246246

247247
ast::ItemKind::Struct(..) => {
248-
for attr in self.sess.filter_by_name(&i.attrs, sym::repr) {
248+
for attr in attr::filter_by_name(&i.attrs, sym::repr) {
249249
for item in attr.meta_item_list().unwrap_or_else(ThinVec::new) {
250250
if item.has_name(sym::simd) {
251251
gate_feature_post!(
@@ -306,7 +306,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
306306
fn visit_foreign_item(&mut self, i: &'a ast::ForeignItem) {
307307
match i.kind {
308308
ast::ForeignItemKind::Fn(..) | ast::ForeignItemKind::Static(..) => {
309-
let link_name = self.sess.first_attr_value_str_by_name(&i.attrs, sym::link_name);
309+
let link_name = attr::first_attr_value_str_by_name(&i.attrs, sym::link_name);
310310
let links_to_llvm =
311311
link_name.map_or(false, |val| val.as_str().starts_with("llvm."));
312312
if links_to_llvm {

compiler/rustc_attr/src/builtin.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Parsing and validation of builtin attributes
22
3-
use rustc_ast as ast;
3+
use rustc_ast::{self as ast, attr};
44
use rustc_ast::{Attribute, LitKind, MetaItem, MetaItemKind, MetaItemLit, NestedMetaItem, NodeId};
55
use rustc_ast_pretty::pprust;
66
use rustc_feature::{find_gated_cfg, is_builtin_attr_name, Features, GatedCfg};
@@ -556,8 +556,8 @@ where
556556
(stab, const_stab, body_stab)
557557
}
558558

559-
pub fn find_crate_name(sess: &Session, attrs: &[Attribute]) -> Option<Symbol> {
560-
sess.first_attr_value_str_by_name(attrs, sym::crate_name)
559+
pub fn find_crate_name(attrs: &[Attribute]) -> Option<Symbol> {
560+
attr::first_attr_value_str_by_name(attrs, sym::crate_name)
561561
}
562562

563563
#[derive(Clone, Debug)]
@@ -1177,7 +1177,7 @@ fn allow_unstable<'a>(
11771177
attrs: &'a [Attribute],
11781178
symbol: Symbol,
11791179
) -> impl Iterator<Item = Symbol> + 'a {
1180-
let attrs = sess.filter_by_name(attrs, symbol);
1180+
let attrs = attr::filter_by_name(attrs, symbol);
11811181
let list = attrs
11821182
.filter_map(move |attr| {
11831183
attr.meta_item_list().or_else(|| {

compiler/rustc_builtin_macros/src/deriving/default.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::deriving::generic::ty::*;
22
use crate::deriving::generic::*;
33
use rustc_ast as ast;
4-
use rustc_ast::{walk_list, EnumDef, VariantData};
4+
use rustc_ast::{attr, walk_list, EnumDef, VariantData};
55
use rustc_errors::Applicability;
66
use rustc_expand::base::{Annotatable, DummyResult, ExtCtxt};
77
use rustc_span::symbol::Ident;
@@ -106,7 +106,7 @@ fn extract_default_variant<'a>(
106106
let default_variants: SmallVec<[_; 1]> = enum_def
107107
.variants
108108
.iter()
109-
.filter(|variant| cx.sess.contains_name(&variant.attrs, kw::Default))
109+
.filter(|variant| attr::contains_name(&variant.attrs, kw::Default))
110110
.collect();
111111

112112
let variant = match default_variants.as_slice() {
@@ -116,7 +116,7 @@ fn extract_default_variant<'a>(
116116
.variants
117117
.iter()
118118
.filter(|variant| matches!(variant.data, VariantData::Unit(..)))
119-
.filter(|variant| !cx.sess.contains_name(&variant.attrs, sym::non_exhaustive));
119+
.filter(|variant| !attr::contains_name(&variant.attrs, sym::non_exhaustive));
120120

121121
let mut diag = cx.struct_span_err(trait_span, "no default declared");
122122
diag.help("make a unit variant default by placing `#[default]` above it");
@@ -146,7 +146,7 @@ fn extract_default_variant<'a>(
146146
if v.span == variant.span {
147147
None
148148
} else {
149-
Some((cx.sess.find_by_name(&v.attrs, kw::Default)?.span, String::new()))
149+
Some((attr::find_by_name(&v.attrs, kw::Default)?.span, String::new()))
150150
}
151151
})
152152
.collect();
@@ -174,7 +174,7 @@ fn extract_default_variant<'a>(
174174
return Err(());
175175
}
176176

177-
if let Some(non_exhaustive_attr) = cx.sess.find_by_name(&variant.attrs, sym::non_exhaustive) {
177+
if let Some(non_exhaustive_attr) = attr::find_by_name(&variant.attrs, sym::non_exhaustive) {
178178
cx.struct_span_err(variant.ident.span, "default variant must be exhaustive")
179179
.span_label(non_exhaustive_attr.span, "declared `#[non_exhaustive]` here")
180180
.help("consider a manual implementation of `Default`")
@@ -191,7 +191,7 @@ fn validate_default_attribute(
191191
default_variant: &rustc_ast::Variant,
192192
) -> Result<(), ()> {
193193
let attrs: SmallVec<[_; 1]> =
194-
cx.sess.filter_by_name(&default_variant.attrs, kw::Default).collect();
194+
attr::filter_by_name(&default_variant.attrs, kw::Default).collect();
195195

196196
let attr = match attrs.as_slice() {
197197
[attr] => attr,

compiler/rustc_builtin_macros/src/proc_macro_harness.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_ast::ptr::P;
22
use rustc_ast::visit::{self, Visitor};
3-
use rustc_ast::{self as ast, NodeId};
3+
use rustc_ast::{self as ast, attr, NodeId};
44
use rustc_ast_pretty::pprust;
55
use rustc_expand::base::{parse_macro_name_and_helper_attrs, ExtCtxt, ResolverExpand};
66
use rustc_expand::expand::{AstFragment, ExpansionConfig};
@@ -34,7 +34,6 @@ enum ProcMacro {
3434
}
3535

3636
struct CollectProcMacros<'a> {
37-
sess: &'a Session,
3837
macros: Vec<ProcMacro>,
3938
in_root: bool,
4039
handler: &'a rustc_errors::Handler,
@@ -56,7 +55,6 @@ pub fn inject(
5655
let mut cx = ExtCtxt::new(sess, ecfg, resolver, None);
5756

5857
let mut collect = CollectProcMacros {
59-
sess,
6058
macros: Vec::new(),
6159
in_root: true,
6260
handler,
@@ -160,7 +158,7 @@ impl<'a> CollectProcMacros<'a> {
160158
impl<'a> Visitor<'a> for CollectProcMacros<'a> {
161159
fn visit_item(&mut self, item: &'a ast::Item) {
162160
if let ast::ItemKind::MacroDef(..) = item.kind {
163-
if self.is_proc_macro_crate && self.sess.contains_name(&item.attrs, sym::macro_export) {
161+
if self.is_proc_macro_crate && attr::contains_name(&item.attrs, sym::macro_export) {
164162
let msg =
165163
"cannot export macro_rules! macros from a `proc-macro` crate type currently";
166164
self.handler.span_err(self.source_map.guess_head_span(item.span), msg);
@@ -176,7 +174,7 @@ impl<'a> Visitor<'a> for CollectProcMacros<'a> {
176174
let mut found_attr: Option<&'a ast::Attribute> = None;
177175

178176
for attr in &item.attrs {
179-
if self.sess.is_proc_macro_attr(&attr) {
177+
if attr.is_proc_macro_attr() {
180178
if let Some(prev_attr) = found_attr {
181179
let prev_item = prev_attr.get_normal_item();
182180
let item = attr.get_normal_item();

compiler/rustc_builtin_macros/src/standard_library_imports.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use rustc_ast as ast;
1+
use rustc_ast::{self as ast, attr};
22
use rustc_expand::base::{ExtCtxt, ResolverExpand};
33
use rustc_expand::expand::ExpansionConfig;
44
use rustc_session::Session;
@@ -16,10 +16,10 @@ pub fn inject(
1616
let edition = sess.parse_sess.edition;
1717

1818
// the first name in this list is the crate name of the crate with the prelude
19-
let names: &[Symbol] = if sess.contains_name(&krate.attrs, sym::no_core) {
19+
let names: &[Symbol] = if attr::contains_name(&krate.attrs, sym::no_core) {
2020
return krate;
21-
} else if sess.contains_name(&krate.attrs, sym::no_std) {
22-
if sess.contains_name(&krate.attrs, sym::compiler_builtins) {
21+
} else if attr::contains_name(&krate.attrs, sym::no_std) {
22+
if attr::contains_name(&krate.attrs, sym::compiler_builtins) {
2323
&[sym::core]
2424
} else {
2525
&[sym::core, sym::compiler_builtins]

compiler/rustc_builtin_macros/src/test.rs

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
/// The expansion from a test function to the appropriate test struct for libtest
22
/// Ideally, this code would be in libtest but for efficiency and error messages it lives here.
33
use crate::util::{check_builtin_macro_attribute, warn_on_duplicate_attribute};
4-
use rustc_ast as ast;
54
use rustc_ast::ptr::P;
5+
use rustc_ast::{self as ast, attr};
66
use rustc_ast_pretty::pprust;
77
use rustc_errors::Applicability;
88
use rustc_expand::base::*;
9-
use rustc_session::Session;
109
use rustc_span::symbol::{sym, Ident, Symbol};
1110
use rustc_span::{FileNameDisplayPreference, Span};
1211
use std::iter;
@@ -291,14 +290,11 @@ pub fn expand_test_or_bench(
291290
),
292291
),
293292
// ignore: true | false
294-
field(
295-
"ignore",
296-
cx.expr_bool(sp, should_ignore(&cx.sess, &item)),
297-
),
293+
field("ignore", cx.expr_bool(sp, should_ignore(&item)),),
298294
// ignore_message: Some("...") | None
299295
field(
300296
"ignore_message",
301-
if let Some(msg) = should_ignore_message(cx, &item) {
297+
if let Some(msg) = should_ignore_message(&item) {
302298
cx.expr_some(sp, cx.expr_str(sp, msg))
303299
} else {
304300
cx.expr_none(sp)
@@ -425,12 +421,12 @@ enum ShouldPanic {
425421
Yes(Option<Symbol>),
426422
}
427423

428-
fn should_ignore(sess: &Session, i: &ast::Item) -> bool {
429-
sess.contains_name(&i.attrs, sym::ignore)
424+
fn should_ignore(i: &ast::Item) -> bool {
425+
attr::contains_name(&i.attrs, sym::ignore)
430426
}
431427

432-
fn should_ignore_message(cx: &ExtCtxt<'_>, i: &ast::Item) -> Option<Symbol> {
433-
match cx.sess.find_by_name(&i.attrs, sym::ignore) {
428+
fn should_ignore_message(i: &ast::Item) -> Option<Symbol> {
429+
match attr::find_by_name(&i.attrs, sym::ignore) {
434430
Some(attr) => {
435431
match attr.meta_item_list() {
436432
// Handle #[ignore(bar = "foo")]
@@ -444,7 +440,7 @@ fn should_ignore_message(cx: &ExtCtxt<'_>, i: &ast::Item) -> Option<Symbol> {
444440
}
445441

446442
fn should_panic(cx: &ExtCtxt<'_>, i: &ast::Item) -> ShouldPanic {
447-
match cx.sess.find_by_name(&i.attrs, sym::should_panic) {
443+
match attr::find_by_name(&i.attrs, sym::should_panic) {
448444
Some(attr) => {
449445
let sd = &cx.sess.parse_sess.span_diagnostic;
450446

@@ -510,7 +506,7 @@ fn test_type(cx: &ExtCtxt<'_>) -> TestType {
510506
}
511507

512508
fn has_test_signature(cx: &ExtCtxt<'_>, i: &ast::Item) -> bool {
513-
let has_should_panic_attr = cx.sess.contains_name(&i.attrs, sym::should_panic);
509+
let has_should_panic_attr = attr::contains_name(&i.attrs, sym::should_panic);
514510
let sd = &cx.sess.parse_sess.span_diagnostic;
515511
match &i.kind {
516512
ast::ItemKind::Fn(box ast::Fn { sig, generics, .. }) => {

compiler/rustc_builtin_macros/src/test_harness.rs

+11-15
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ pub fn inject(sess: &Session, resolver: &mut dyn ResolverExpand, krate: &mut ast
4747
// unconditional, so that the attribute is still marked as used in
4848
// non-test builds.
4949
let reexport_test_harness_main =
50-
sess.first_attr_value_str_by_name(&krate.attrs, sym::reexport_test_harness_main);
50+
attr::first_attr_value_str_by_name(&krate.attrs, sym::reexport_test_harness_main);
5151

5252
// Do this here so that the test_runner crate attribute gets marked as used
5353
// even in non-test builds
54-
let test_runner = get_test_runner(sess, span_diagnostic, &krate);
54+
let test_runner = get_test_runner(span_diagnostic, &krate);
5555

5656
if sess.opts.test {
5757
let panic_strategy = match (panic_strategy, sess.opts.unstable_opts.panic_abort_tests) {
@@ -123,7 +123,7 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
123123

124124
fn flat_map_item(&mut self, i: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
125125
let mut item = i.into_inner();
126-
if let Some(name) = get_test_name(&self.cx.ext_cx.sess, &item) {
126+
if let Some(name) = get_test_name(&item) {
127127
debug!("this is a test item");
128128

129129
let test = Test { span: item.span, ident: item.ident, name };
@@ -145,12 +145,12 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
145145

146146
// Beware, this is duplicated in librustc_passes/entry.rs (with
147147
// `rustc_hir::Item`), so make sure to keep them in sync.
148-
fn entry_point_type(sess: &Session, item: &ast::Item, depth: usize) -> EntryPointType {
148+
fn entry_point_type(item: &ast::Item, depth: usize) -> EntryPointType {
149149
match item.kind {
150150
ast::ItemKind::Fn(..) => {
151-
if sess.contains_name(&item.attrs, sym::start) {
151+
if attr::contains_name(&item.attrs, sym::start) {
152152
EntryPointType::Start
153-
} else if sess.contains_name(&item.attrs, sym::rustc_main) {
153+
} else if attr::contains_name(&item.attrs, sym::rustc_main) {
154154
EntryPointType::RustcMainAttr
155155
} else if item.ident.name == sym::main {
156156
if depth == 0 {
@@ -184,7 +184,7 @@ impl<'a> MutVisitor for EntryPointCleaner<'a> {
184184
// Remove any #[rustc_main] or #[start] from the AST so it doesn't
185185
// clash with the one we're going to add, but mark it as
186186
// #[allow(dead_code)] to avoid printing warnings.
187-
let item = match entry_point_type(self.sess, &item, self.depth) {
187+
let item = match entry_point_type(&item, self.depth) {
188188
EntryPointType::MainNamed | EntryPointType::RustcMainAttr | EntryPointType::Start => {
189189
item.map(|ast::Item { id, ident, attrs, kind, vis, span, tokens }| {
190190
let allow_dead_code = attr::mk_attr_nested_word(
@@ -373,16 +373,12 @@ fn mk_tests_slice(cx: &TestCtxt<'_>, sp: Span) -> P<ast::Expr> {
373373
)
374374
}
375375

376-
fn get_test_name(sess: &Session, i: &ast::Item) -> Option<Symbol> {
377-
sess.first_attr_value_str_by_name(&i.attrs, sym::rustc_test_marker)
376+
fn get_test_name(i: &ast::Item) -> Option<Symbol> {
377+
attr::first_attr_value_str_by_name(&i.attrs, sym::rustc_test_marker)
378378
}
379379

380-
fn get_test_runner(
381-
sess: &Session,
382-
sd: &rustc_errors::Handler,
383-
krate: &ast::Crate,
384-
) -> Option<ast::Path> {
385-
let test_attr = sess.find_by_name(&krate.attrs, sym::test_runner)?;
380+
fn get_test_runner(sd: &rustc_errors::Handler, krate: &ast::Crate) -> Option<ast::Path> {
381+
let test_attr = attr::find_by_name(&krate.attrs, sym::test_runner)?;
386382
let meta_list = test_attr.meta_item_list()?;
387383
let span = test_attr.span;
388384
match &*meta_list {

0 commit comments

Comments
 (0)