]> git.lizzy.rs Git - rust.git/blob - src/lib.rs
Add check on redundant _ bindings in structs
[rust.git] / src / lib.rs
1 #![feature(plugin_registrar, box_syntax)]
2 #![feature(rustc_private, core, collections)]
3 #![feature(num_bits_bytes, iter_arith)]
4 #![allow(unknown_lints)]
5
6 // this only exists to allow the "dogfood" integration test to work
7 #[allow(dead_code)]
8 fn main() { println!("What are you doing? Don't run clippy as an executable"); }
9
10 #[macro_use]
11 extern crate syntax;
12 #[macro_use]
13 extern crate rustc;
14 #[macro_use]
15 extern crate rustc_front;
16
17 // Only for the compile time checking of paths
18 extern crate core;
19 extern crate collections;
20
21 // for unicode nfc normalization
22 extern crate unicode_normalization;
23
24 extern crate rustc_plugin;
25
26 use rustc_plugin::Registry;
27
28 #[macro_use]
29 pub mod utils;
30 pub mod consts;
31 pub mod types;
32 pub mod misc;
33 pub mod eq_op;
34 pub mod bit_mask;
35 pub mod ptr_arg;
36 pub mod needless_bool;
37 pub mod approx_const;
38 pub mod eta_reduction;
39 pub mod identity_op;
40 pub mod minmax;
41 pub mod mut_mut;
42 pub mod mut_reference;
43 pub mod len_zero;
44 pub mod attrs;
45 pub mod collapsible_if;
46 pub mod block_in_if_condition;
47 pub mod unicode;
48 pub mod shadow;
49 pub mod strings;
50 pub mod methods;
51 pub mod returns;
52 pub mod lifetimes;
53 pub mod loops;
54 pub mod ranges;
55 pub mod map_clone;
56 pub mod matches;
57 pub mod precedence;
58 pub mod mutex_atomic;
59 pub mod zero_div_zero;
60 pub mod open_options;
61 pub mod needless_features;
62 pub mod needless_update;
63 pub mod no_effect;
64 pub mod temporary_assignment;
65 pub mod transmute;
66 pub mod cyclomatic_complexity;
67 pub mod escape;
68 pub mod misc_early;
69
70 mod reexport {
71     pub use syntax::ast::{Name, Ident, NodeId};
72 }
73
74 #[plugin_registrar]
75 pub fn plugin_registrar(reg: &mut Registry) {
76     reg.register_late_lint_pass(box types::TypePass);
77     reg.register_late_lint_pass(box misc::TopLevelRefPass);
78     reg.register_late_lint_pass(box misc::CmpNan);
79     reg.register_late_lint_pass(box eq_op::EqOp);
80     reg.register_late_lint_pass(box bit_mask::BitMask);
81     reg.register_late_lint_pass(box ptr_arg::PtrArg);
82     reg.register_late_lint_pass(box needless_bool::NeedlessBool);
83     reg.register_late_lint_pass(box approx_const::ApproxConstant);
84     reg.register_late_lint_pass(box misc::FloatCmp);
85     reg.register_early_lint_pass(box precedence::Precedence);
86     reg.register_late_lint_pass(box eta_reduction::EtaPass);
87     reg.register_late_lint_pass(box identity_op::IdentityOp);
88     reg.register_late_lint_pass(box mut_mut::MutMut);
89     reg.register_late_lint_pass(box mut_reference::UnnecessaryMutPassed);
90     reg.register_late_lint_pass(box len_zero::LenZero);
91     reg.register_late_lint_pass(box misc::CmpOwned);
92     reg.register_late_lint_pass(box attrs::AttrPass);
93     reg.register_late_lint_pass(box collapsible_if::CollapsibleIf);
94     reg.register_late_lint_pass(box block_in_if_condition::BlockInIfCondition);
95     reg.register_late_lint_pass(box misc::ModuloOne);
96     reg.register_late_lint_pass(box unicode::Unicode);
97     reg.register_late_lint_pass(box strings::StringAdd);
98     reg.register_early_lint_pass(box returns::ReturnPass);
99     reg.register_late_lint_pass(box methods::MethodsPass);
100     reg.register_late_lint_pass(box shadow::ShadowPass);
101     reg.register_late_lint_pass(box types::LetPass);
102     reg.register_late_lint_pass(box types::UnitCmp);
103     reg.register_late_lint_pass(box loops::LoopsPass);
104     reg.register_late_lint_pass(box lifetimes::LifetimePass);
105     reg.register_late_lint_pass(box ranges::StepByZero);
106     reg.register_late_lint_pass(box types::CastPass);
107     reg.register_late_lint_pass(box types::TypeComplexityPass);
108     reg.register_late_lint_pass(box matches::MatchPass);
109     reg.register_late_lint_pass(box misc::PatternPass);
110     reg.register_late_lint_pass(box minmax::MinMaxPass);
111     reg.register_late_lint_pass(box open_options::NonSensicalOpenOptions);
112     reg.register_late_lint_pass(box zero_div_zero::ZeroDivZeroPass);
113     reg.register_late_lint_pass(box mutex_atomic::MutexAtomic);
114     reg.register_late_lint_pass(box needless_features::NeedlessFeaturesPass);
115     reg.register_late_lint_pass(box needless_update::NeedlessUpdatePass);
116     reg.register_late_lint_pass(box no_effect::NoEffectPass);
117     reg.register_late_lint_pass(box map_clone::MapClonePass);
118     reg.register_late_lint_pass(box temporary_assignment::TemporaryAssignmentPass);
119     reg.register_late_lint_pass(box transmute::UselessTransmute);
120     reg.register_late_lint_pass(box cyclomatic_complexity::CyclomaticComplexity::new(25));
121     reg.register_late_lint_pass(box escape::EscapePass);
122     reg.register_early_lint_pass(box misc_early::MiscEarly);
123
124     reg.register_lint_group("clippy_pedantic", vec![
125         methods::OPTION_UNWRAP_USED,
126         methods::RESULT_UNWRAP_USED,
127         methods::WRONG_PUB_SELF_CONVENTION,
128         mut_mut::MUT_MUT,
129         mutex_atomic::MUTEX_INTEGER,
130         shadow::SHADOW_REUSE,
131         shadow::SHADOW_SAME,
132         shadow::SHADOW_UNRELATED,
133         strings::STRING_ADD,
134         strings::STRING_ADD_ASSIGN,
135         types::CAST_POSSIBLE_TRUNCATION,
136         types::CAST_POSSIBLE_WRAP,
137         types::CAST_PRECISION_LOSS,
138         types::CAST_SIGN_LOSS,
139         unicode::NON_ASCII_LITERAL,
140         unicode::UNICODE_NOT_NFC,
141     ]);
142
143     reg.register_lint_group("clippy", vec![
144         approx_const::APPROX_CONSTANT,
145         attrs::INLINE_ALWAYS,
146         bit_mask::BAD_BIT_MASK,
147         bit_mask::INEFFECTIVE_BIT_MASK,
148         block_in_if_condition::BLOCK_IN_IF_CONDITION_EXPR,
149         block_in_if_condition::BLOCK_IN_IF_CONDITION_STMT,
150         collapsible_if::COLLAPSIBLE_IF,
151         cyclomatic_complexity::CYCLOMATIC_COMPLEXITY,
152         eq_op::EQ_OP,
153         escape::BOXED_LOCAL,
154         eta_reduction::REDUNDANT_CLOSURE,
155         identity_op::IDENTITY_OP,
156         len_zero::LEN_WITHOUT_IS_EMPTY,
157         len_zero::LEN_ZERO,
158         lifetimes::NEEDLESS_LIFETIMES,
159         loops::EMPTY_LOOP,
160         loops::EXPLICIT_COUNTER_LOOP,
161         loops::EXPLICIT_ITER_LOOP,
162         loops::ITER_NEXT_LOOP,
163         loops::NEEDLESS_RANGE_LOOP,
164         loops::REVERSE_RANGE_LOOP,
165         loops::UNUSED_COLLECT,
166         loops::WHILE_LET_LOOP,
167         loops::WHILE_LET_ON_ITERATOR,
168         map_clone::MAP_CLONE,
169         matches::MATCH_BOOL,
170         matches::MATCH_REF_PATS,
171         matches::SINGLE_MATCH,
172         methods::OK_EXPECT,
173         methods::OPTION_MAP_UNWRAP_OR,
174         methods::OPTION_MAP_UNWRAP_OR_ELSE,
175         methods::SHOULD_IMPLEMENT_TRAIT,
176         methods::STR_TO_STRING,
177         methods::STRING_TO_STRING,
178         methods::WRONG_SELF_CONVENTION,
179         minmax::MIN_MAX,
180         misc::CMP_NAN,
181         misc::CMP_OWNED,
182         misc::FLOAT_CMP,
183         misc::MODULO_ONE,
184         misc::REDUNDANT_PATTERN,
185         misc::TOPLEVEL_REF_ARG,
186         misc_early::UNNEEDED_BINDING,
187         mut_reference::UNNECESSARY_MUT_PASSED,
188         mutex_atomic::MUTEX_ATOMIC,
189         needless_bool::NEEDLESS_BOOL,
190         needless_features::UNSTABLE_AS_MUT_SLICE,
191         needless_features::UNSTABLE_AS_SLICE,
192         needless_update::NEEDLESS_UPDATE,
193         no_effect::NO_EFFECT,
194         open_options::NONSENSICAL_OPEN_OPTIONS,
195         precedence::PRECEDENCE,
196         ptr_arg::PTR_ARG,
197         ranges::RANGE_STEP_BY_ZERO,
198         ranges::RANGE_ZIP_WITH_LEN,
199         returns::LET_AND_RETURN,
200         returns::NEEDLESS_RETURN,
201         temporary_assignment::TEMPORARY_ASSIGNMENT,
202         transmute::USELESS_TRANSMUTE,
203         types::BOX_VEC,
204         types::LET_UNIT_VALUE,
205         types::LINKEDLIST,
206         types::TYPE_COMPLEXITY,
207         types::UNIT_CMP,
208         unicode::ZERO_WIDTH_SPACE,
209         zero_div_zero::ZERO_DIVIDED_BY_ZERO,
210     ]);
211 }