1
1
#![ cfg_attr( feature = "deny-warnings" , deny( warnings) ) ]
2
2
3
3
use clap:: { App , Arg , SubCommand } ;
4
- use clippy_dev:: {
5
- gather_all, gen_changelog_lint_list, gen_deprecated, gen_lint_group_list, gen_modules_list, gen_register_lint_list,
6
- replace_region_in_file, Lint , DOCS_LINK ,
7
- } ;
8
- use std:: path:: Path ;
9
-
10
- use clippy_dev:: { fmt, new_lint, stderr_length_check} ;
11
-
12
- #[ derive( Clone , Copy , PartialEq ) ]
13
- enum UpdateMode {
14
- Check ,
15
- Change ,
16
- }
4
+ use clippy_dev:: { fmt, new_lint, stderr_length_check, update_lints} ;
17
5
18
6
fn main ( ) {
19
7
let matches = App :: new ( "Clippy developer tooling" )
@@ -107,11 +95,11 @@ fn main() {
107
95
} ,
108
96
( "update_lints" , Some ( matches) ) => {
109
97
if matches. is_present ( "print-only" ) {
110
- print_lints ( ) ;
98
+ update_lints :: print_lints ( ) ;
111
99
} else if matches. is_present ( "check" ) {
112
- update_lints ( UpdateMode :: Check ) ;
100
+ update_lints:: run ( update_lints :: UpdateMode :: Check ) ;
113
101
} else {
114
- update_lints ( UpdateMode :: Change ) ;
102
+ update_lints:: run ( update_lints :: UpdateMode :: Change ) ;
115
103
}
116
104
} ,
117
105
( "new_lint" , Some ( matches) ) => {
@@ -120,7 +108,7 @@ fn main() {
120
108
matches. value_of ( "name" ) ,
121
109
matches. value_of ( "category" ) ,
122
110
) {
123
- Ok ( _) => update_lints ( UpdateMode :: Change ) ,
111
+ Ok ( _) => update_lints:: run ( update_lints :: UpdateMode :: Change ) ,
124
112
Err ( e) => eprintln ! ( "Unable to create lint: {}" , e) ,
125
113
}
126
114
} ,
@@ -130,161 +118,3 @@ fn main() {
130
118
_ => { } ,
131
119
}
132
120
}
133
-
134
- fn print_lints ( ) {
135
- let lint_list = gather_all ( ) ;
136
- let usable_lints: Vec < Lint > = Lint :: usable_lints ( lint_list) . collect ( ) ;
137
- let usable_lint_count = usable_lints. len ( ) ;
138
- let grouped_by_lint_group = Lint :: by_lint_group ( usable_lints. into_iter ( ) ) ;
139
-
140
- for ( lint_group, mut lints) in grouped_by_lint_group {
141
- if lint_group == "Deprecated" {
142
- continue ;
143
- }
144
- println ! ( "\n ## {}" , lint_group) ;
145
-
146
- lints. sort_by_key ( |l| l. name . clone ( ) ) ;
147
-
148
- for lint in lints {
149
- println ! (
150
- "* [{}]({}#{}) ({})" ,
151
- lint. name,
152
- clippy_dev:: DOCS_LINK ,
153
- lint. name,
154
- lint. desc
155
- ) ;
156
- }
157
- }
158
-
159
- println ! ( "there are {} lints" , usable_lint_count) ;
160
- }
161
-
162
- #[ allow( clippy:: too_many_lines) ]
163
- fn update_lints ( update_mode : UpdateMode ) {
164
- let lint_list: Vec < Lint > = gather_all ( ) . collect ( ) ;
165
-
166
- let internal_lints = Lint :: internal_lints ( lint_list. clone ( ) . into_iter ( ) ) ;
167
-
168
- let usable_lints: Vec < Lint > = Lint :: usable_lints ( lint_list. clone ( ) . into_iter ( ) ) . collect ( ) ;
169
- let usable_lint_count = usable_lints. len ( ) ;
170
-
171
- let mut sorted_usable_lints = usable_lints. clone ( ) ;
172
- sorted_usable_lints. sort_by_key ( |lint| lint. name . clone ( ) ) ;
173
-
174
- let mut file_change = replace_region_in_file (
175
- Path :: new ( "src/lintlist/mod.rs" ) ,
176
- "begin lint list" ,
177
- "end lint list" ,
178
- false ,
179
- update_mode == UpdateMode :: Change ,
180
- || {
181
- format ! (
182
- "pub const ALL_LINTS: [Lint; {}] = {:#?};" ,
183
- sorted_usable_lints. len( ) ,
184
- sorted_usable_lints
185
- )
186
- . lines ( )
187
- . map ( ToString :: to_string)
188
- . collect :: < Vec < _ > > ( )
189
- } ,
190
- )
191
- . changed ;
192
-
193
- file_change |= replace_region_in_file (
194
- Path :: new ( "README.md" ) ,
195
- & format ! ( r#"\[There are \d+ lints included in this crate!\]\({}\)"# , DOCS_LINK ) ,
196
- "" ,
197
- true ,
198
- update_mode == UpdateMode :: Change ,
199
- || {
200
- vec ! [ format!(
201
- "[There are {} lints included in this crate!]({})" ,
202
- usable_lint_count, DOCS_LINK
203
- ) ]
204
- } ,
205
- )
206
- . changed ;
207
-
208
- file_change |= replace_region_in_file (
209
- Path :: new ( "CHANGELOG.md" ) ,
210
- "<!-- begin autogenerated links to lint list -->" ,
211
- "<!-- end autogenerated links to lint list -->" ,
212
- false ,
213
- update_mode == UpdateMode :: Change ,
214
- || gen_changelog_lint_list ( lint_list. clone ( ) ) ,
215
- )
216
- . changed ;
217
-
218
- file_change |= replace_region_in_file (
219
- Path :: new ( "clippy_lints/src/lib.rs" ) ,
220
- "begin deprecated lints" ,
221
- "end deprecated lints" ,
222
- false ,
223
- update_mode == UpdateMode :: Change ,
224
- || gen_deprecated ( & lint_list) ,
225
- )
226
- . changed ;
227
-
228
- file_change |= replace_region_in_file (
229
- Path :: new ( "clippy_lints/src/lib.rs" ) ,
230
- "begin register lints" ,
231
- "end register lints" ,
232
- false ,
233
- update_mode == UpdateMode :: Change ,
234
- || gen_register_lint_list ( & lint_list) ,
235
- )
236
- . changed ;
237
-
238
- file_change |= replace_region_in_file (
239
- Path :: new ( "clippy_lints/src/lib.rs" ) ,
240
- "begin lints modules" ,
241
- "end lints modules" ,
242
- false ,
243
- update_mode == UpdateMode :: Change ,
244
- || gen_modules_list ( lint_list. clone ( ) ) ,
245
- )
246
- . changed ;
247
-
248
- // Generate lists of lints in the clippy::all lint group
249
- file_change |= replace_region_in_file (
250
- Path :: new ( "clippy_lints/src/lib.rs" ) ,
251
- r#"store.register_group\(true, "clippy::all""# ,
252
- r#"\]\);"# ,
253
- false ,
254
- update_mode == UpdateMode :: Change ,
255
- || {
256
- // clippy::all should only include the following lint groups:
257
- let all_group_lints = usable_lints
258
- . clone ( )
259
- . into_iter ( )
260
- . filter ( |l| {
261
- l. group == "correctness" || l. group == "style" || l. group == "complexity" || l. group == "perf"
262
- } )
263
- . collect ( ) ;
264
-
265
- gen_lint_group_list ( all_group_lints)
266
- } ,
267
- )
268
- . changed ;
269
-
270
- // Generate the list of lints for all other lint groups
271
- for ( lint_group, lints) in Lint :: by_lint_group ( usable_lints. into_iter ( ) . chain ( internal_lints) ) {
272
- file_change |= replace_region_in_file (
273
- Path :: new ( "clippy_lints/src/lib.rs" ) ,
274
- & format ! ( "store.register_group\\ (true, \" clippy::{}\" " , lint_group) ,
275
- r#"\]\);"# ,
276
- false ,
277
- update_mode == UpdateMode :: Change ,
278
- || gen_lint_group_list ( lints. clone ( ) ) ,
279
- )
280
- . changed ;
281
- }
282
-
283
- if update_mode == UpdateMode :: Check && file_change {
284
- println ! (
285
- "Not all lints defined properly. \
286
- Please run `cargo dev update_lints` to make sure all lints are defined properly."
287
- ) ;
288
- std:: process:: exit ( 1 ) ;
289
- }
290
- }
0 commit comments