Pass real crate-level attributes to pre_expansion_lint
This commit is contained in:
parent
551220c48d
commit
1e15bbe552
3 changed files with 29 additions and 6 deletions
|
@ -240,6 +240,7 @@ fn pre_expansion_lint(
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
lint_store: &LintStore,
|
lint_store: &LintStore,
|
||||||
krate: &ast::Crate,
|
krate: &ast::Crate,
|
||||||
|
crate_attrs: &[ast::Attribute],
|
||||||
crate_name: &str,
|
crate_name: &str,
|
||||||
) {
|
) {
|
||||||
sess.prof.generic_activity_with_arg("pre_AST_expansion_lint_checks", crate_name).run(|| {
|
sess.prof.generic_activity_with_arg("pre_AST_expansion_lint_checks", crate_name).run(|| {
|
||||||
|
@ -247,6 +248,7 @@ fn pre_expansion_lint(
|
||||||
sess,
|
sess,
|
||||||
lint_store,
|
lint_store,
|
||||||
&krate,
|
&krate,
|
||||||
|
crate_attrs,
|
||||||
true,
|
true,
|
||||||
None,
|
None,
|
||||||
rustc_lint::BuiltinCombinedPreExpansionLintPass::new(),
|
rustc_lint::BuiltinCombinedPreExpansionLintPass::new(),
|
||||||
|
@ -266,7 +268,7 @@ pub fn configure_and_expand(
|
||||||
resolver: &mut Resolver<'_>,
|
resolver: &mut Resolver<'_>,
|
||||||
) -> Result<ast::Crate> {
|
) -> Result<ast::Crate> {
|
||||||
tracing::trace!("configure_and_expand");
|
tracing::trace!("configure_and_expand");
|
||||||
pre_expansion_lint(sess, lint_store, &krate, crate_name);
|
pre_expansion_lint(sess, lint_store, &krate, &krate.attrs, crate_name);
|
||||||
rustc_builtin_macros::register_builtin_macros(resolver);
|
rustc_builtin_macros::register_builtin_macros(resolver);
|
||||||
|
|
||||||
krate = sess.time("crate_injection", || {
|
krate = sess.time("crate_injection", || {
|
||||||
|
@ -323,9 +325,10 @@ pub fn configure_and_expand(
|
||||||
..rustc_expand::expand::ExpansionConfig::default(crate_name.to_string())
|
..rustc_expand::expand::ExpansionConfig::default(crate_name.to_string())
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let crate_attrs = krate.attrs.clone();
|
||||||
let extern_mod_loaded = |ident: Ident, attrs, items, span| {
|
let extern_mod_loaded = |ident: Ident, attrs, items, span| {
|
||||||
let krate = ast::Crate { attrs, items, span };
|
let krate = ast::Crate { attrs, items, span };
|
||||||
pre_expansion_lint(sess, lint_store, &krate, &ident.name.as_str());
|
pre_expansion_lint(sess, lint_store, &krate, &crate_attrs, &ident.name.as_str());
|
||||||
(krate.attrs, krate.items)
|
(krate.attrs, krate.items)
|
||||||
};
|
};
|
||||||
let mut ecx = ExtCtxt::new(&sess, cfg, resolver, Some(&extern_mod_loaded));
|
let mut ecx = ExtCtxt::new(&sess, cfg, resolver, Some(&extern_mod_loaded));
|
||||||
|
@ -469,6 +472,7 @@ pub fn lower_to_hir<'res, 'tcx>(
|
||||||
sess,
|
sess,
|
||||||
lint_store,
|
lint_store,
|
||||||
&krate,
|
&krate,
|
||||||
|
&krate.attrs,
|
||||||
false,
|
false,
|
||||||
Some(std::mem::take(resolver.lint_buffer())),
|
Some(std::mem::take(resolver.lint_buffer())),
|
||||||
rustc_lint::BuiltinCombinedEarlyLintPass::new(),
|
rustc_lint::BuiltinCombinedEarlyLintPass::new(),
|
||||||
|
|
|
@ -805,6 +805,7 @@ impl<'a> EarlyContext<'a> {
|
||||||
sess: &'a Session,
|
sess: &'a Session,
|
||||||
lint_store: &'a LintStore,
|
lint_store: &'a LintStore,
|
||||||
krate: &'a ast::Crate,
|
krate: &'a ast::Crate,
|
||||||
|
crate_attrs: &'a [ast::Attribute],
|
||||||
buffered: LintBuffer,
|
buffered: LintBuffer,
|
||||||
warn_about_weird_lints: bool,
|
warn_about_weird_lints: bool,
|
||||||
) -> EarlyContext<'a> {
|
) -> EarlyContext<'a> {
|
||||||
|
@ -812,7 +813,7 @@ impl<'a> EarlyContext<'a> {
|
||||||
sess,
|
sess,
|
||||||
krate,
|
krate,
|
||||||
lint_store,
|
lint_store,
|
||||||
builder: LintLevelsBuilder::new(sess, warn_about_weird_lints, lint_store, &krate.attrs),
|
builder: LintLevelsBuilder::new(sess, warn_about_weird_lints, lint_store, crate_attrs),
|
||||||
buffered,
|
buffered,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -329,12 +329,20 @@ fn early_lint_crate<T: EarlyLintPass>(
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
lint_store: &LintStore,
|
lint_store: &LintStore,
|
||||||
krate: &ast::Crate,
|
krate: &ast::Crate,
|
||||||
|
crate_attrs: &[ast::Attribute],
|
||||||
pass: T,
|
pass: T,
|
||||||
buffered: LintBuffer,
|
buffered: LintBuffer,
|
||||||
warn_about_weird_lints: bool,
|
warn_about_weird_lints: bool,
|
||||||
) -> LintBuffer {
|
) -> LintBuffer {
|
||||||
let mut cx = EarlyContextAndPass {
|
let mut cx = EarlyContextAndPass {
|
||||||
context: EarlyContext::new(sess, lint_store, krate, buffered, warn_about_weird_lints),
|
context: EarlyContext::new(
|
||||||
|
sess,
|
||||||
|
lint_store,
|
||||||
|
krate,
|
||||||
|
crate_attrs,
|
||||||
|
buffered,
|
||||||
|
warn_about_weird_lints,
|
||||||
|
),
|
||||||
pass,
|
pass,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -355,6 +363,7 @@ pub fn check_ast_crate<T: EarlyLintPass>(
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
lint_store: &LintStore,
|
lint_store: &LintStore,
|
||||||
krate: &ast::Crate,
|
krate: &ast::Crate,
|
||||||
|
crate_attrs: &[ast::Attribute],
|
||||||
pre_expansion: bool,
|
pre_expansion: bool,
|
||||||
lint_buffer: Option<LintBuffer>,
|
lint_buffer: Option<LintBuffer>,
|
||||||
builtin_lints: T,
|
builtin_lints: T,
|
||||||
|
@ -365,14 +374,22 @@ pub fn check_ast_crate<T: EarlyLintPass>(
|
||||||
let mut buffered = lint_buffer.unwrap_or_default();
|
let mut buffered = lint_buffer.unwrap_or_default();
|
||||||
|
|
||||||
if !sess.opts.debugging_opts.no_interleave_lints {
|
if !sess.opts.debugging_opts.no_interleave_lints {
|
||||||
buffered =
|
buffered = early_lint_crate(
|
||||||
early_lint_crate(sess, lint_store, krate, builtin_lints, buffered, pre_expansion);
|
sess,
|
||||||
|
lint_store,
|
||||||
|
krate,
|
||||||
|
crate_attrs,
|
||||||
|
builtin_lints,
|
||||||
|
buffered,
|
||||||
|
pre_expansion,
|
||||||
|
);
|
||||||
|
|
||||||
if !passes.is_empty() {
|
if !passes.is_empty() {
|
||||||
buffered = early_lint_crate(
|
buffered = early_lint_crate(
|
||||||
sess,
|
sess,
|
||||||
lint_store,
|
lint_store,
|
||||||
krate,
|
krate,
|
||||||
|
crate_attrs,
|
||||||
EarlyLintPassObjects { lints: &mut passes[..] },
|
EarlyLintPassObjects { lints: &mut passes[..] },
|
||||||
buffered,
|
buffered,
|
||||||
false,
|
false,
|
||||||
|
@ -386,6 +403,7 @@ pub fn check_ast_crate<T: EarlyLintPass>(
|
||||||
sess,
|
sess,
|
||||||
lint_store,
|
lint_store,
|
||||||
krate,
|
krate,
|
||||||
|
crate_attrs,
|
||||||
EarlyLintPassObjects { lints: slice::from_mut(pass) },
|
EarlyLintPassObjects { lints: slice::from_mut(pass) },
|
||||||
buffered,
|
buffered,
|
||||||
pre_expansion && i == 0,
|
pre_expansion && i == 0,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue