in scrooge-linter/src/main/scala/com/twitter/scrooge/linter/LintRule.scala [82:126]
def apply(doc: Document): Seq[LintMessage] = {
// struct fields are generated in an unapply function
val structs = doc.defs.collect {
case s: StructLike if s.fields.length >= OptimalLimit & !s.isInstanceOf[Union] =>
lintMessage("fields for thrift struct", s"${s.originalName} struct", s.fields.length)
}
// service function fields are generated as a function
val serviceFnParams = doc.defs.collect {
case service: Service =>
service.functions.collect {
case fn: Function if fn.args.length >= OptimalLimit =>
lintMessage(
"thrift service method parameters",
s"${service.sid.name}.${fn.funcName.name} function",
fn.args.length)
}
}.flatten
// service function exceptions fields generate thrift response struct
// constructors and an unapply function
val serviceFnExceptions = doc.defs.collect {
case service: Service =>
service.functions.collect {
case fn: Function if fn.throws.length >= OptimalLimit =>
lintMessage(
"thrift service method exceptions",
s"${service.sid.name}.${fn.funcName.name} function",
fn.throws.length
)
}
}.flatten
// service functions are generated as constructor parameters for the service
val serviceFns = doc.defs.collect {
case service: Service if service.functions.length >= OptimalLimit =>
lintMessage(
"thrift service methods",
s"${service.sid.name} struct",
service.functions.length)
}
structs ++ serviceFns ++ serviceFnParams ++ serviceFnExceptions
}