]> git.lizzy.rs Git - rust.git/blob - src/lib.rs
Remove * dep
[rust.git] / src / lib.rs
1 #![feature(plugin_registrar, box_syntax)]
2 #![feature(rustc_private, 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 pub mod array_indexing;
70 pub mod panic;
71
72 mod reexport {
73     pub use syntax::ast::{Name, NodeId};
74 }
75
76 #[plugin_registrar]
77 pub fn plugin_registrar(reg: &mut Registry) {
78     reg.register_late_lint_pass(box types::TypePass);
79     reg.register_late_lint_pass(box misc::TopLevelRefPass);
80     reg.register_late_lint_pass(box misc::CmpNan);
81     reg.register_late_lint_pass(box eq_op::EqOp);
82     reg.register_late_lint_pass(box bit_mask::BitMask);
83     reg.register_late_lint_pass(box ptr_arg::PtrArg);
84     reg.register_late_lint_pass(box needless_bool::NeedlessBool);
85     reg.register_late_lint_pass(box approx_const::ApproxConstant);
86     reg.register_late_lint_pass(box misc::FloatCmp);
87     reg.register_early_lint_pass(box precedence::Precedence);
88     reg.register_late_lint_pass(box eta_reduction::EtaPass);
89     reg.register_late_lint_pass(box identity_op::IdentityOp);
90     reg.register_late_lint_pass(box mut_mut::MutMut);
91     reg.register_late_lint_pass(box mut_reference::UnnecessaryMutPassed);
92     reg.register_late_lint_pass(box len_zero::LenZero);
93     reg.register_late_lint_pass(box misc::CmpOwned);
94     reg.register_late_lint_pass(box attrs::AttrPass);
95     reg.register_late_lint_pass(box collapsible_if::CollapsibleIf);
96     reg.register_late_lint_pass(box block_in_if_condition::BlockInIfCondition);
97     reg.register_late_lint_pass(box misc::ModuloOne);
98     reg.register_late_lint_pass(box unicode::Unicode);
99     reg.register_late_lint_pass(box strings::StringAdd);
100     reg.register_early_lint_pass(box returns::ReturnPass);
101     reg.register_late_lint_pass(box methods::MethodsPass);
102     reg.register_late_lint_pass(box shadow::ShadowPass);
103     reg.register_late_lint_pass(box types::LetPass);
104     reg.register_late_lint_pass(box types::UnitCmp);
105     reg.register_late_lint_pass(box loops::LoopsPass);
106     reg.register_late_lint_pass(box lifetimes::LifetimePass);
107     reg.register_late_lint_pass(box ranges::StepByZero);
108     reg.register_late_lint_pass(box types::CastPass);
109     reg.register_late_lint_pass(box types::TypeComplexityPass);
110     reg.register_late_lint_pass(box matches::MatchPass);
111     reg.register_late_lint_pass(box misc::PatternPass);
112     reg.register_late_lint_pass(box minmax::MinMaxPass);
113     reg.register_late_lint_pass(box open_options::NonSensicalOpenOptions);
114     reg.register_late_lint_pass(box zero_div_zero::ZeroDivZeroPass);
115     reg.register_late_lint_pass(box mutex_atomic::MutexAtomic);
116     reg.register_late_lint_pass(box needless_features::NeedlessFeaturesPass);
117     reg.register_late_lint_pass(box needless_update::NeedlessUpdatePass);
118     reg.register_late_lint_pass(box no_effect::NoEffectPass);
119     reg.register_late_lint_pass(box map_clone::MapClonePass);
120     reg.register_late_lint_pass(box temporary_assignment::TemporaryAssignmentPass);
121     reg.register_late_lint_pass(box transmute::UselessTransmute);
122     reg.register_late_lint_pass(box cyclomatic_complexity::CyclomaticComplexity::new(25));
123     reg.register_late_lint_pass(box escape::EscapePass);
124     reg.register_early_lint_pass(box misc_early::MiscEarly);
125     reg.register_late_lint_pass(box misc::UsedUnderscoreBinding);
126     reg.register_late_lint_pass(box array_indexing::ArrayIndexing);
127     reg.register_late_lint_pass(box panic::PanicPass);
128
129     reg.register_lint_group("clippy_pedantic", vec![
130         methods::OPTION_UNWRAP_USED,
131         methods::RESULT_UNWRAP_USED,
132         methods::WRONG_PUB_SELF_CONVENTION,
133         mut_mut::MUT_MUT,
134         mutex_atomic::MUTEX_INTEGER,
135         shadow::SHADOW_REUSE,
136         shadow::SHADOW_SAME,
137         shadow::SHADOW_UNRELATED,
138         strings::STRING_ADD,
139         strings::STRING_ADD_ASSIGN,
140         types::CAST_POSSIBLE_TRUNCATION,
141         types::CAST_POSSIBLE_WRAP,
142         types::CAST_PRECISION_LOSS,
143         types::CAST_SIGN_LOSS,
144         unicode::NON_ASCII_LITERAL,
145         unicode::UNICODE_NOT_NFC,
146     ]);
147
148     reg.register_lint_group("clippy", vec![
149         approx_const::APPROX_CONSTANT,
150         array_indexing::OUT_OF_BOUNDS_INDEXING,
151         attrs::INLINE_ALWAYS,
152         bit_mask::BAD_BIT_MASK,
153         bit_mask::INEFFECTIVE_BIT_MASK,
154         block_in_if_condition::BLOCK_IN_IF_CONDITION_EXPR,
155         block_in_if_condition::BLOCK_IN_IF_CONDITION_STMT,
156         collapsible_if::COLLAPSIBLE_IF,
157         cyclomatic_complexity::CYCLOMATIC_COMPLEXITY,
158         eq_op::EQ_OP,
159         escape::BOXED_LOCAL,
160         eta_reduction::REDUNDANT_CLOSURE,
161         identity_op::IDENTITY_OP,
162         len_zero::LEN_WITHOUT_IS_EMPTY,
163         len_zero::LEN_ZERO,
164         lifetimes::NEEDLESS_LIFETIMES,
165         lifetimes::UNUSED_LIFETIMES,
166         loops::EMPTY_LOOP,
167         loops::EXPLICIT_COUNTER_LOOP,
168         loops::EXPLICIT_ITER_LOOP,
169         loops::ITER_NEXT_LOOP,
170         loops::NEEDLESS_RANGE_LOOP,
171         loops::REVERSE_RANGE_LOOP,
172         loops::UNUSED_COLLECT,
173         loops::WHILE_LET_LOOP,
174         loops::WHILE_LET_ON_ITERATOR,
175         map_clone::MAP_CLONE,
176         matches::MATCH_BOOL,
177         matches::MATCH_REF_PATS,
178         matches::SINGLE_MATCH,
179         methods::OK_EXPECT,
180         methods::OPTION_MAP_UNWRAP_OR,
181         methods::OPTION_MAP_UNWRAP_OR_ELSE,
182         methods::SHOULD_IMPLEMENT_TRAIT,
183         methods::STR_TO_STRING,
184         methods::STRING_TO_STRING,
185         methods::WRONG_SELF_CONVENTION,
186         minmax::MIN_MAX,
187         misc::CMP_NAN,
188         misc::CMP_OWNED,
189         misc::FLOAT_CMP,
190         misc::MODULO_ONE,
191         misc::REDUNDANT_PATTERN,
192         misc::TOPLEVEL_REF_ARG,
193         misc::USED_UNDERSCORE_BINDING,
194         misc_early::UNNEEDED_FIELD_PATTERN,
195         mut_reference::UNNECESSARY_MUT_PASSED,
196         mutex_atomic::MUTEX_ATOMIC,
197         needless_bool::NEEDLESS_BOOL,
198         needless_features::UNSTABLE_AS_MUT_SLICE,
199         needless_features::UNSTABLE_AS_SLICE,
200         needless_update::NEEDLESS_UPDATE,
201         no_effect::NO_EFFECT,
202         open_options::NONSENSICAL_OPEN_OPTIONS,
203         panic::PANIC_PARAMS,
204         precedence::PRECEDENCE,
205         ptr_arg::PTR_ARG,
206         ranges::RANGE_STEP_BY_ZERO,
207         ranges::RANGE_ZIP_WITH_LEN,
208         returns::LET_AND_RETURN,
209         returns::NEEDLESS_RETURN,
210         temporary_assignment::TEMPORARY_ASSIGNMENT,
211         transmute::USELESS_TRANSMUTE,
212         types::BOX_VEC,
213         types::LET_UNIT_VALUE,
214         types::LINKEDLIST,
215         types::TYPE_COMPLEXITY,
216         types::UNIT_CMP,
217         unicode::ZERO_WIDTH_SPACE,
218         zero_div_zero::ZERO_DIVIDED_BY_ZERO,
219     ]);
220 }