{
  "isError" : false,
  "request" : { },
  "response" : {
    "limitCount" : 34,
    "limits" : [ {
      "comparator" : ">",
      "limit" : 10,
      "limitKind" : "scalar",
      "metricKey" : "moduleCoupling",
      "ruleCode" : "E11016",
      "usableMax" : 10
    }, {
      "byGenus" : {
        "abstract-function" : 8,
        "class" : 12,
        "component" : 15,
        "enumeration" : 12,
        "function" : 8,
        "record" : 8,
        "service" : 15,
        "trait" : 8
      },
      "comparator" : ">",
      "exempt" : [ ],
      "fallback" : 12,
      "limitKind" : "per-genus",
      "metricKey" : "constructCoupling",
      "ruleCode" : "E11015"
    }, {
      "byGenus" : {
        "class" : 8,
        "component" : 10,
        "enumeration" : 8,
        "service" : 10
      },
      "comparator" : ">",
      "exempt" : [ "abstract-function", "function", "record", "trait" ],
      "fallback" : 8,
      "limitKind" : "per-genus",
      "metricKey" : "lcom4",
      "ruleCode" : "E11014"
    }, {
      "condition" : "fires when disconnectedGroups > maxGroups AND ratio > maxRatio, only once the module has at least minConstructs constructs",
      "limitKind" : "compound",
      "maxGroups" : 30,
      "maxRatio" : 0.88,
      "metricKey" : "moduleCohesion",
      "minConstructs" : 60,
      "ruleCode" : "E11017"
    }, {
      "comparator" : ">",
      "limit" : 250,
      "limitKind" : "scalar",
      "metricKey" : "moduleSize",
      "ruleCode" : "E11027",
      "usableMax" : 250
    }, {
      "comparator" : ">",
      "limit" : 4,
      "limitKind" : "scalar",
      "metricKey" : "injectionFields",
      "ruleCode" : "E11040",
      "usableMax" : 4
    }, {
      "comparator" : ">",
      "limit" : 12,
      "limitKind" : "scalar",
      "metricKey" : "appRegistrations",
      "ruleCode" : "E11042",
      "usableMax" : 12
    }, {
      "comparator" : ">=",
      "limit" : 5,
      "limitKind" : "scalar",
      "metricKey" : "injectedTypesPerMethod",
      "ruleCode" : "E11043",
      "usableMax" : 4
    }, {
      "comparator" : ">",
      "limit" : 45,
      "limitKind" : "scalar",
      "metricKey" : "callableComplexity",
      "ruleCode" : "E11010",
      "usableMax" : 45
    }, {
      "comparator" : ">",
      "limit" : 500,
      "limitKind" : "scalar",
      "metricKey" : "typeComplexity",
      "ruleCode" : "E11010",
      "usableMax" : 500
    }, {
      "comparator" : ">",
      "limit" : 35,
      "limitKind" : "scalar",
      "metricKey" : "cognitiveComplexity",
      "ruleCode" : "E11021",
      "usableMax" : 35
    }, {
      "comparator" : ">",
      "limit" : 10,
      "limitKind" : "scalar",
      "metricKey" : "bracketNesting",
      "ruleCode" : "E11011",
      "usableMax" : 10
    }, {
      "comparator" : ">",
      "limit" : 20,
      "limitKind" : "scalar",
      "metricKey" : "blockNesting",
      "ruleCode" : "E11011",
      "usableMax" : 20
    }, {
      "comparator" : ">",
      "limit" : 6,
      "limitKind" : "scalar",
      "metricKey" : "nestingDepth",
      "ruleCode" : "E11011",
      "usableMax" : 6
    }, {
      "byGenus" : {
        "abstract-function" : 3,
        "class" : 4,
        "component" : 4,
        "enumeration" : 4,
        "function" : 3,
        "record" : 2,
        "service" : 4,
        "trait" : 4
      },
      "comparator" : ">",
      "exempt" : [ "any", "application", "constrained-class", "meta-data", "program", "service-application", "text", "text-base", "type", "value" ],
      "fallback" : 0,
      "limitKind" : "per-genus",
      "metricKey" : "inheritanceDepth",
      "ruleCode" : "E11019"
    }, {
      "comparator" : ">",
      "limit" : 15,
      "limitKind" : "scalar",
      "metricKey" : "expressionComplexity",
      "ruleCode" : "E11013",
      "usableMax" : 15
    }, {
      "comparator" : ">",
      "limit" : 20,
      "limitKind" : "scalar",
      "metricKey" : "expressionOperators",
      "ruleCode" : "E11013",
      "usableMax" : 20
    }, {
      "comparator" : ">",
      "limit" : 20,
      "limitKind" : "scalar",
      "metricKey" : "memberAccesses",
      "ruleCode" : "E11013",
      "usableMax" : 20
    }, {
      "comparator" : ">",
      "limit" : 50,
      "limitKind" : "scalar",
      "metricKey" : "statementsOperator",
      "ruleCode" : "E11012",
      "usableMax" : 50
    }, {
      "comparator" : ">",
      "limit" : 100,
      "limitKind" : "scalar",
      "metricKey" : "statementsMethod",
      "ruleCode" : "E11012",
      "usableMax" : 100
    }, {
      "comparator" : ">",
      "limit" : 150,
      "limitKind" : "scalar",
      "metricKey" : "statementsFunction",
      "ruleCode" : "E11012",
      "usableMax" : 150
    }, {
      "comparator" : ">",
      "limit" : 100,
      "limitKind" : "scalar",
      "metricKey" : "statementsServiceOperation",
      "ruleCode" : "E11012",
      "usableMax" : 100
    }, {
      "comparator" : ">",
      "limit" : 20,
      "limitKind" : "scalar",
      "metricKey" : "argumentsPerCall",
      "ruleCode" : "E11010",
      "usableMax" : 20
    }, {
      "comparator" : ">",
      "condition" : "fires when the construct's complexity ratio times its statement ratio exceeds the threshold - neither operand is a gate on its own",
      "limitKind" : "ratio",
      "metricKey" : "combinedComplexitySize",
      "ruleCode" : "E11020",
      "threshold" : 0.5
    }, {
      "comparator" : ">=",
      "limit" : 4,
      "limitKind" : "scalar",
      "metricKey" : "classServiceFieldsAsComponent",
      "ruleCode" : "E11022",
      "usableMax" : 3
    }, {
      "comparator" : ">=",
      "limit" : 5,
      "limitKind" : "scalar",
      "metricKey" : "forwardedMethodsForBy",
      "ruleCode" : "E11023",
      "usableMax" : 4
    }, {
      "comparator" : ">",
      "condition" : "fires, together with forwardedMethodsForBy, when the share of a trait's methods that a class overrides by hand exceeds the threshold",
      "limitKind" : "ratio",
      "metricKey" : "forwardedMethodsShareForBy",
      "ruleCode" : "E11023",
      "threshold" : 0.7
    }, {
      "comparator" : ">=",
      "limit" : 3,
      "limitKind" : "scalar",
      "metricKey" : "hybridServiceFields",
      "ruleCode" : "E11024",
      "usableMax" : 2
    }, {
      "comparator" : ">=",
      "limit" : 3,
      "limitKind" : "scalar",
      "metricKey" : "mixedServiceFields",
      "ruleCode" : "E11025",
      "usableMax" : 2
    }, {
      "comparator" : ">=",
      "limit" : 3,
      "limitKind" : "scalar",
      "metricKey" : "mixedDataFields",
      "ruleCode" : "E11025",
      "usableMax" : 2
    }, {
      "comparator" : ">=",
      "limit" : 3,
      "limitKind" : "scalar",
      "metricKey" : "methodsSharingInjectedType",
      "ruleCode" : "E11041",
      "usableMax" : 2
    }, {
      "comparator" : ">",
      "limit" : 3,
      "limitKind" : "scalar",
      "metricKey" : "typeTransitions",
      "ruleCode" : "E11054",
      "usableMax" : 3
    }, {
      "comparator" : ">=",
      "limit" : 2,
      "limitKind" : "scalar",
      "metricKey" : "booleanLiteralArguments",
      "ruleCode" : "E11061",
      "usableMax" : 1
    }, {
      "comparator" : ">=",
      "limit" : 4,
      "limitKind" : "scalar",
      "metricKey" : "unnamedArguments",
      "ruleCode" : "E11062",
      "usableMax" : 3
    } ],
    "meta" : {
      "serverMs" : "<timing>"
    },
    "note" : "These limits are ENFORCED — the compiler emits the listed error code when a value crosses the limit; there is no warning tier and no bypass. 'usableMax' is the largest value that still compiles (one more crosses). Comparator '>' means the limit value is the last legal one; '>=' means the last legal value is limit-1.",
    "status" : "ok"
  },
  "scenario" : "limits_shape",
  "tool" : "query_metric_limits"
}
