1- use crate :: utils:: { in_macro_or_desugar, snippet, span_lint_and_then} ;
1+ use crate :: redundant_static_lifetime:: RedundantStaticLifetime ;
2+ use crate :: utils:: in_macro_or_desugar;
23use rustc:: lint:: { EarlyContext , EarlyLintPass , LintArray , LintPass } ;
34use rustc:: { declare_lint_pass, declare_tool_lint} ;
4- use rustc_errors:: Applicability ;
55use syntax:: ast:: * ;
66
77declare_clippy_lint ! {
@@ -31,51 +31,9 @@ declare_lint_pass!(StaticStatic => [STATIC_STATIC_LIFETIME]);
3131impl StaticStatic {
3232 // Recursively visit types
3333 fn visit_type ( & mut self , ty : & Ty , cx : & EarlyContext < ' _ > ) {
34- match ty. node {
35- // Be careful of nested structures (arrays and tuples)
36- TyKind :: Array ( ref ty, _) => {
37- self . visit_type ( & * ty, cx) ;
38- } ,
39- TyKind :: Tup ( ref tup) => {
40- for tup_ty in tup {
41- self . visit_type ( & * tup_ty, cx) ;
42- }
43- } ,
44- // This is what we are looking for !
45- TyKind :: Rptr ( ref optional_lifetime, ref borrow_type) => {
46- // Match the 'static lifetime
47- if let Some ( lifetime) = * optional_lifetime {
48- match borrow_type. ty . node {
49- TyKind :: Path ( ..) | TyKind :: Slice ( ..) | TyKind :: Array ( ..) | TyKind :: Tup ( ..) => {
50- if lifetime. ident . name == syntax:: symbol:: kw:: StaticLifetime {
51- let snip = snippet ( cx, borrow_type. ty . span , "<type>" ) ;
52- let sugg = format ! ( "&{}" , snip) ;
53- span_lint_and_then (
54- cx,
55- STATIC_STATIC_LIFETIME ,
56- lifetime. ident . span ,
57- "Statics have by default a `'static` lifetime" ,
58- |db| {
59- db. span_suggestion (
60- ty. span ,
61- "consider removing `'static`" ,
62- sugg,
63- Applicability :: MachineApplicable , //snippet
64- ) ;
65- } ,
66- ) ;
67- }
68- } ,
69- _ => { } ,
70- }
71- }
72- self . visit_type ( & * borrow_type. ty , cx) ;
73- } ,
74- TyKind :: Slice ( ref ty) => {
75- self . visit_type ( ty, cx) ;
76- } ,
77- _ => { } ,
78- }
34+ let mut rsl =
35+ RedundantStaticLifetime :: new ( STATIC_STATIC_LIFETIME , "Statics have by default a `'static` lifetime" ) ;
36+ rsl. visit_type ( ty, cx)
7937 }
8038}
8139
@@ -88,6 +46,4 @@ impl EarlyLintPass for StaticStatic {
8846 }
8947 }
9048 }
91-
92- // Don't check associated consts because `'static` cannot be elided on those (issue #2438)
9349}
0 commit comments