@@ -80,6 +80,7 @@ fn check_impl(
80
80
}
81
81
}
82
82
Err ( err) => {
83
+ // only warn becasue before bad extra checks would be silently ignored.
83
84
eprintln ! ( "warning: bad extra check argument {src:?}: {err:?}" ) ;
84
85
None
85
86
}
@@ -612,6 +613,7 @@ enum ExtraCheckParseError {
612
613
UnknownKind ( String ) ,
613
614
#[ allow( dead_code) ]
614
615
UnknownLang ( String ) ,
616
+ UnsupportedKindForLang ,
615
617
/// Too many `:`
616
618
TooManyParts ,
617
619
/// Tried to parse the empty string
@@ -644,6 +646,20 @@ impl ExtraCheckArg {
644
646
} ;
645
647
!crate :: files_modified ( ci_info, |s| s. ends_with ( ext) )
646
648
}
649
+
650
+ fn has_supported_kind ( & self ) -> bool {
651
+ let Some ( kind) = self . kind else {
652
+ // "run all extra checks" mode is supported for all languages.
653
+ return true ;
654
+ } ;
655
+ use ExtraCheckKind :: * ;
656
+ let supported_kinds: & [ _ ] = match self . lang {
657
+ ExtraCheckLang :: Py => & [ Fmt , Lint ] ,
658
+ ExtraCheckLang :: Cpp => & [ Fmt ] ,
659
+ ExtraCheckLang :: Shell => & [ Lint ] ,
660
+ } ;
661
+ supported_kinds. contains ( & kind)
662
+ }
647
663
}
648
664
649
665
impl FromStr for ExtraCheckArg {
@@ -666,7 +682,12 @@ impl FromStr for ExtraCheckArg {
666
682
if parts. next ( ) . is_some ( ) {
667
683
return Err ( ExtraCheckParseError :: TooManyParts ) ;
668
684
}
669
- Ok ( Self { auto, lang : first. parse ( ) ?, kind : second. map ( |s| s. parse ( ) ) . transpose ( ) ? } )
685
+ let arg = Self { auto, lang : first. parse ( ) ?, kind : second. map ( |s| s. parse ( ) ) . transpose ( ) ? } ;
686
+ if !arg. has_supported_kind ( ) {
687
+ return Err ( ExtraCheckParseError :: UnsupportedKindForLang ) ;
688
+ }
689
+
690
+ Ok ( arg)
670
691
}
671
692
}
672
693
0 commit comments