11#![ cfg_attr( feature = "deny-warnings" , deny( warnings) ) ]
22
33use 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} ;
175
186fn main ( ) {
197 let matches = App :: new ( "Clippy developer tooling" )
@@ -107,11 +95,11 @@ fn main() {
10795 } ,
10896 ( "update_lints" , Some ( matches) ) => {
10997 if matches. is_present ( "print-only" ) {
110- print_lints ( ) ;
98+ update_lints :: print_lints ( ) ;
11199 } else if matches. is_present ( "check" ) {
112- update_lints ( UpdateMode :: Check ) ;
100+ update_lints:: run ( update_lints :: UpdateMode :: Check ) ;
113101 } else {
114- update_lints ( UpdateMode :: Change ) ;
102+ update_lints:: run ( update_lints :: UpdateMode :: Change ) ;
115103 }
116104 } ,
117105 ( "new_lint" , Some ( matches) ) => {
@@ -120,7 +108,7 @@ fn main() {
120108 matches. value_of ( "name" ) ,
121109 matches. value_of ( "category" ) ,
122110 ) {
123- Ok ( _) => update_lints ( UpdateMode :: Change ) ,
111+ Ok ( _) => update_lints:: run ( update_lints :: UpdateMode :: Change ) ,
124112 Err ( e) => eprintln ! ( "Unable to create lint: {}" , e) ,
125113 }
126114 } ,
@@ -130,161 +118,3 @@ fn main() {
130118 _ => { } ,
131119 }
132120}
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