@@ -8,7 +8,6 @@ use crate::{ModuleKind, ModuleOrUniformRoot, NameBinding, PathResult, Segment};
8
8
use rustc_ast:: { self as ast, Inline , ItemKind , ModKind , NodeId } ;
9
9
use rustc_ast_pretty:: pprust;
10
10
use rustc_attr:: StabilityLevel ;
11
- use rustc_data_structures:: fx:: FxHashSet ;
12
11
use rustc_data_structures:: intern:: Interned ;
13
12
use rustc_data_structures:: sync:: Lrc ;
14
13
use rustc_errors:: { struct_span_err, Applicability } ;
@@ -20,11 +19,11 @@ use rustc_hir::def::{self, DefKind, NonMacroAttrKind};
20
19
use rustc_hir:: def_id:: { CrateNum , LocalDefId } ;
21
20
use rustc_middle:: middle:: stability;
22
21
use rustc_middle:: ty:: RegisteredTools ;
22
+ use rustc_middle:: ty:: TyCtxt ;
23
23
use rustc_session:: lint:: builtin:: { LEGACY_DERIVE_HELPERS , SOFT_UNSTABLE } ;
24
24
use rustc_session:: lint:: builtin:: { UNUSED_MACROS , UNUSED_MACRO_RULES } ;
25
25
use rustc_session:: lint:: BuiltinLintDiagnostics ;
26
26
use rustc_session:: parse:: feature_err;
27
- use rustc_session:: Session ;
28
27
use rustc_span:: edition:: Edition ;
29
28
use rustc_span:: hygiene:: { self , ExpnData , ExpnKind , LocalExpnId } ;
30
29
use rustc_span:: hygiene:: { AstPass , MacroKind } ;
@@ -111,23 +110,28 @@ fn fast_print_path(path: &ast::Path) -> Symbol {
111
110
}
112
111
}
113
112
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) {
117
117
for nested_meta in attr. meta_item_list ( ) . unwrap_or_default ( ) {
118
118
match nested_meta. ident ( ) {
119
119
Some ( ident) => {
120
120
if let Some ( old_ident) = registered_tools. replace ( ident) {
121
121
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)
123
124
. span_label ( old_ident. span , "already registered here" )
124
125
. emit ( ) ;
125
126
}
126
127
}
127
128
None => {
128
129
let msg = format ! ( "`{}` only accepts identifiers" , sym:: register_tool) ;
129
130
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 ( ) ;
131
135
}
132
136
}
133
137
}
0 commit comments