1
Fork 0

Rollup merge of #139184 - Urgau:crate-root-lint-levels, r=jieyouxu

Add unstable `--print=crate-root-lint-levels`

This PR implements `--print=crate-root-lint-levels` from MCP 833 https://github.com/rust-lang/compiler-team/issues/833.

Tracking issue: https://github.com/rust-lang/rust/issues/139180

Best reviewed commit by commit.
This commit is contained in:
Takayuki Maeda 2025-04-02 22:52:45 +09:00 committed by GitHub
commit eb23a597c8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 213 additions and 9 deletions

View file

@ -88,6 +88,8 @@ mod late;
mod macros;
pub mod rustdoc;
pub use macros::registered_tools_ast;
rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
#[derive(Debug)]

View file

@ -10,7 +10,7 @@ use rustc_ast::{self as ast, Crate, NodeId, attr};
use rustc_ast_pretty::pprust;
use rustc_attr_parsing::{AttributeKind, StabilityLevel, find_attr};
use rustc_data_structures::intern::Interned;
use rustc_errors::{Applicability, StashKey};
use rustc_errors::{Applicability, DiagCtxtHandle, StashKey};
use rustc_expand::base::{
DeriveResolution, Indeterminate, ResolverExpand, SyntaxExtension, SyntaxExtensionKind,
};
@ -124,14 +124,21 @@ fn fast_print_path(path: &ast::Path) -> Symbol {
}
pub(crate) fn registered_tools(tcx: TyCtxt<'_>, (): ()) -> RegisteredTools {
let mut registered_tools = RegisteredTools::default();
let (_, pre_configured_attrs) = &*tcx.crate_for_resolver(()).borrow();
registered_tools_ast(tcx.dcx(), pre_configured_attrs)
}
pub fn registered_tools_ast(
dcx: DiagCtxtHandle<'_>,
pre_configured_attrs: &[ast::Attribute],
) -> RegisteredTools {
let mut registered_tools = RegisteredTools::default();
for attr in attr::filter_by_name(pre_configured_attrs, sym::register_tool) {
for meta_item_inner in attr.meta_item_list().unwrap_or_default() {
match meta_item_inner.ident() {
Some(ident) => {
if let Some(old_ident) = registered_tools.replace(ident) {
tcx.dcx().emit_err(errors::ToolWasAlreadyRegistered {
dcx.emit_err(errors::ToolWasAlreadyRegistered {
span: ident.span,
tool: ident,
old_ident_span: old_ident.span,
@ -139,7 +146,7 @@ pub(crate) fn registered_tools(tcx: TyCtxt<'_>, (): ()) -> RegisteredTools {
}
}
None => {
tcx.dcx().emit_err(errors::ToolOnlyAcceptsIdentifiers {
dcx.emit_err(errors::ToolOnlyAcceptsIdentifiers {
span: meta_item_inner.span(),
tool: sym::register_tool,
});