]> git.lizzy.rs Git - rust.git/blob - src/lib.rs
Suggest for loop instead of while-let when looping over iterators
[rust.git] / src / lib.rs
1 #![feature(plugin_registrar, box_syntax)]
2 #![feature(rustc_private, core, collections)]
3 #![feature(num_bits_bytes)]
4 #![allow(unknown_lints)]
5
6 #[macro_use]
7 extern crate syntax;
8 #[macro_use]
9 extern crate rustc;
10 #[macro_use]
11 extern crate rustc_front;
12
13 // Only for the compile time checking of paths
14 extern crate core;
15 extern crate collections;
16
17 // for unicode nfc normalization
18 extern crate unicode_normalization;
19
20 use rustc::plugin::Registry;
21
22 #[macro_use]
23 pub mod utils;
24 pub mod consts;
25 pub mod types;
26 pub mod misc;
27 pub mod eq_op;
28 pub mod bit_mask;
29 pub mod ptr_arg;
30 pub mod needless_bool;
31 pub mod approx_const;
32 pub mod eta_reduction;
33 pub mod identity_op;
34 pub mod minmax;
35 pub mod mut_mut;
36 pub mod mut_reference;
37 pub mod len_zero;
38 pub mod attrs;
39 pub mod collapsible_if;
40 pub mod unicode;
41 pub mod shadow;
42 pub mod strings;
43 pub mod methods;
44 pub mod returns;
45 pub mod lifetimes;
46 pub mod loops;
47 pub mod ranges;
48 pub mod matches;
49 pub mod precedence;
50 pub mod mutex_atomic;
51 pub mod zero_div_zero;
52 pub mod open_options;
53 pub mod needless_features;
54 pub mod needless_update;
55
56 mod reexport {
57     pub use syntax::ast::{Name, Ident, NodeId};
58 }
59
60 #[plugin_registrar]
61 pub fn plugin_registrar(reg: &mut Registry) {
62     reg.register_late_lint_pass(box types::TypePass);
63     reg.register_late_lint_pass(box misc::TopLevelRefPass);
64     reg.register_late_lint_pass(box misc::CmpNan);
65     reg.register_late_lint_pass(box eq_op::EqOp);
66     reg.register_late_lint_pass(box bit_mask::BitMask);
67     reg.register_late_lint_pass(box ptr_arg::PtrArg);
68     reg.register_late_lint_pass(box needless_bool::NeedlessBool);
69     reg.register_late_lint_pass(box approx_const::ApproxConstant);
70     reg.register_late_lint_pass(box misc::FloatCmp);
71     reg.register_early_lint_pass(box precedence::Precedence);
72     reg.register_late_lint_pass(box eta_reduction::EtaPass);
73     reg.register_late_lint_pass(box identity_op::IdentityOp);
74     reg.register_late_lint_pass(box mut_mut::MutMut);
75     reg.register_late_lint_pass(box mut_reference::UnnecessaryMutPassed);
76     reg.register_late_lint_pass(box len_zero::LenZero);
77     reg.register_late_lint_pass(box misc::CmpOwned);
78     reg.register_late_lint_pass(box attrs::AttrPass);
79     reg.register_late_lint_pass(box collapsible_if::CollapsibleIf);
80     reg.register_late_lint_pass(box misc::ModuloOne);
81     reg.register_late_lint_pass(box unicode::Unicode);
82     reg.register_late_lint_pass(box strings::StringAdd);
83     reg.register_early_lint_pass(box returns::ReturnPass);
84     reg.register_late_lint_pass(box methods::MethodsPass);
85     reg.register_late_lint_pass(box shadow::ShadowPass);
86     reg.register_late_lint_pass(box types::LetPass);
87     reg.register_late_lint_pass(box types::UnitCmp);
88     reg.register_late_lint_pass(box loops::LoopsPass);
89     reg.register_late_lint_pass(box lifetimes::LifetimePass);
90     reg.register_late_lint_pass(box ranges::StepByZero);
91     reg.register_late_lint_pass(box types::CastPass);
92     reg.register_late_lint_pass(box types::TypeComplexityPass);
93     reg.register_late_lint_pass(box matches::MatchPass);
94     reg.register_late_lint_pass(box misc::PatternPass);
95     reg.register_late_lint_pass(box minmax::MinMaxPass);
96     reg.register_late_lint_pass(box open_options::NonSensicalOpenOptions);
97     reg.register_late_lint_pass(box zero_div_zero::ZeroDivZeroPass);
98     reg.register_late_lint_pass(box mutex_atomic::MutexAtomic);
99     reg.register_late_lint_pass(box needless_features::NeedlessFeaturesPass);
100     reg.register_late_lint_pass(box needless_update::NeedlessUpdatePass);
101
102     reg.register_lint_group("clippy_pedantic", vec![
103         methods::OPTION_UNWRAP_USED,
104         methods::RESULT_UNWRAP_USED,
105         methods::WRONG_PUB_SELF_CONVENTION,
106         mut_mut::MUT_MUT,
107         mutex_atomic::MUTEX_INTEGER,
108         shadow::SHADOW_REUSE,
109         shadow::SHADOW_SAME,
110         shadow::SHADOW_UNRELATED,
111         strings::STRING_ADD,
112         strings::STRING_ADD_ASSIGN,
113         types::CAST_POSSIBLE_TRUNCATION,
114         types::CAST_POSSIBLE_WRAP,
115         types::CAST_PRECISION_LOSS,
116         types::CAST_SIGN_LOSS,
117         unicode::NON_ASCII_LITERAL,
118         unicode::UNICODE_NOT_NFC,
119     ]);
120
121     reg.register_lint_group("clippy", vec![
122         approx_const::APPROX_CONSTANT,
123         attrs::INLINE_ALWAYS,
124         bit_mask::BAD_BIT_MASK,
125         bit_mask::INEFFECTIVE_BIT_MASK,
126         collapsible_if::COLLAPSIBLE_IF,
127         eq_op::EQ_OP,
128         eta_reduction::REDUNDANT_CLOSURE,
129         identity_op::IDENTITY_OP,
130         len_zero::LEN_WITHOUT_IS_EMPTY,
131         len_zero::LEN_ZERO,
132         lifetimes::NEEDLESS_LIFETIMES,
133         loops::EMPTY_LOOP,
134         loops::EXPLICIT_COUNTER_LOOP,
135         loops::EXPLICIT_ITER_LOOP,
136         loops::ITER_NEXT_LOOP,
137         loops::NEEDLESS_RANGE_LOOP,
138         loops::REVERSE_RANGE_LOOP,
139         loops::UNUSED_COLLECT,
140         loops::WHILE_LET_LOOP,
141         loops::WHILE_LET_ON_ITERATOR,
142         matches::MATCH_BOOL,
143         matches::MATCH_REF_PATS,
144         matches::SINGLE_MATCH,
145         methods::SHOULD_IMPLEMENT_TRAIT,
146         methods::STR_TO_STRING,
147         methods::STRING_TO_STRING,
148         methods::WRONG_SELF_CONVENTION,
149         minmax::MIN_MAX,
150         misc::CMP_NAN,
151         misc::CMP_OWNED,
152         misc::FLOAT_CMP,
153         misc::MODULO_ONE,
154         misc::REDUNDANT_PATTERN,
155         misc::TOPLEVEL_REF_ARG,
156         mut_reference::UNNECESSARY_MUT_PASSED,
157         mutex_atomic::MUTEX_ATOMIC,
158         needless_bool::NEEDLESS_BOOL,
159         needless_features::UNSTABLE_AS_MUT_SLICE,
160         needless_features::UNSTABLE_AS_SLICE,
161         needless_update::NEEDLESS_UPDATE,
162         open_options::NONSENSICAL_OPEN_OPTIONS,
163         precedence::PRECEDENCE,
164         ptr_arg::PTR_ARG,
165         ranges::RANGE_STEP_BY_ZERO,
166         returns::LET_AND_RETURN,
167         returns::NEEDLESS_RETURN,
168         types::BOX_VEC,
169         types::LET_UNIT_VALUE,
170         types::LINKEDLIST,
171         types::TYPE_COMPLEXITY,
172         types::UNIT_CMP,
173         unicode::ZERO_WIDTH_SPACE,
174         zero_div_zero::ZERO_DIVIDED_BY_ZERO,
175     ]);
176 }