@@ -102,6 +102,19 @@ impl LintConfig {
102102 _ => unreachable ! ( "LintConfig can only be called from `clippy` subcommands." ) ,
103103 }
104104 }
105+
106+ fn merge ( & self , other : & Self ) -> Self {
107+ let merged = |self_attr : & [ String ] , other_attr : & [ String ] | -> Vec < String > {
108+ self_attr. iter ( ) . cloned ( ) . chain ( other_attr. iter ( ) . cloned ( ) ) . collect ( )
109+ } ;
110+ // This is written this way to ensure we get a compiler error if we add a new field.
111+ Self {
112+ allow : merged ( & self . allow , & other. allow ) ,
113+ warn : merged ( & self . warn , & other. warn ) ,
114+ deny : merged ( & self . deny , & other. deny ) ,
115+ forbid : merged ( & self . forbid , & other. forbid ) ,
116+ }
117+ }
105118}
106119
107120#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
@@ -339,3 +352,58 @@ lint_any!(
339352 Tidy , "src/tools/tidy" , "tidy" ;
340353 TestFloatParse , "src/etc/test-float-parse" , "test-float-parse" ;
341354) ;
355+
356+ #[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
357+ pub struct CI {
358+ target : TargetSelection ,
359+ config : LintConfig ,
360+ }
361+
362+ impl Step for CI {
363+ type Output = ( ) ;
364+ const DEFAULT : bool = false ;
365+
366+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
367+ run. alias ( "ci" )
368+ }
369+
370+ fn make_run ( run : RunConfig < ' _ > ) {
371+ let config = LintConfig :: new ( run. builder ) ;
372+ run. builder . ensure ( CI { target : run. target , config } ) ;
373+ }
374+
375+ fn run ( self , builder : & Builder < ' _ > ) -> Self :: Output {
376+ builder. ensure ( Bootstrap {
377+ target : self . target ,
378+ config : self . config . merge ( & LintConfig {
379+ allow : vec ! [ ] ,
380+ warn : vec ! [ ] ,
381+ deny : vec ! [ "warnings" . into( ) ] ,
382+ forbid : vec ! [ ] ,
383+ } ) ,
384+ } ) ;
385+ let library_clippy_cfg = LintConfig {
386+ allow : vec ! [ "clippy::all" . into( ) ] ,
387+ warn : vec ! [ ] ,
388+ deny : vec ! [ "clippy::correctness" . into( ) ] ,
389+ forbid : vec ! [ ] ,
390+ } ;
391+ let compiler_clippy_cfg = LintConfig {
392+ allow : vec ! [ "clippy::all" . into( ) ] ,
393+ warn : vec ! [ ] ,
394+ deny : vec ! [ "clippy::correctness" . into( ) , "clippy::clone_on_ref_ptr" . into( ) ] ,
395+ forbid : vec ! [ ] ,
396+ } ;
397+
398+ builder. ensure ( Std {
399+ target : self . target ,
400+ config : self . config . merge ( & library_clippy_cfg) ,
401+ crates : vec ! [ ] ,
402+ } ) ;
403+ builder. ensure ( Rustc {
404+ target : self . target ,
405+ config : self . config . merge ( & compiler_clippy_cfg) ,
406+ crates : vec ! [ ] ,
407+ } ) ;
408+ }
409+ }
0 commit comments