{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "param": {
      "title": "Function parameter with type and optional name: `Integer size`, `::String name`, `untyped`, ...",
      "type": "object",
      "properties": {
        "type": {
          "$ref": "types.json"
        },
        "name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": ["type", "name"]
    }
  },
  "properties": {
    "required_positionals": {
      "title": "Required positional parameters",
      "type": "array",
      "items": {
        "$ref": "#/definitions/param"
      }
    },
    "optional_positionals": {
      "title": "Optional positional parameters",
      "type": "array",
      "items": {
        "$ref": "#/definitions/param"
      }
    },
    "rest_positionals": {
      "title": "Rest parameter",
      "oneOf": [
        {
          "$ref": "#/definitions/param"
        },
        {
          "type": "null"
        }
      ]
    },
    "trailing_positionals": {
      "title": "Trailing potisional parameters",
      "type": "array",
      "items": {
        "$ref": "#/definitions/param"
      }
    },
    "required_keywords": {
      "title": "Required keyword parameters",
      "additionalProperties": {
        "$ref": "#/definitions/param"
      }
    },
    "optional_keywords": {
      "title": "Optional keyword parameters",
      "additionalProperties": {
        "$ref": "#/definitions/param"
      }
    },
    "rest_keywords": {
      "title": "Rest keyword parameters",
      "oneOf": [
        {
          "$ref": "#/definitions/param"
        },
        {
          "type": "null"
        }
      ]
    },
    "return_type": {
      "title": "Return type of a function",
      "$ref": "types.json"
    }
  },
  "required": ["required_positionals", "optional_positionals", "rest_positionals", "trailing_positionals", "required_keywords", "optional_keywords", "rest_keywords", "return_type"]
}
