def apply()

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
    }