@@ -87,6 +87,7 @@ fn check_impl(
87
87
}
88
88
}
89
89
Err ( err) => {
90
+ // only warn becasue before bad extra checks would be silently ignored.
90
91
eprintln ! ( "warning: bad extra check argument {src:?}: {err:?}" ) ;
91
92
None
92
93
}
@@ -666,6 +667,7 @@ enum ExtraCheckParseError {
666
667
UnknownKind ( String ) ,
667
668
#[ allow( dead_code) ]
668
669
UnknownLang ( String ) ,
670
+ UnsupportedKindForLang ,
669
671
/// Too many `:`
670
672
TooManyParts ,
671
673
/// Tried to parse the empty string
@@ -703,6 +705,21 @@ impl ExtraCheckArg {
703
705
} ;
704
706
!crate :: files_modified ( ci_info, |s| s. ends_with ( ext) )
705
707
}
708
+
709
+ fn has_supported_kind ( & self ) -> bool {
710
+ let Some ( kind) = self . kind else {
711
+ // "run all extra checks" mode is supported for all languages.
712
+ return true ;
713
+ } ;
714
+ use ExtraCheckKind :: * ;
715
+ let supported_kinds: & [ _ ] = match self . lang {
716
+ ExtraCheckLang :: Py => & [ Fmt , Lint ] ,
717
+ ExtraCheckLang :: Cpp => & [ Fmt ] ,
718
+ ExtraCheckLang :: Shell => & [ Lint ] ,
719
+ ExtraCheckLang :: Spellcheck => & [ ] ,
720
+ } ;
721
+ supported_kinds. contains ( & kind)
722
+ }
706
723
}
707
724
708
725
impl FromStr for ExtraCheckArg {
@@ -725,7 +742,12 @@ impl FromStr for ExtraCheckArg {
725
742
if parts. next ( ) . is_some ( ) {
726
743
return Err ( ExtraCheckParseError :: TooManyParts ) ;
727
744
}
728
- Ok ( Self { auto, lang : first. parse ( ) ?, kind : second. map ( |s| s. parse ( ) ) . transpose ( ) ? } )
745
+ let arg = Self { auto, lang : first. parse ( ) ?, kind : second. map ( |s| s. parse ( ) ) . transpose ( ) ? } ;
746
+ if !arg. has_supported_kind ( ) {
747
+ return Err ( ExtraCheckParseError :: UnsupportedKindForLang ) ;
748
+ }
749
+
750
+ Ok ( arg)
729
751
}
730
752
}
731
753
0 commit comments