@@ -8,7 +8,6 @@ use crate::{ModuleKind, ModuleOrUniformRoot, NameBinding, PathResult, Segment};
88use rustc_ast:: { self as ast, Inline , ItemKind , ModKind , NodeId } ;
99use rustc_ast_pretty:: pprust;
1010use rustc_attr:: StabilityLevel ;
11- use rustc_data_structures:: fx:: FxHashSet ;
1211use rustc_data_structures:: intern:: Interned ;
1312use rustc_data_structures:: sync:: Lrc ;
1413use rustc_errors:: { struct_span_err, Applicability } ;
@@ -20,11 +19,11 @@ use rustc_hir::def::{self, DefKind, NonMacroAttrKind};
2019use rustc_hir:: def_id:: { CrateNum , LocalDefId } ;
2120use rustc_middle:: middle:: stability;
2221use rustc_middle:: ty:: RegisteredTools ;
22+ use rustc_middle:: ty:: TyCtxt ;
2323use rustc_session:: lint:: builtin:: { LEGACY_DERIVE_HELPERS , SOFT_UNSTABLE } ;
2424use rustc_session:: lint:: builtin:: { UNUSED_MACROS , UNUSED_MACRO_RULES } ;
2525use rustc_session:: lint:: BuiltinLintDiagnostics ;
2626use rustc_session:: parse:: feature_err;
27- use rustc_session:: Session ;
2827use rustc_span:: edition:: Edition ;
2928use rustc_span:: hygiene:: { self , ExpnData , ExpnKind , LocalExpnId } ;
3029use rustc_span:: hygiene:: { AstPass , MacroKind } ;
@@ -111,23 +110,28 @@ fn fast_print_path(path: &ast::Path) -> Symbol {
111110 }
112111}
113112
114- pub ( crate ) fn registered_tools ( sess : & Session , attrs : & [ ast:: Attribute ] ) -> FxHashSet < Ident > {
115- let mut registered_tools = FxHashSet :: default ( ) ;
116- for attr in sess. filter_by_name ( attrs, sym:: register_tool) {
113+ pub ( crate ) fn registered_tools ( tcx : TyCtxt < ' _ > , ( ) : ( ) ) -> RegisteredTools {
114+ let mut registered_tools = RegisteredTools :: default ( ) ;
115+ let krate = tcx. crate_for_resolver ( ( ) ) . borrow ( ) ;
116+ for attr in tcx. sess . filter_by_name ( & krate. attrs , sym:: register_tool) {
117117 for nested_meta in attr. meta_item_list ( ) . unwrap_or_default ( ) {
118118 match nested_meta. ident ( ) {
119119 Some ( ident) => {
120120 if let Some ( old_ident) = registered_tools. replace ( ident) {
121121 let msg = format ! ( "{} `{}` was already registered" , "tool" , ident) ;
122- sess. struct_span_err ( ident. span , & msg)
122+ tcx. sess
123+ . struct_span_err ( ident. span , & msg)
123124 . span_label ( old_ident. span , "already registered here" )
124125 . emit ( ) ;
125126 }
126127 }
127128 None => {
128129 let msg = format ! ( "`{}` only accepts identifiers" , sym:: register_tool) ;
129130 let span = nested_meta. span ( ) ;
130- sess. struct_span_err ( span, & msg) . span_label ( span, "not an identifier" ) . emit ( ) ;
131+ tcx. sess
132+ . struct_span_err ( span, & msg)
133+ . span_label ( span, "not an identifier" )
134+ . emit ( ) ;
131135 }
132136 }
133137 }
0 commit comments