github.com/yoheimuta/protolint@v0.49.8-0.20240515023657-4ecaebb7575d/internal/cmd/subcmds/rules.go (about)

     1  package subcmds
     2  
     3  import (
     4  	"github.com/yoheimuta/protolint/internal/addon/plugin"
     5  	"github.com/yoheimuta/protolint/internal/addon/plugin/shared"
     6  	"github.com/yoheimuta/protolint/internal/addon/rules"
     7  	"github.com/yoheimuta/protolint/internal/linter/config"
     8  	internalrule "github.com/yoheimuta/protolint/internal/linter/rule"
     9  	"github.com/yoheimuta/protolint/linter/autodisable"
    10  )
    11  
    12  // NewAllRules creates new all rules.
    13  func NewAllRules(
    14  	option config.RulesOption,
    15  	fixMode bool,
    16  	autoDisableType autodisable.PlacementType,
    17  	verbose bool,
    18  	plugins []shared.RuleSet,
    19  ) (internalrule.Rules, error) {
    20  	rs := newAllInternalRules(option, fixMode, autoDisableType)
    21  
    22  	es, err := plugin.GetExternalRules(plugins, fixMode, verbose)
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  	rs = append(rs, es...)
    27  	return rs, nil
    28  }
    29  
    30  func newAllInternalRules(
    31  	option config.RulesOption,
    32  	fixMode bool,
    33  	autoDisableType autodisable.PlacementType,
    34  ) internalrule.Rules {
    35  	syntaxConsistent := option.SyntaxConsistent
    36  	fileNamesLowerSnakeCase := option.FileNamesLowerSnakeCase
    37  	indent := option.Indent
    38  	maxLineLength := option.MaxLineLength
    39  	enumFieldNamesZeroValueEndWith := option.EnumFieldNamesZeroValueEndWith
    40  	serviceNamesEndWith := option.ServiceNamesEndWith
    41  	fieldNamesExcludePrepositions := option.FieldNamesExcludePrepositions
    42  	messageNamesExcludePrepositions := option.MessageNamesExcludePrepositions
    43  	messagesHaveComment := option.MessagesHaveComment
    44  	servicesHaveComment := option.ServicesHaveComment
    45  	rpcsHaveComment := option.RPCsHaveComment
    46  	fieldsHaveComment := option.FieldsHaveComment
    47  	enumsHaveComment := option.EnumsHaveComment
    48  	enumFieldsHaveComment := option.EnumFieldsHaveComment
    49  	repeatedFieldNamesPluralized := option.RepeatedFieldNamesPluralized
    50  
    51  	return internalrule.Rules{
    52  		rules.NewFileHasCommentRule(
    53  			option.FileHasComment.Severity(),
    54  		),
    55  		rules.NewSyntaxConsistentRule(
    56  			syntaxConsistent.Severity(),
    57  			syntaxConsistent.Version,
    58  		),
    59  		rules.NewFileNamesLowerSnakeCaseRule(
    60  			fileNamesLowerSnakeCase.Severity(),
    61  			fileNamesLowerSnakeCase.Excludes,
    62  			fixMode,
    63  		),
    64  		rules.NewQuoteConsistentRule(
    65  			option.QuoteConsistentOption.Severity(),
    66  			option.QuoteConsistentOption.Quote,
    67  			fixMode,
    68  		),
    69  		rules.NewOrderRule(
    70  			option.Order.Severity(),
    71  			fixMode,
    72  		),
    73  		rules.NewIndentRule(
    74  			indent.Severity(),
    75  			indent.Style,
    76  			indent.NotInsertNewline,
    77  			fixMode,
    78  		),
    79  		rules.NewMaxLineLengthRule(
    80  			maxLineLength.Severity(),
    81  			maxLineLength.MaxChars,
    82  			maxLineLength.TabChars,
    83  		),
    84  		rules.NewPackageNameLowerCaseRule(
    85  			option.PackageNameLowerCase.Severity(),
    86  			fixMode,
    87  		),
    88  		rules.NewImportsSortedRule(
    89  			option.ImportsSorted.Severity(),
    90  			fixMode,
    91  		),
    92  		rules.NewEnumFieldNamesPrefixRule(
    93  			option.EnumFieldNamesPrefix.Severity(),
    94  			fixMode,
    95  			autoDisableType,
    96  		),
    97  		rules.NewEnumFieldNamesUpperSnakeCaseRule(
    98  			option.EnumFieldNamesUpperSnakeCase.Severity(),
    99  			fixMode,
   100  			autoDisableType,
   101  		),
   102  		rules.NewEnumFieldNamesZeroValueEndWithRule(
   103  			enumFieldNamesZeroValueEndWith.Severity(),
   104  			enumFieldNamesZeroValueEndWith.Suffix,
   105  			fixMode,
   106  			autoDisableType,
   107  		),
   108  		rules.NewEnumFieldsHaveCommentRule(
   109  			enumFieldsHaveComment.Severity(),
   110  			enumFieldsHaveComment.ShouldFollowGolangStyle,
   111  		),
   112  		rules.NewEnumNamesUpperCamelCaseRule(
   113  			option.EnumFieldNamesUpperSnakeCase.Severity(),
   114  			fixMode,
   115  			autoDisableType,
   116  		),
   117  		rules.NewEnumsHaveCommentRule(
   118  			enumsHaveComment.Severity(),
   119  			enumsHaveComment.ShouldFollowGolangStyle,
   120  		),
   121  		rules.NewFieldNamesLowerSnakeCaseRule(
   122  			option.FieldNamesLowerSnakeCase.Severity(),
   123  			fixMode,
   124  			autoDisableType,
   125  		),
   126  		rules.NewFieldNamesExcludePrepositionsRule(
   127  			fieldNamesExcludePrepositions.Severity(),
   128  			fieldNamesExcludePrepositions.Prepositions,
   129  			fieldNamesExcludePrepositions.Excludes,
   130  		),
   131  		rules.NewFieldsHaveCommentRule(
   132  			fieldsHaveComment.Severity(),
   133  			fieldsHaveComment.ShouldFollowGolangStyle,
   134  		),
   135  		rules.NewProto3FieldsAvoidRequiredRule(
   136  			option.Proto3FieldsAvoidRequired.Severity(),
   137  			fixMode,
   138  		),
   139  		rules.NewProto3GroupsAvoidRule(
   140  			option.Proto3GroupsAvoid.Severity(),
   141  			autoDisableType,
   142  		),
   143  		rules.NewRepeatedFieldNamesPluralizedRule(
   144  			repeatedFieldNamesPluralized.Severity(),
   145  			repeatedFieldNamesPluralized.PluralRules,
   146  			repeatedFieldNamesPluralized.SingularRules,
   147  			repeatedFieldNamesPluralized.UncountableRules,
   148  			repeatedFieldNamesPluralized.IrregularRules,
   149  			fixMode,
   150  			autoDisableType,
   151  		),
   152  		rules.NewMessageNamesUpperCamelCaseRule(
   153  			option.MessageNamesUpperCamelCase.Severity(),
   154  			fixMode,
   155  			autoDisableType,
   156  		),
   157  		rules.NewMessageNamesExcludePrepositionsRule(
   158  			messageNamesExcludePrepositions.Severity(),
   159  			messageNamesExcludePrepositions.Prepositions,
   160  			messageNamesExcludePrepositions.Excludes,
   161  		),
   162  		rules.NewMessagesHaveCommentRule(
   163  			messagesHaveComment.Severity(),
   164  			messagesHaveComment.ShouldFollowGolangStyle,
   165  		),
   166  		rules.NewRPCNamesUpperCamelCaseRule(
   167  			option.RPCNamesUpperCamelCase.Severity(),
   168  			fixMode,
   169  			autoDisableType,
   170  		),
   171  		rules.NewRPCNamesCaseRule(
   172  			option.RPCNamesCaseOption.Severity(),
   173  			option.RPCNamesCaseOption.Convention,
   174  		),
   175  		rules.NewRPCsHaveCommentRule(
   176  			rpcsHaveComment.Severity(),
   177  			rpcsHaveComment.ShouldFollowGolangStyle,
   178  		),
   179  		rules.NewServiceNamesUpperCamelCaseRule(
   180  			option.ServiceNamesUpperCamelCase.Severity(),
   181  			fixMode,
   182  			autoDisableType,
   183  		),
   184  		rules.NewServiceNamesEndWithRule(
   185  			option.ServiceNamesEndWith.Severity(),
   186  			serviceNamesEndWith.Text,
   187  		),
   188  		rules.NewServicesHaveCommentRule(
   189  			option.ServicesHaveComment.Severity(),
   190  			servicesHaveComment.ShouldFollowGolangStyle,
   191  		),
   192  	}
   193  }