@@ -221,100 +221,102 @@ fn calc_unused_spans(
221221 }
222222}
223223
224- pub fn check_crate ( resolver : & mut Resolver < ' _ > , krate : & ast:: Crate ) {
225- for directive in resolver. potentially_unused_imports . iter ( ) {
226- match directive. subclass {
227- _ if directive. used . get ( ) ||
228- directive. vis . get ( ) == ty:: Visibility :: Public ||
229- directive. span . is_dummy ( ) => {
230- if let ImportDirectiveSubclass :: MacroUse = directive. subclass {
231- if !directive. span . is_dummy ( ) {
232- resolver. session . buffer_lint (
233- lint:: builtin:: MACRO_USE_EXTERN_CRATE ,
234- directive. id ,
235- directive. span ,
236- "deprecated `#[macro_use]` directive used to \
237- import macros should be replaced at use sites \
238- with a `use` statement to import the macro \
239- instead",
240- ) ;
224+ impl Resolver < ' _ > {
225+ crate fn check_unused ( & mut self , krate : & ast:: Crate ) {
226+ for directive in self . potentially_unused_imports . iter ( ) {
227+ match directive. subclass {
228+ _ if directive. used . get ( ) ||
229+ directive. vis . get ( ) == ty:: Visibility :: Public ||
230+ directive. span . is_dummy ( ) => {
231+ if let ImportDirectiveSubclass :: MacroUse = directive. subclass {
232+ if !directive. span . is_dummy ( ) {
233+ self . session . buffer_lint (
234+ lint:: builtin:: MACRO_USE_EXTERN_CRATE ,
235+ directive. id ,
236+ directive. span ,
237+ "deprecated `#[macro_use]` directive used to \
238+ import macros should be replaced at use sites \
239+ with a `use` statement to import the macro \
240+ instead",
241+ ) ;
242+ }
241243 }
242244 }
245+ ImportDirectiveSubclass :: ExternCrate { .. } => {
246+ self . maybe_unused_extern_crates . push ( ( directive. id , directive. span ) ) ;
247+ }
248+ ImportDirectiveSubclass :: MacroUse => {
249+ let lint = lint:: builtin:: UNUSED_IMPORTS ;
250+ let msg = "unused `#[macro_use]` import" ;
251+ self . session . buffer_lint ( lint, directive. id , directive. span , msg) ;
252+ }
253+ _ => { }
243254 }
244- ImportDirectiveSubclass :: ExternCrate { .. } => {
245- resolver. maybe_unused_extern_crates . push ( ( directive. id , directive. span ) ) ;
246- }
247- ImportDirectiveSubclass :: MacroUse => {
248- let lint = lint:: builtin:: UNUSED_IMPORTS ;
249- let msg = "unused `#[macro_use]` import" ;
250- resolver. session . buffer_lint ( lint, directive. id , directive. span , msg) ;
251- }
252- _ => { }
253255 }
254- }
255256
256- let mut visitor = UnusedImportCheckVisitor {
257- r : resolver,
258- unused_imports : Default :: default ( ) ,
259- base_use_tree : None ,
260- base_id : ast:: DUMMY_NODE_ID ,
261- item_span : DUMMY_SP ,
262- } ;
263- visit:: walk_crate ( & mut visitor, krate) ;
264-
265- for unused in visitor. unused_imports . values ( ) {
266- let mut fixes = Vec :: new ( ) ;
267- let mut spans = match calc_unused_spans ( unused, unused. use_tree , unused. use_tree_id ) {
268- UnusedSpanResult :: Used => continue ,
269- UnusedSpanResult :: FlatUnused ( span, remove) => {
270- fixes. push ( ( remove, String :: new ( ) ) ) ;
271- vec ! [ span]
272- }
273- UnusedSpanResult :: NestedFullUnused ( spans, remove) => {
274- fixes. push ( ( remove, String :: new ( ) ) ) ;
275- spans
276- }
277- UnusedSpanResult :: NestedPartialUnused ( spans, remove) => {
278- for fix in & remove {
279- fixes. push ( ( * fix, String :: new ( ) ) ) ;
280- }
281- spans
282- }
257+ let mut visitor = UnusedImportCheckVisitor {
258+ r : self ,
259+ unused_imports : Default :: default ( ) ,
260+ base_use_tree : None ,
261+ base_id : ast:: DUMMY_NODE_ID ,
262+ item_span : DUMMY_SP ,
283263 } ;
264+ visit:: walk_crate ( & mut visitor, krate) ;
284265
285- let len = spans. len ( ) ;
286- spans. sort ( ) ;
287- let ms = MultiSpan :: from_spans ( spans. clone ( ) ) ;
288- let mut span_snippets = spans. iter ( )
289- . filter_map ( |s| {
290- match visitor. r . session . source_map ( ) . span_to_snippet ( * s) {
291- Ok ( s) => Some ( format ! ( "`{}`" , s) ) ,
292- _ => None ,
266+ for unused in visitor. unused_imports . values ( ) {
267+ let mut fixes = Vec :: new ( ) ;
268+ let mut spans = match calc_unused_spans ( unused, unused. use_tree , unused. use_tree_id ) {
269+ UnusedSpanResult :: Used => continue ,
270+ UnusedSpanResult :: FlatUnused ( span, remove) => {
271+ fixes. push ( ( remove, String :: new ( ) ) ) ;
272+ vec ! [ span]
273+ }
274+ UnusedSpanResult :: NestedFullUnused ( spans, remove) => {
275+ fixes. push ( ( remove, String :: new ( ) ) ) ;
276+ spans
293277 }
294- } ) . collect :: < Vec < String > > ( ) ;
295- span_snippets. sort ( ) ;
296- let msg = format ! ( "unused import{}{}" ,
297- if len > 1 { "s" } else { "" } ,
298- if !span_snippets. is_empty( ) {
299- format!( ": {}" , span_snippets. join( ", " ) )
300- } else {
301- String :: new( )
302- } ) ;
278+ UnusedSpanResult :: NestedPartialUnused ( spans, remove) => {
279+ for fix in & remove {
280+ fixes. push ( ( * fix, String :: new ( ) ) ) ;
281+ }
282+ spans
283+ }
284+ } ;
303285
304- let fix_msg = if fixes. len ( ) == 1 && fixes[ 0 ] . 0 == unused. item_span {
305- "remove the whole `use` item"
306- } else if spans. len ( ) > 1 {
307- "remove the unused imports"
308- } else {
309- "remove the unused import"
310- } ;
286+ let len = spans. len ( ) ;
287+ spans. sort ( ) ;
288+ let ms = MultiSpan :: from_spans ( spans. clone ( ) ) ;
289+ let mut span_snippets = spans. iter ( )
290+ . filter_map ( |s| {
291+ match visitor. r . session . source_map ( ) . span_to_snippet ( * s) {
292+ Ok ( s) => Some ( format ! ( "`{}`" , s) ) ,
293+ _ => None ,
294+ }
295+ } ) . collect :: < Vec < String > > ( ) ;
296+ span_snippets. sort ( ) ;
297+ let msg = format ! ( "unused import{}{}" ,
298+ if len > 1 { "s" } else { "" } ,
299+ if !span_snippets. is_empty( ) {
300+ format!( ": {}" , span_snippets. join( ", " ) )
301+ } else {
302+ String :: new( )
303+ } ) ;
311304
312- visitor. r . session . buffer_lint_with_diagnostic (
313- lint:: builtin:: UNUSED_IMPORTS ,
314- unused. use_tree_id ,
315- ms,
316- & msg,
317- lint:: builtin:: BuiltinLintDiagnostics :: UnusedImports ( fix_msg. into ( ) , fixes) ,
318- ) ;
305+ let fix_msg = if fixes. len ( ) == 1 && fixes[ 0 ] . 0 == unused. item_span {
306+ "remove the whole `use` item"
307+ } else if spans. len ( ) > 1 {
308+ "remove the unused imports"
309+ } else {
310+ "remove the unused import"
311+ } ;
312+
313+ visitor. r . session . buffer_lint_with_diagnostic (
314+ lint:: builtin:: UNUSED_IMPORTS ,
315+ unused. use_tree_id ,
316+ ms,
317+ & msg,
318+ lint:: builtin:: BuiltinLintDiagnostics :: UnusedImports ( fix_msg. into ( ) , fixes) ,
319+ ) ;
320+ }
319321 }
320322}
0 commit comments