{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "additionalProperties": false,
  "definitions": {
    "attachment": {
      "description": "A file relevant to a tool invocation or to a result.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "description": {
          "description": "A message describing the role played by the attachment.",
          "$ref": "#/definitions/message"
        },
        "fileLocation": {
          "description": "The location of the attachment.",
          "$ref": "#/definitions/fileLocation"
        },
        "regions": {
          "description": "An array of regions of interest within the attachment.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/region"
          }
        },
        "rectangles": {
          "description": "An array of rectangles specifying areas of interest within the image.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/rectangle"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the attachment.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["fileLocation"]
    },
    "codeFlow": {
      "description": "A set of threadFlows which together describe a pattern of code execution relevant to detecting a result.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "message": {
          "description": "A message relevant to the code flow.",
          "$ref": "#/definitions/message"
        },
        "threadFlows": {
          "description": "An array of one or more unique threadFlow objects, each of which describes the progress of a program through a thread of execution.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": false,
          "items": {
            "$ref": "#/definitions/threadFlow"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the code flow.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["threadFlows"]
    },
    "conversion": {
      "description": "Describes how a converter transformed the output of a static analysis tool from the analysis tool's native output format into the SARIF format.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "tool": {
          "description": "A tool object that describes the converter.",
          "$ref": "#/definitions/tool"
        },
        "invocation": {
          "description": "An invocation object that describes the invocation of the converter.",
          "$ref": "#/definitions/invocation"
        },
        "analysisToolLogFiles": {
          "description": "The locations of the analysis tool's per-run log files.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/fileLocation"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the conversion.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["tool"]
    },
    "edge": {
      "description": "Represents a directed edge in a graph.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "description": "A string that uniquely identifies the edge within its graph.",
          "type": "string"
        },
        "label": {
          "description": "A short description of the edge.",
          "$ref": "#/definitions/message"
        },
        "sourceNodeId": {
          "description": "Identifies the source node (the node at which the edge starts).",
          "type": "string"
        },
        "targetNodeId": {
          "description": "Identifies the target node (the node at which the edge ends).",
          "type": "string"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the edge.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["id", "sourceNodeId", "targetNodeId"]
    },
    "edgeTraversal": {
      "description": "Represents the traversal of a single edge during a graph traversal.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "edgeId": {
          "description": "Identifies the edge being traversed.",
          "type": "string"
        },
        "message": {
          "description": "A message to display to the user as the edge is traversed.",
          "$ref": "#/definitions/message"
        },
        "finalState": {
          "description": "The values of relevant expressions after the edge has been traversed.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "stepOverEdgeCount": {
          "description": "The number of edge traversals necessary to return from a nested graph.",
          "type": "integer"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the edge traversal.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["edgeId"]
    },
    "exception": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "description": "A string that identifies the kind of exception, for example, the fully qualified type name of an object that was thrown, or the symbolic name of a signal."
        },
        "message": {
          "description": "A message that describes the exception.",
          "$ref": "#/definitions/message"
        },
        "stack": {
          "description": "The sequence of function calls leading to the exception.",
          "$ref": "#/definitions/stack"
        },
        "innerExceptions": {
          "description": "An array of exception objects each of which is considered a cause of this exception.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/exception"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the exception.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "externalPropertyFile": {
      "type": "object",
      "properties": {
        "fileLocation": {
          "description": "The location of the external property file.",
          "$ref": "#/definitions/fileLocation"
        },
        "instanceGuid": {
          "description": "A stable, unique identifier for the external property file in the form of a GUID.",
          "type": "string"
        },
        "itemCount": {
          "description": "A non-negative integer specifying the number of items contained in the external property file.",
          "type": "integer",
          "minimum": 0
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the external property file.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "externalPropertyFiles": {
      "description": "References to external property files that should be inlined with the content of a root log file.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "conversion": {
          "description": "An external property file containing a run.conversion object to be merged with the root log file.",
          "$ref": "#/definitions/externalPropertyFile"
        },
        "graphs": {
          "description": "An external property file containing a run.graphs object to be merged with the root log file.",
          "$ref": "#/definitions/externalPropertyFile"
        },
        "resources": {
          "description": "An external property file containing a run.resources object to be merged with the root log file.",
          "$ref": "#/definitions/externalPropertyFile"
        },
        "properties": {
          "description": "An external property file containing a run.properties object to be merged with the root log file.",
          "$ref": "#/definitions/externalPropertyFile"
        },
        "files": {
          "description": "An array of external property files containing run.files arrays to be merged with the root log file.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/externalPropertyFile"
          }
        },
        "invocations": {
          "description": "An array of external property files containing run.invocations arrays to be merged with the root log file.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/externalPropertyFile"
          }
        },
        "logicalLocations": {
          "description": "An array of external property files containing run.logicalLocations arrays to be merged with the root log file.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/externalPropertyFile"
          }
        },
        "results": {
          "description": "An array of external property files containing run.results arrays to be merged with the root log file.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": false,
          "items": {
            "$ref": "#/definitions/externalPropertyFile"
          }
        }
      }
    },
    "file": {
      "description": "A single file. In some cases, this file might be nested within another file.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "fileLocation": {
          "description": "The location of the file.",
          "$ref": "#/definitions/fileLocation"
        },
        "parentIndex": {
          "description": "Identifies the index of the immediate parent of the file, if this file is nested.",
          "type": "integer",
          "minimum": -1,
          "default": -1
        },
        "offset": {
          "description": "The offset in bytes of the file within its containing file.",
          "type": "integer"
        },
        "length": {
          "description": "The length of the file in bytes.",
          "type": "integer"
        },
        "roles": {
          "description": "The role or roles played by the file in the analysis.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "enum": [
              "analysisTarget",
              "attachment",
              "responseFile",
              "resultFile",
              "standardStream",
              "traceFile",
              "unmodifiedFile",
              "modifiedFile",
              "addedFile",
              "deletedFile",
              "renamedFile",
              "uncontrolledFile"
            ]
          }
        },
        "mimeType": {
          "description": "The MIME type (RFC 2045) of the file.",
          "type": "string",
          "pattern": "[^/]+/.+"
        },
        "contents": {
          "description": "The contents of the file.",
          "$ref": "#/definitions/fileContent"
        },
        "encoding": {
          "description": "Specifies the encoding for a file object that refers to a text file.",
          "type": "string"
        },
        "sourceLanguage": {
          "description": "Specifies the source language for any file object that refers to a text file that contains source code.",
          "type": "string"
        },
        "hashes": {
          "description": "A dictionary, each of whose keys is the name of a hash function and each of whose values is the hashed value of the file produced by the specified hash function.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "lastModifiedTimeUtc": {
          "description": "The Coordinated Universal Time (UTC) date and time at which the file was most recently modified. See \"Date/time properties\" in the SARIF spec for the required format.",
          "type": "string",
          "format": "date-time"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the file.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "fileChange": {
      "description": "A change to a single file.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "fileLocation": {
          "description": "The location of the file to change.",
          "$ref": "#/definitions/fileLocation"
        },
        "replacements": {
          "description": "An array of replacement objects, each of which represents the replacement of a single region in a single file specified by 'fileLocation'.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": false,
          "items": {
            "$ref": "#/definitions/replacement"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the file change.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["fileLocation", "replacements"]
    },
    "fileContent": {
      "description": "Represents content from an external file.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "text": {
          "description": "UTF-8-encoded content from a text file.",
          "type": "string"
        },
        "binary": {
          "description": "MIME Base64-encoded content from a binary file, or from a text file in its original encoding.",
          "type": "string"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the external file.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "fileLocation": {
      "description": "Specifies the location of a file.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "uri": {
          "description": "A string containing a valid relative or absolute URI.",
          "type": "string",
          "format": "uri-reference"
        },
        "uriBaseId": {
          "description": "A string which indirectly specifies the absolute URI with respect to which a relative URI in the \"uri\" property is interpreted.",
          "type": "string"
        },
        "fileIndex": {
          "description": "The index within the run files array of the file object associated with the file location.",
          "type": "integer",
          "default": -1,
          "minimum": -1
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the file location.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["uri"]
    },
    "fix": {
      "description": "A proposed fix for the problem represented by a result object. A fix specifies a set of file to modify. For each file, it specifies a set of bytes to remove, and provides a set of new bytes to replace them.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "description": {
          "description": "A message that describes the proposed fix, enabling viewers to present the proposed change to an end user.",
          "$ref": "#/definitions/message"
        },
        "fileChanges": {
          "description": "One or more file changes that comprise a fix for a result.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/fileChange"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the fix.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["fileChanges"]
    },
    "graph": {
      "description": "A network of nodes and directed edges that describes some aspect of the structure of the code (for example, a call graph).",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "description": "A string that uniquely identifies the graph within a run.graphs or result.graphs array.",
          "type": "string"
        },
        "description": {
          "description": "A description of the graph.",
          "$ref": "#/definitions/message"
        },
        "nodes": {
          "description": "An array of node objects representing the nodes of the graph.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/node"
          }
        },
        "edges": {
          "description": "An array of edge objects representing the edges of the graph.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/edge"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the graph.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["id"]
    },
    "graphTraversal": {
      "description": "Represents a path through a graph.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "graphId": {
          "description": "A string that uniquely identifies that graph being traversed.",
          "type": "string"
        },
        "description": {
          "description": "A description of this graph traversal.",
          "$ref": "#/definitions/message"
        },
        "initialState": {
          "description": "Values of relevant expressions at the start of the graph traversal.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "edgeTraversals": {
          "description": "The sequences of edges traversed by this graph traversal.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/edgeTraversal"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the graph traversal.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["graphId"]
    },
    "invocation": {
      "description": "The runtime environment of the analysis tool run.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "commandLine": {
          "description": "The command line used to invoke the tool.",
          "type": "string"
        },
        "arguments": {
          "description": "An array of strings, containing in order the command line arguments passed to the tool from the operating system.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "items": {
            "type": "string"
          }
        },
        "responseFiles": {
          "description": "The locations of any response files specified on the tool's command line.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/fileLocation"
          }
        },
        "attachments": {
          "description": "A set of files relevant to the invocation of the tool.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/attachment"
          }
        },
        "startTimeUtc": {
          "description": "The Coordinated Universal Time (UTC) date and time at which the run started. See \"Date/time properties\" in the SARIF spec for the required format.",
          "type": "string",
          "format": "date-time"
        },
        "endTimeUtc": {
          "description": "The Coordinated Universal Time (UTC) date and time at which the run ended. See \"Date/time properties\" in the SARIF spec for the required format.",
          "type": "string",
          "format": "date-time"
        },
        "exitCode": {
          "description": "The process exit code.",
          "type": "integer"
        },
        "toolNotifications": {
          "description": "A list of runtime conditions detected by the tool during the analysis.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/notification"
          }
        },
        "configurationNotifications": {
          "description": "A list of conditions detected by the tool that are relevant to the tool's configuration.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/notification"
          }
        },
        "exitCodeDescription": {
          "description": "The reason for the process exit.",
          "type": "string"
        },
        "exitSignalName": {
          "description": "The name of the signal that caused the process to exit.",
          "type": "string"
        },
        "exitSignalNumber": {
          "description": "The numeric value of the signal that caused the process to exit.",
          "type": "integer"
        },
        "processStartFailureMessage": {
          "description": "The reason given by the operating system that the process failed to start.",
          "type": "string"
        },
        "toolExecutionSuccessful": {
          "description": "A value indicating whether the tool's execution completed successfully.",
          "type": "boolean"
        },
        "machine": {
          "description": "The machine that hosted the analysis tool run.",
          "type": "string"
        },
        "account": {
          "description": "The account that ran the analysis tool.",
          "type": "string"
        },
        "processId": {
          "description": "The process id for the analysis tool run.",
          "type": "integer"
        },
        "executableLocation": {
          "description": "An absolute URI specifying the location of the analysis tool's executable.",
          "$ref": "#/definitions/fileLocation"
        },
        "workingDirectory": {
          "description": "The working directory for the analysis tool run.",
          "$ref": "#/definitions/fileLocation"
        },
        "environmentVariables": {
          "description": "The environment variables associated with the analysis tool process, expressed as key/value pairs.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "stdin": {
          "description": "A file containing the standard input stream to the process that was invoked.",
          "$ref": "#/definitions/fileLocation"
        },
        "stdout": {
          "description": "A file containing the standard output stream from the process that was invoked.",
          "$ref": "#/definitions/fileLocation"
        },
        "stderr": {
          "description": "A file containing the standard error stream from the process that was invoked.",
          "$ref": "#/definitions/fileLocation"
        },
        "stdoutStderr": {
          "description": "A file containing the interleaved standard output and standard error stream from the process that was invoked.",
          "$ref": "#/definitions/fileLocation"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the invocation.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "location": {
      "description": "A location within a programming artifact.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "physicalLocation": {
          "description": "Identifies the file and region.",
          "$ref": "#/definitions/physicalLocation"
        },
        "fullyQualifiedLogicalName": {
          "description": "The human-readable fully qualified name of the logical location. If run.logicalLocations is present, this value matches a property name within that object, from which further information about the logical location can be obtained.",
          "type": "string"
        },
        "logicalLocationIndex": {
          "description": "The index within the logical locations array of the logical location associated with the result.",
          "type": "integer",
          "default": -1,
          "minimum": -1
        },
        "message": {
          "description": "A message relevant to the location.",
          "$ref": "#/definitions/message"
        },
        "annotations": {
          "description": "A set of regions relevant to the location.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/region"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the location.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "logicalLocation": {
      "description": "A logical location of a construct that produced a result.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifies the construct in which the result occurred. For example, this property might contain the name of a class or a method.",
          "type": "string"
        },
        "fullyQualifiedName": {
          "description": "The human-readable fully qualified name of the logical location.",
          "type": "string"
        },
        "decoratedName": {
          "description": "The machine-readable name for the logical location, such as a mangled function name provided by a C++ compiler that encodes calling convention, return type and other details along with the function name.",
          "type": "string"
        },
        "parentIndex": {
          "description": "Identifies the index of the immediate parent of the construct in which the result was detected. For example, this property might point to a logical location that represents the namespace that holds a type.",
          "type": "integer",
          "minimum": -1,
          "default": -1
        },
        "kind": {
          "description": "The type of construct this logical location component refers to. Should be one of 'function', 'member', 'module', 'namespace', 'parameter', 'resource', 'returnType', 'type', or 'variable', if any of those accurately describe the construct.",
          "type": "string"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the logical location.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "message": {
      "description": "Encapsulates a message intended to be read by the end user.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "text": {
          "description": "A plain text message string.",
          "type": "string"
        },
        "messageId": {
          "description": "The resource id for a plain text message string.",
          "type": "string"
        },
        "richText": {
          "description": "A rich text message string.",
          "type": "string"
        },
        "richMessageId": {
          "description": "The resource id for a rich text message string.",
          "type": "string"
        },
        "arguments": {
          "description": "An array of strings to substitute into the message string.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "type": "string"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the message.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "node": {
      "description": "Represents a node in a graph.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "description": "A string that uniquely identifies the node within its graph.",
          "type": "string"
        },
        "label": {
          "description": "A short description of the node.",
          "$ref": "#/definitions/message"
        },
        "location": {
          "description": "A code location associated with the node.",
          "$ref": "#/definitions/location"
        },
        "children": {
          "description": "Array of child nodes.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/node"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the node.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["id"]
    },
    "notification": {
      "description": "Describes a condition relevant to the tool itself, as opposed to being relevant to a target being analyzed by the tool.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "description": "An identifier for the condition that was encountered.",
          "type": "string"
        },
        "ruleId": {
          "description": "The stable, unique identifier of the rule, if any, to which this notification is relevant.",
          "type": "string"
        },
        "ruleIndex": {
          "description": "The index within the run resources array of the rule object, if any, associated with this notification.",
          "type": "integer",
          "default": -1,
          "minimum": -1
        },
        "physicalLocation": {
          "description": "The file and region relevant to this notification.",
          "$ref": "#/definitions/physicalLocation"
        },
        "message": {
          "description": "A message that describes the condition that was encountered.",
          "$ref": "#/definitions/message"
        },
        "level": {
          "description": "A value specifying the severity level of the notification.",
          "default": "warning",
          "enum": ["note", "warning", "error"]
        },
        "threadId": {
          "description": "The thread identifier of the code that generated the notification.",
          "type": "integer"
        },
        "timeUtc": {
          "description": "The Coordinated Universal Time (UTC) date and time at which the analysis tool generated the notification.",
          "type": "string",
          "format": "date-time"
        },
        "exception": {
          "description": "The runtime exception, if any, relevant to this notification.",
          "$ref": "#/definitions/exception"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the notification.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["message"]
    },
    "physicalLocation": {
      "description": "A physical location relevant to a result. Specifies a reference to a programming artifact together with a range of bytes or characters within that artifact.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "id": {
          "description": "Value that distinguishes this physical location from all other physical locations in this run object.",
          "type": "integer"
        },
        "fileLocation": {
          "description": "The location of the file.",
          "$ref": "#/definitions/fileLocation"
        },
        "region": {
          "description": "Specifies a portion of the file.",
          "$ref": "#/definitions/region"
        },
        "contextRegion": {
          "description": "Specifies a portion of the file that encloses the region. Allows a viewer to display additional context around the region.",
          "$ref": "#/definitions/region"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the physical location.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["fileLocation"]
    },
    "propertyBag": {
      "description": "Key/value pairs that provide additional information about the object.",
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "tags": {
          "description": "A set of distinct strings that provide additional information.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "rectangle": {
      "description": "An area within an image.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "top": {
          "description": "The Y coordinate of the top edge of the rectangle, measured in the image's natural units.",
          "type": "number"
        },
        "left": {
          "description": "The X coordinate of the left edge of the rectangle, measured in the image's natural units.",
          "type": "number"
        },
        "bottom": {
          "description": "The Y coordinate of the bottom edge of the rectangle, measured in the image's natural units.",
          "type": "number"
        },
        "right": {
          "description": "The X coordinate of the right edge of the rectangle, measured in the image's natural units.",
          "type": "number"
        },
        "message": {
          "description": "A message relevant to the rectangle.",
          "$ref": "#/definitions/message"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the rectangle.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "region": {
      "description": "A region within a file where a result was detected.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "startLine": {
          "description": "The line number of the first character in the region.",
          "type": "integer",
          "minimum": 1
        },
        "startColumn": {
          "description": "The column number of the first character in the region.",
          "type": "integer",
          "minimum": 1
        },
        "endLine": {
          "description": "The line number of the last character in the region.",
          "type": "integer",
          "minimum": 1
        },
        "endColumn": {
          "description": "The column number of the character following the end of the region.",
          "type": "integer",
          "minimum": 1
        },
        "charOffset": {
          "description": "The zero-based offset from the beginning of the file of the first character in the region.",
          "type": "integer",
          "minimum": 0
        },
        "charLength": {
          "description": "The length of the region in characters.",
          "type": "integer",
          "minimum": 0
        },
        "byteOffset": {
          "description": "The zero-based offset from the beginning of the file of the first byte in the region.",
          "type": "integer",
          "minimum": 0
        },
        "byteLength": {
          "description": "The length of the region in bytes.",
          "type": "integer",
          "minimum": 0
        },
        "snippet": {
          "description": "The portion of the file contents within the specified region.",
          "$ref": "#/definitions/fileContent"
        },
        "message": {
          "description": "A message relevant to the region.",
          "$ref": "#/definitions/message"
        },
        "sourceLanguage": {
          "description": "Specifies the source language, if any, of the portion of the file specified by the region object.",
          "type": "string"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the region.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "replacement": {
      "description": "The replacement of a single region of a file.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "deletedRegion": {
          "description": "The region of the file to delete.",
          "$ref": "#/definitions/region"
        },
        "insertedContent": {
          "description": "The content to insert at the location specified by the 'deletedRegion' property.",
          "$ref": "#/definitions/fileContent"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the replacement.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["deletedRegion"]
    },
    "resources": {
      "description": "Container for items that require localization.",
      "type": "object",
      "properties": {
        "messageStrings": {
          "description": "A dictionary, each of whose keys is a resource identifier and each of whose values is a localized string.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "rules": {
          "description": "An array of rule objects relevant to the run.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/rule"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the resources.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "result": {
      "description": "A result produced by an analysis tool.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "ruleId": {
          "description": "The stable, unique identifier of the rule, if any, to which this notification is relevant. This member can be used to retrieve rule metadata from the rules dictionary, if it exists.",
          "type": "string"
        },
        "ruleIndex": {
          "description": "The index within the run resources array of the rule object associated with this result.",
          "type": "integer",
          "default": -1,
          "minimum": -1
        },
        "level": {
          "description": "A value specifying the severity level of the result.",
          "enum": ["notApplicable", "pass", "note", "warning", "error", "open"]
        },
        "message": {
          "description": "A message that describes the result. The first sentence of the message only will be displayed when visible space is limited.",
          "$ref": "#/definitions/message"
        },
        "analysisTarget": {
          "description": "Identifies the file that the analysis tool was instructed to scan. This need not be the same as the file where the result actually occurred.",
          "$ref": "#/definitions/fileLocation"
        },
        "locations": {
          "description": "The set of locations where the result was detected. Specify only one location unless the problem indicated by the result can only be corrected by making a change at every specified location.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/location"
          }
        },
        "instanceGuid": {
          "description": "A stable, unique identifier for the result in the form of a GUID.",
          "type": "string"
        },
        "correlationGuid": {
          "description": "A stable, unique identifier for the equivalence class of logically identical results to which this result belongs, in the form of a GUID.",
          "type": "string"
        },
        "occurrenceCount": {
          "description": "A positive integer specifying the number of times this logically unique result was observed in this run.",
          "type": "integer",
          "minimum": 1
        },
        "partialFingerprints": {
          "description": "A set of strings that contribute to the stable, unique identity of the result.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "fingerprints": {
          "description": "A set of strings each of which individually defines a stable, unique identity for the result.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "stacks": {
          "description": "An array of 'stack' objects relevant to the result.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/stack"
          }
        },
        "codeFlows": {
          "description": "An array of 'codeFlow' objects relevant to the result.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/codeFlow"
          }
        },
        "graphs": {
          "description": "A dictionary, each of whose keys is the id of a graph and each of whose values is a 'graph' object with that id.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/graph"
          }
        },
        "graphTraversals": {
          "description": "An array of one or more unique 'graphTraversal' objects.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/graphTraversal"
          }
        },
        "relatedLocations": {
          "description": "A set of locations relevant to this result.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/location"
          }
        },
        "suppressionStates": {
          "description": "A set of flags indicating one or more suppression conditions.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "items": {
            "enum": ["suppressedInSource", "suppressedExternally"]
          }
        },
        "baselineState": {
          "description": "The state of a result relative to a baseline of a previous run.",
          "enum": ["new", "existing", "absent"]
        },
        "rank": {
          "description": "A number representing the priority or importance of the result.",
          "type": "number",
          "minimum": -1,
          "maximum": 100,
          "default": -1
        },
        "attachments": {
          "description": "A set of files relevant to the result.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/attachment"
          }
        },
        "hostedViewerUri": {
          "description": "An absolute URI at which the result can be viewed.",
          "type": "string",
          "format": "uri"
        },
        "workItemUris": {
          "description": "The URIs of the work items associated with this result.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "items": {
            "type": "string",
            "format": "uri"
          }
        },
        "provenance": {
          "description": "Information about how and when the result was detected.",
          "$ref": "#/definitions/resultProvenance"
        },
        "fixes": {
          "description": "An array of 'fix' objects, each of which represents a proposed fix to the problem indicated by the result.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/fix"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the result.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["message"]
    },
    "resultProvenance": {
      "description": "Contains information about how and when a result was detected.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "firstDetectionTimeUtc": {
          "description": "The Coordinated Universal Time (UTC) date and time at which the result was first detected. See \"Date/time properties\" in the SARIF spec for the required format.",
          "type": "string",
          "format": "date-time"
        },
        "lastDetectionTimeUtc": {
          "description": "The Coordinated Universal Time (UTC) date and time at which the result was most recently detected. See \"Date/time properties\" in the SARIF spec for the required format.",
          "type": "string",
          "format": "date-time"
        },
        "firstDetectionRunInstanceGuid": {
          "description": "A GUID-valued string equal to the id.instanceGuid property of the run in which the result was first detected.",
          "type": "string"
        },
        "lastDetectionRunInstanceGuid": {
          "description": "A GUID-valued string equal to the id.instanceGuid property of the run in which the result was most recently detected.",
          "type": "string"
        },
        "invocationIndex": {
          "description": "The index within the run.invocations array of the invocation object which describes the tool invocation that detected the result.",
          "type": "integer",
          "minimum": -1
        },
        "conversionSources": {
          "description": "An array of physicalLocation objects which specify the portions of an analysis tool's output that a converter transformed into the result.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/physicalLocation"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the result.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "rule": {
      "description": "Describes an analysis rule.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "id": {
          "description": "A stable, opaque identifier for the rule.",
          "type": "string"
        },
        "deprecatedIds": {
          "description": "An array of stable, opaque identifiers by which this rule was known in some previous version of the analysis tool.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "name": {
          "description": "A rule identifier that is understandable to an end user.",
          "$ref": "#/definitions/message"
        },
        "shortDescription": {
          "description": "A concise description of the rule. Should be a single sentence that is understandable when visible space is limited to a single line of text.",
          "$ref": "#/definitions/message"
        },
        "fullDescription": {
          "description": "A description of the rule. Should, as far as possible, provide details sufficient to enable resolution of any problem indicated by the result.",
          "$ref": "#/definitions/message"
        },
        "messageStrings": {
          "description": "A set of name/value pairs with arbitrary names. The value within each name/value pair consists of plain text interspersed with placeholders, which can be used to construct a message in combination with an arbitrary number of additional string arguments.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "richMessageStrings": {
          "description": "A set of name/value pairs with arbitrary names. The value within each name/value pair consists of rich text interspersed with placeholders, which can be used to construct a message in combination with an arbitrary number of additional string arguments.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "configuration": {
          "description": "Information about the rule that can be configured at runtime.",
          "$ref": "#/definitions/ruleConfiguration"
        },
        "helpUri": {
          "description": "A URI where the primary documentation for the rule can be found.",
          "type": "string",
          "format": "uri"
        },
        "help": {
          "description": "Provides the primary documentation for the rule, useful when there is no online documentation.",
          "$ref": "#/definitions/message"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the rule.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "ruleConfiguration": {
      "description": "Information about a rule that can be configured at runtime.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Specifies whether the rule will be evaluated during the scan.",
          "type": "boolean"
        },
        "defaultLevel": {
          "description": "Specifies the default severity level for results generated by this rule.",
          "default": "warning",
          "enum": ["note", "warning", "error"]
        },
        "defaultRank": {
          "description": "Specifies the default priority or importance for results generated by this rule.",
          "type": "number",
          "minimum": -1,
          "maximum": 100,
          "default": -1
        },
        "parameters": {
          "description": "Contains configuration information specific to this rule.",
          "$ref": "#/definitions/propertyBag"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the rule configuration.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "run": {
      "description": "Describes a single run of an analysis tool, and contains the output of that run.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "tool": {
          "description": "Information about the tool or tool pipeline that generated the results in this run. A run can only contain results produced by a single tool or tool pipeline. A run can aggregate results from multiple log files, as long as context around the tool run (tool command-line arguments and the like) is identical for all aggregated files.",
          "$ref": "#/definitions/tool"
        },
        "invocations": {
          "description": "Describes the invocation of the analysis tool.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "$ref": "#/definitions/invocation"
          }
        },
        "conversion": {
          "description": "A conversion object that describes how a converter transformed an analysis tool's native output format into the SARIF format.",
          "$ref": "#/definitions/conversion"
        },
        "versionControlProvenance": {
          "description": "Specifies the revision in version control of the files that were scanned.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/versionControlDetails"
          }
        },
        "originalUriBaseIds": {
          "description": "The file location specified by each uriBaseId symbol on the machine where the tool originally ran.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/fileLocation"
          }
        },
        "files": {
          "description": "An array of file objects relevant to the run.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/file"
          }
        },
        "logicalLocations": {
          "description": "An array of logical locations such as namespaces, types or functions.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/logicalLocation"
          }
        },
        "graphs": {
          "description": "A dictionary, each of whose keys is the id of a graph and each of whose values is a 'graph' object with that id.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/graph"
          }
        },
        "results": {
          "description": "The set of results contained in an SARIF log. The results array can be omitted when a run is solely exporting rules metadata. It must be present (but may be empty) if a log file represents an actual scan.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "items": {
            "$ref": "#/definitions/result"
          }
        },
        "resources": {
          "description": "Items that can be localized, such as message strings and rule metadata.",
          "$ref": "#/definitions/resources"
        },
        "id": {
          "description": "Automation details that describe this run.",
          "$ref": "#/definitions/runAutomationDetails"
        },
        "aggregateIds": {
          "description": "Automation details that describe the aggregate of runs to which this run belongs.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": true,
          "default": [],
          "items": {
            "$ref": "#/definitions/runAutomationDetails"
          }
        },
        "baselineInstanceGuid": {
          "description": "The 'instanceGuid' property of a previous SARIF 'run' that comprises the baseline that was used to compute result 'baselineState' properties for the run.",
          "type": "string"
        },
        "richMessageMimeType": {
          "description": "The MIME type of all rich text message properties in the run. Default: \"text/markdown;variant=GFM\"",
          "type": "string",
          "default": "text/markdown;variant=GFM"
        },
        "redactionToken": {
          "description": "The string used to replace sensitive information in a redaction-aware property.",
          "type": "string"
        },
        "defaultFileEncoding": {
          "description": "Specifies the default encoding for any file object that refers to a text file.",
          "type": "string"
        },
        "defaultSourceLanguage": {
          "description": "Specifies the default source language for any file object that refers to a text file that contains source code.",
          "type": "string"
        },
        "newlineSequences": {
          "description": "An ordered list of character sequences that were treated as line breaks when computing region information for the run.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "default": ["\r\n", "\n"],
          "items": {
            "type": "string"
          }
        },
        "columnKind": {
          "description": "Specifies the unit in which the tool measures columns.",
          "enum": ["utf16CodeUnits", "unicodeCodePoints"],
          "default": "unicodeCodePoints"
        },
        "externalPropertyFiles": {
          "description": "References to external property files that should be inlined with the content of a root log file.",
          "$ref": "#/definitions/externalPropertyFiles"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the run.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["tool"]
    },
    "runAutomationDetails": {
      "description": "Information that describes a run's identity and role within an engineering system process.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "description": {
          "description": "A description of the identity and role played within the engineering system by this object's containing run object.",
          "$ref": "#/definitions/message"
        },
        "instanceId": {
          "description": "A hierarchical string that uniquely identifies this object's containing run object.",
          "type": "string"
        },
        "instanceGuid": {
          "description": "A stable, unique identifier for this object's containing run object in the form of a GUID.",
          "type": "string"
        },
        "correlationGuid": {
          "description": "A stable, unique identifier for the equivalence class of runs to which this object's containing run object belongs in the form of a GUID.",
          "type": "string"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the run automation details.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "stack": {
      "description": "A call stack that is relevant to a result.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "message": {
          "description": "A message relevant to this call stack.",
          "$ref": "#/definitions/message"
        },
        "frames": {
          "description": "An array of stack frames that represents a sequence of calls, rendered in reverse chronological order, that comprise the call stack.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "items": {
            "$ref": "#/definitions/stackFrame"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the stack.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["frames"]
    },
    "stackFrame": {
      "description": "A function call within a stack trace.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "location": {
          "description": "The location to which this stack frame refers.",
          "$ref": "#/definitions/location"
        },
        "module": {
          "description": "The name of the module that contains the code of this stack frame.",
          "type": "string"
        },
        "threadId": {
          "description": "The thread identifier of the stack frame.",
          "type": "integer"
        },
        "address": {
          "description": "The address of the method or function that is executing.",
          "type": "integer"
        },
        "offset": {
          "description": "The offset from the method or function that is executing.",
          "type": "integer"
        },
        "parameters": {
          "description": "The parameters of the call that is executing.",
          "type": "array",
          "minItems": 0,
          "uniqueItems": false,
          "default": [],
          "items": {
            "type": "string",
            "default": []
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the stack frame.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "threadFlow": {
      "type": "object",
      "properties": {
        "id": {
          "description": "An string that uniquely identifies the threadFlow within the codeFlow in which it occurs.",
          "type": "string"
        },
        "message": {
          "description": "A message relevant to the thread flow.",
          "$ref": "#/definitions/message"
        },
        "locations": {
          "description": "A temporally ordered array of 'threadFlowLocation' objects, each of which describes a location visited by the tool while producing the result.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": false,
          "items": {
            "$ref": "#/definitions/threadFlowLocation"
          }
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the thread flow.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["locations"]
    },
    "threadFlowLocation": {
      "description": "A location visited by an analysis tool while simulating or monitoring the execution of a program.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "location": {
          "description": "The code location.",
          "$ref": "#/definitions/location"
        },
        "stack": {
          "description": "The call stack leading to this location.",
          "$ref": "#/definitions/stack"
        },
        "kind": {
          "description": "A string describing the type of this location.",
          "type": "string"
        },
        "module": {
          "description": "The name of the module that contains the code that is executing.",
          "type": "string"
        },
        "state": {
          "description": "A dictionary, each of whose keys specifies a variable or expression, the associated value of which represents the variable or expression value. For an annotation of kind 'continuation', for example, this dictionary might hold the current assumed values of a set of global variables.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nestingLevel": {
          "description": "An integer representing a containment hierarchy within the thread flow.",
          "type": "integer"
        },
        "executionOrder": {
          "description": "An integer representing the temporal order in which execution reached this location.",
          "type": "integer"
        },
        "executionTimeUtc": {
          "description": "The Coordinated Universal Time (UTC) date and time at which this location was executed.",
          "type": "string",
          "format": "date-time"
        },
        "importance": {
          "description": "Specifies the importance of this location in understanding the code flow in which it occurs. The order from most to least important is \"essential\", \"important\", \"unimportant\". Default: \"important\".",
          "enum": ["important", "essential", "unimportant"]
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the threadflow location.",
          "$ref": "#/definitions/propertyBag"
        }
      }
    },
    "tool": {
      "description": "The analysis tool that was run.",
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the tool.",
          "type": "string"
        },
        "fullName": {
          "description": "The name of the tool along with its version and any other useful identifying information, such as its locale.",
          "type": "string"
        },
        "version": {
          "description": "The tool version, in whatever format the tool natively provides.",
          "type": "string"
        },
        "semanticVersion": {
          "description": "The tool version in the format specified by Semantic Versioning 2.0.",
          "type": "string"
        },
        "dottedQuadFileVersion": {
          "description": "The binary version of the tool's primary executable file expressed as four non-negative integers separated by a period (for operating systems that express file versions in this way).",
          "type": "string",
          "pattern": "[0-9]+(\\.[0-9]+){3}"
        },
        "downloadUri": {
          "description": "The absolute URI from which the tool can be downloaded.",
          "type": "string",
          "format": "uri"
        },
        "sarifLoggerVersion": {
          "description": "A version that uniquely identifies the SARIF logging component that generated this file, if it is versioned separately from the tool.",
          "type": "string"
        },
        "language": {
          "description": "The tool language (expressed as an ISO 649 two-letter lowercase culture code) and region (expressed as an ISO 3166 two-letter uppercase subculture code associated with a country or region).",
          "type": "string",
          "default": "en-US"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the tool.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["name"]
    },
    "versionControlDetails": {
      "description": "Specifies the information necessary to retrieve a desired revision from a version control system.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "repositoryUri": {
          "description": "The absolute URI of the repository.",
          "type": "string",
          "format": "uri"
        },
        "revisionId": {
          "description": "A string that uniquely and permanently identifies the revision within the repository.",
          "type": "string"
        },
        "branch": {
          "description": "The name of a branch containing the revision.",
          "type": "string"
        },
        "revisionTag": {
          "description": "A tag that has been applied to the revision.",
          "type": "string"
        },
        "asOfTimeUtc": {
          "description": "A Coordinated Universal Time (UTC) date and time that can be used to synchronize an enlistment to the state of the repository at that time.",
          "type": "string",
          "format": "date-time"
        },
        "mappedTo": {
          "description": "The location in the local file system to which the root of the repository was mapped at the time of the analysis.",
          "$ref": "#/definitions/fileLocation"
        },
        "properties": {
          "description": "Key/value pairs that provide additional information about the version control details.",
          "$ref": "#/definitions/propertyBag"
        }
      },
      "required": ["repositoryUri"]
    }
  },
  "description": "Static Analysis Results Format (SARIF) Version 2.0.0-csd.2.beta-2019-01-09 JSON Schema: a standard format for the output of static analysis tools.",
  "id": "https://json.schemastore.org/sarif-2.0.0-csd.2.beta.2019-01-09.json",
  "properties": {
    "$schema": {
      "description": "The URI of the JSON schema corresponding to the version.",
      "type": "string",
      "format": "uri"
    },
    "version": {
      "description": "The SARIF format version of this log file.",
      "enum": ["2.0.0-csd.2.beta.2019-01-09"]
    },
    "runs": {
      "description": "The set of runs contained in this log file.",
      "type": "array",
      "minItems": 0,
      "uniqueItems": false,
      "items": {
        "$ref": "#/definitions/run"
      }
    },
    "properties": {
      "description": "Key/value pairs that provide additional information about the log file.",
      "$ref": "#/definitions/propertyBag"
    }
  },
  "required": ["version", "runs"],
  "title": "Static Analysis Results Format (SARIF) Version 2.0.0-csd.2.beta.2019-01-09 JSON Schema",
  "type": "object"
}
