Validate gocritic settings. Return error if settings includes a unsupported gocritic checker (#1563)

This commit is contained in:
Sebastien Rosset 2021-01-04 09:20:40 -08:00 committed by GitHub
parent cfbbead393
commit 62710a8d97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -242,13 +242,7 @@ func (s *GocriticSettings) Validate(log logutils.Log) error {
return errors.Wrap(err, "validate disabled checks")
}
for checkName := range s.SettingsPerCheck {
if !s.IsCheckEnabled(checkName) {
log.Warnf("Gocritic settings were provided for not enabled check %q", checkName)
}
}
if err := s.validateCheckerNames(); err != nil {
if err := s.validateCheckerNames(log); err != nil {
return errors.Wrap(err, "validation failed")
}
@ -272,6 +266,7 @@ func sprintStrings(ss []string) string {
return fmt.Sprint(ss)
}
// getAllCheckerNames returns a map containing all checker names supported by gocritic.
func getAllCheckerNames() map[string]bool {
allCheckerNames := map[string]bool{}
for _, checker := range allGocriticCheckers {
@ -311,7 +306,7 @@ func getDefaultDisabledGocriticCheckersNames() []string {
return disabled
}
func (s *GocriticSettings) validateCheckerNames() error {
func (s *GocriticSettings) validateCheckerNames(log logutils.Log) error {
allowedNames := getAllCheckerNames()
for _, name := range s.EnabledChecks {
@ -328,6 +323,16 @@ func (s *GocriticSettings) validateCheckerNames() error {
}
}
for checkName := range s.SettingsPerCheck {
if _, ok := allowedNames[checkName]; !ok {
return fmt.Errorf("invalid setting, checker %s doesn't exist, all existing checkers: %s",
checkName, sprintAllowedCheckerNames(allowedNames))
}
if !s.IsCheckEnabled(checkName) {
log.Warnf("Gocritic settings were provided for not enabled check %q", checkName)
}
}
return nil
}