<!doctype html>
<html>
<head>
  <meta charset="UTF-8"/>
  <title>Common Types</title>
</head>
<body>
<h1>Common Types</h1>
<version>1.4.4</version>
<p>
  This document contains a specification of the types that are common between
  the analysis server wire protocol and the analysis server plugin wire
  protocol. While those protocols are versioned, the common types are not
  versioned separately.
</p>
<p>
  When those protocols have identical definitions of a type, the type definition
  should be removed from the two individual specifications and added to this
  document. Two definitions of a type are identical if the HTML that defines the
  types is identical and if all of the types referenced by those two types are
  identical.
</p>
<p>
  When it becomes necessary to change the definition of a common type in one
  protocol such that the type will no longer be common, that type and any types
  that reference that type must be removed from this document and added to both
  of the documents that include this document.
</p>
<types>
  <type name="AddContentOverlay">
    <p>
      A directive to begin overlaying the contents of a file. The supplied
      content will be used for analysis in place of the file contents in the
      filesystem.
    </p>
    <p>
      If this directive is used on a file that already has a file content
      overlay, the old overlay is discarded and replaced with the new one.
    </p>
    <object>
      <field name="type" value="add">
        <ref>String</ref>
      </field>
      <field name="content">
        <ref>String</ref>
        <p>
          The new content of the file.
        </p>
      </field>
    </object>
  </type>
  <type name="AnalysisError">
    <p>
      An indication of an error, warning, or hint that was produced by the
      analysis.
    </p>
    <object>
      <field name="severity">
        <ref>AnalysisErrorSeverity</ref>
        <p>
          The severity of the error.
        </p>
      </field>
      <field name="type">
        <ref>AnalysisErrorType</ref>
        <p>
          The type of the error.
        </p>
      </field>
      <field name="location">
        <ref>Location</ref>
        <p>
          The location associated with the error.
        </p>
      </field>
      <field name="message">
        <ref>String</ref>
        <p>
          The message to be displayed for this error. The message should
          indicate what is wrong with the code and why it is wrong.
        </p>
      </field>
      <field name="correction" optional="true">
        <ref>String</ref>
        <p>
          The correction message to be displayed for this error. The correction
          message should indicate how the user can fix the error. The field is
          omitted if there is no correction message associated with the error
          code.
        </p>
      </field>
      <field name="code">
        <ref>String</ref>
        <p>
          The name, as a string, of the error code associated with this error.
        </p>
      </field>
      <field name="url" optional="true">
        <ref>String</ref>
        <p>
          The URL of a page containing documentation associated with this error.
        </p>
      </field>
      <field name="contextMessages" optional="true">
        <list>
          <ref>DiagnosticMessage</ref>
        </list>
        <p>
          Additional messages associated with this diagnostic that provide
          context to help the user understand the diagnostic.
        </p>
      </field>
      <field name="hasFix" optional="true">
        <ref>bool</ref>
        <p>
          A hint to indicate to interested clients that this error has an
          associated fix (or fixes). The absence of this field implies there
          are not known to be fixes. Note that since the operation to calculate
          whether fixes apply needs to be performant it is possible that
          complicated tests will be skipped and a false negative returned. For
          this reason, this attribute should be treated as a "hint". Despite the
          possibility of false negatives, no false positives should be returned.
          If a client sees this flag set they can proceed with the confidence
          that there are in fact associated fixes.
        </p>
      </field>
    </object>
  </type>
  <type name="AnalysisErrorSeverity">
    <p>
      An enumeration of the possible severities of analysis errors.
    </p>
    <enum>
      <value><code>INFO</code></value>
      <value><code>WARNING</code></value>
      <value><code>ERROR</code></value>
    </enum>
  </type>
  <type name="AnalysisErrorType">
    <p>
      An enumeration of the possible types of analysis errors.
    </p>
    <enum>
      <value><code>CHECKED_MODE_COMPILE_TIME_ERROR</code></value>
      <value><code>COMPILE_TIME_ERROR</code></value>
      <value><code>HINT</code></value>
      <value><code>LINT</code></value>
      <value><code>STATIC_TYPE_WARNING</code></value>
      <value><code>STATIC_WARNING</code></value>
      <value><code>SYNTACTIC_ERROR</code></value>
      <value><code>TODO</code></value>
    </enum>
  </type>
  <type name="ChangeContentOverlay">
    <p>
      A directive to modify an existing file content overlay. One or more ranges
      of text are deleted from the old file content overlay and replaced with
      new text.
    </p>
    <p>
      The edits are applied in the order in which they occur in the list. This
      means that the offset of each edit must be correct under the assumption
      that all previous edits have been applied.
    </p>
    <p>
      It is an error to use this overlay on a file that does not yet have a file
      content overlay or that has had its overlay removed via
      <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
    </p>
    <p>
      If any of the edits cannot be applied due to its offset or length being
      out of range, an <tt>INVALID_OVERLAY_CHANGE</tt> error will be reported.
    </p>
    <object>
      <field name="type" value="change">
        <ref>String</ref>
      </field>
      <field name="edits">
        <list>
          <ref>SourceEdit</ref>
        </list>
        <p>
          The edits to be applied to the file.
        </p>
      </field>
    </object>
  </type>
  <type name="CompletionSuggestion">
    <p>
      A suggestion for how to complete partially entered text. Many of the
      fields are optional, depending on the kind of element being suggested.
    </p>
    <object>
      <field name="kind">
        <ref>CompletionSuggestionKind</ref>
        <p>
          The kind of element being suggested.
        </p>
      </field>
      <field name="relevance">
        <ref>int</ref>
        <p>
          The relevance of this completion suggestion where a higher number
          indicates a higher relevance.
        </p>
      </field>
      <field name="completion">
        <ref>String</ref>
        <p>
          The identifier to be inserted if the suggestion is selected. If the
          suggestion is for a method or function, the client might want to
          additionally insert a template for the parameters. The information
          required in order to do so is contained in other fields.
        </p>
      </field>
      <field name="displayText" optional="true">
        <ref>String</ref>
        <p>
          Text to be displayed in, for example, a completion pop-up. This field
          is only defined if the displayed text should be different than the
          completion.  Otherwise it is omitted.
        </p>
      </field>
      <field name="replacementOffset" optional="true">
        <ref>int</ref>
        <p>
          The offset of the start of the text to be
          replaced. If supplied, this should be used in
          preference to the offset provided on the
          containing completion results.

          This value may be provided independently of
          replacementLength (for example if only one
          differs from the completion result value).
        </p>
      </field>
      <field name="replacementLength" optional="true">
        <ref>int</ref>
        <p>
          The length of the text to be replaced.
          If supplied, this should be used in preference
          to the offset provided on the
          containing completion results.

          This value may be provided independently of
          replacementOffset (for example if only one
          differs from the completion result value).
        </p>
      </field>
      <field name="selectionOffset">
        <ref>int</ref>
        <p>
          The offset, relative to the beginning of the completion, of where the
          selection should be placed after insertion.
        </p>
      </field>
      <field name="selectionLength">
        <ref>int</ref>
        <p>
          The number of characters that should be selected after insertion.
        </p>
      </field>
      <field name="isDeprecated">
        <ref>bool</ref>
        <p>
          True if the suggested element is deprecated.
        </p>
      </field>
      <field name="isPotential">
        <ref>bool</ref>
        <p>
          True if the element is not known to be valid for the target. This
          happens if the type of the target is dynamic.
        </p>
      </field>
      <field name="docSummary" optional="true">
        <ref>String</ref>
        <p>
          An abbreviated version of the Dartdoc associated with the element
          being suggested. This field is omitted if there is no Dartdoc
          associated with the element.
        </p>
      </field>
      <field name="docComplete" optional="true">
        <ref>String</ref>
        <p>
          The Dartdoc associated with the element being suggested. This field is
          omitted if there is no Dartdoc associated with the element.
        </p>
      </field>
      <field name="declaringType" optional="true">
        <ref>String</ref>
        <p>
          The class that declares the element being suggested. This field is
          omitted if the suggested element is not a member of a class.
        </p>
      </field>
      <field name="defaultArgumentListString" optional="true">
        <ref>String</ref>
        <p>
          A default String for use in generating argument list source contents
          on the client side.
        </p>
      </field>
      <field name="defaultArgumentListTextRanges" optional="true">
        <list>
          <ref>int</ref>
        </list>
        <p>
          Pairs of offsets and lengths describing 'defaultArgumentListString'
          text ranges suitable for use by clients to set up linked edits of
          default argument source contents. For example, given an argument list
          string 'x, y', the corresponding text range [0, 1, 3, 1], indicates
          two text ranges of length 1, starting at offsets 0 and 3. Clients can
          use these ranges to treat the 'x' and 'y' values specially for linked
          edits.
        </p>
      </field>
      <field name="element" optional="true">
        <ref>Element</ref>
        <p>
          Information about the element reference being suggested.
        </p>
      </field>
      <field name="returnType" optional="true">
        <ref>String</ref>
        <p>
          The return type of the getter, function or method or the type of the
          field being suggested. This field is omitted if the suggested element
          is not a getter, function or method.
        </p>
      </field>
      <field name="parameterNames" optional="true">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The names of the parameters of the function or method being suggested.
          This field is omitted if the suggested element is not a setter,
          function or method.
        </p>
      </field>
      <field name="parameterTypes" optional="true">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The types of the parameters of the function or method being suggested.
          This field is omitted if the parameterNames field is omitted.
        </p>
      </field>
      <field name="requiredParameterCount" optional="true">
        <ref>int</ref>
        <p>
          The number of required parameters for the function or method being
          suggested. This field is omitted if the parameterNames field is
          omitted.
        </p>
      </field>
      <field name="hasNamedParameters" optional="true">
        <ref>bool</ref>
        <p>
          True if the function or method being suggested has at least one named
          parameter. This field is omitted if the parameterNames field is
          omitted.
        </p>
      </field>
      <field name="parameterName" optional="true">
        <ref>String</ref>
        <p>
          The name of the optional parameter being suggested. This field is
          omitted if the suggestion is not the addition of an optional argument
          within an argument list.
        </p>
      </field>
      <field name="parameterType" optional="true">
        <ref>String</ref>
        <p>
          The type of the options parameter being suggested. This field is
          omitted if the parameterName field is omitted.
        </p>
      </field>
    </object>
  </type>
  <type name="CompletionSuggestionKind">
    <p>
      An enumeration of the kinds of elements that can be included in a
      completion suggestion.
    </p>
    <enum>
      <value>
        <code>ARGUMENT_LIST</code>
        <p>
          A list of arguments for the method or function that is being
          invoked. For this suggestion kind, the completion field is a
          textual representation of the invocation and the parameterNames,
          parameterTypes, and requiredParameterCount attributes are defined.
        </p>
      </value>
      <value><code>IMPORT</code></value>
      <value>
        <code>IDENTIFIER</code>
        <p>
          The element identifier should be inserted at the completion
          location. For example "someMethod" in <tt>import 'myLib.dart' show
          someMethod;</tt>. For suggestions of this kind, the element
          attribute is defined and the completion field is the element's
          identifier.
        </p>
      </value>
      <value>
        <code>INVOCATION</code>
        <p>
          The element is being invoked at the completion location. For
          example, 'someMethod' in <tt>x.someMethod();</tt>. For suggestions
          of this kind, the element attribute is defined and the completion
          field is the element's identifier.
        </p>
      </value>
      <value>
        <code>KEYWORD</code>
        <p>
          A keyword is being suggested. For suggestions of this kind, the
          completion is the keyword.
        </p>
      </value>
      <value>
        <code>NAMED_ARGUMENT</code>
        <p>
          A named argument for the current call site is being suggested. For
          suggestions of this kind, the completion is the named argument
          identifier including a trailing ':' and a space.
        </p>
      </value>
      <value><code>OPTIONAL_ARGUMENT</code></value>
      <value>
        <code>OVERRIDE</code>
        <p>
          An overriding implementation of a class member is being suggested.
        </p>
      </value>
      <value><code>PARAMETER</code></value>
      <value>
        <code>PACKAGE_NAME</code>
        <p>The name of a pub package is being suggested.</p>
      </value>
    </enum>
  </type>
  <type name="DiagnosticMessage">
    <p>
      A message associated with a diagnostic.
    </p>
    <p>
      For example, if the diagnostic is reporting that a variable has been
      referenced before it was declared, it might have a diagnostic message that
      indicates where the variable is declared.
    </p>
    <object>
      <field name="message">
        <ref>String</ref>
        <p>
          The message to be displayed to the user.
        </p>
      </field>
      <field name="location">
        <ref>Location</ref>
        <p>
          The location associated with or referenced by the message. Clients
          should provide the ability to navigate to the location.
        </p>
      </field>
    </object>
  </type>
  <type name="Element">
    <p>
      Information about an element (something that can be declared in code).
    </p>
    <object>
      <field name="kind">
        <ref>ElementKind</ref>
        <p>
          The kind of the element.
        </p>
      </field>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the element. This is typically used as the label in the
          outline.
        </p>
      </field>
      <field name="location" optional="true">
        <ref>Location</ref>
        <p>
          The location of the name in the declaration of the element.
        </p>
      </field>
      <field name="flags">
        <ref>int</ref>
        <p>
          A bit-map containing the following flags:
        </p>
        <ul>
          <li>
            0x01 - set if the element is explicitly or implicitly abstract
          </li>
          <li>
            0x02 - set if the element was declared to be ‘const’
          </li>
          <li>
            0x04 - set if the element was declared to be ‘final’
          </li>
          <li>
            0x08 - set if the element is a static member of a class or is a
            top-level function or field
          </li>
          <li>
            0x10 - set if the element is private
          </li>
          <li>
            0x20 - set if the element is deprecated
          </li>
        </ul>
      </field>
      <field name="parameters" optional="true">
        <ref>String</ref>
        <p>
          The parameter list for the element. If the element is not a method or
          function this field will not be defined. If the element doesn't have
          parameters (e.g. getter), this field will not be defined. If the
          element has zero parameters, this field will have a value of "()".
        </p>
      </field>
      <field name="returnType" optional="true">
        <ref>String</ref>
        <p>
          The return type of the element. If the element is not a method or
          function this field will not be defined. If the element does not have
          a declared return type, this field will contain an empty string.
        </p>
      </field>
      <field name="typeParameters" optional="true">
        <ref>String</ref>
        <p>
          The type parameter list for the element. If the element doesn't have
          type parameters, this field will not be defined.
        </p>
      </field>
      <field name="aliasedType" optional="true">
        <ref>String</ref>
        <p>
          If the element is a type alias, this field is the aliased type.
          Otherwise this field will not be defined.
        </p>
      </field>
    </object>
  </type>
  <type name="ElementKind">
    <p>
      An enumeration of the kinds of elements.
    </p>
    <enum>
      <value><code>CLASS</code></value>
      <value><code>CLASS_TYPE_ALIAS</code></value>
      <value><code>COMPILATION_UNIT</code></value>
      <value><code>CONSTRUCTOR</code></value>
      <value><code>CONSTRUCTOR_INVOCATION</code></value>
      <value><code>ENUM</code></value>
      <value><code>ENUM_CONSTANT</code></value>
      <value><code>EXTENSION</code></value>
      <value><code>FIELD</code></value>
      <value><code>FILE</code></value>
      <value><code>FUNCTION</code></value>
      <value><code>FUNCTION_INVOCATION</code></value>
      <value><code>FUNCTION_TYPE_ALIAS</code></value>
      <value><code>GETTER</code></value>
      <value><code>LABEL</code></value>
      <value><code>LIBRARY</code></value>
      <value><code>LOCAL_VARIABLE</code></value>
      <value><code>METHOD</code></value>
      <value><code>MIXIN</code></value>
      <value><code>PARAMETER</code></value>
      <value><code>PREFIX</code></value>
      <value><code>SETTER</code></value>
      <value><code>TOP_LEVEL_VARIABLE</code></value>
      <value><code>TYPE_ALIAS</code></value>
      <value><code>TYPE_PARAMETER</code></value>
      <value><code>UNIT_TEST_GROUP</code></value>
      <value><code>UNIT_TEST_TEST</code></value>
      <value><code>UNKNOWN</code></value>
    </enum>
  </type>
  <type name="FilePath">
    <ref>String</ref>
    <p>
      The absolute, normalized path of a file.
    </p>
    <p>
      If the format of a file path in a request is not valid, e.g. the path is
      not absolute or is not normalized, then an error of type
      <tt>INVALID_FILE_PATH_FORMAT</tt> will be generated.
    </p>
  </type>
  <type name="FoldingKind">
    <p>
      An enumeration of the kinds of folding regions.
    </p>
    <enum>
      <value><code>ANNOTATIONS</code></value>
      <value><code>BLOCK</code></value>
      <value><code>CLASS_BODY</code></value>
      <value><code>COMMENT</code></value>
      <value><code>DIRECTIVES</code></value>
      <value><code>DOCUMENTATION_COMMENT</code></value>
      <value><code>FILE_HEADER</code></value>
      <value><code>FUNCTION_BODY</code></value>
      <value><code>INVOCATION</code></value>
      <value><code>LITERAL</code></value>
      <value><code>PARAMETERS</code></value>
    </enum>
  </type>
  <type name="FoldingRegion">
    <p>
      A description of a region that can be folded.
    </p>
    <object>
      <field name="kind">
        <ref>FoldingKind</ref>
        <p>
          The kind of the region.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region to be folded.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region to be folded.
        </p>
      </field>
    </object>
  </type>
  <type name="HighlightRegion">
    <p>
      A description of a region that could have special highlighting associated
      with it.
    </p>
    <object>
      <field name="type">
        <ref>HighlightRegionType</ref>
        <p>
          The type of highlight associated with the region.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region to be highlighted.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region to be highlighted.
        </p>
      </field>
    </object>
  </type>
  <type name="HighlightRegionType">
    <p>
      An enumeration of the kinds of highlighting that can be applied to files.
    </p>
    <enum>
      <value><code>ANNOTATION</code></value>
      <value><code>BUILT_IN</code></value>
      <value><code>CLASS</code></value>
      <value><code>COMMENT_BLOCK</code></value>
      <value><code>COMMENT_DOCUMENTATION</code></value>
      <value><code>COMMENT_END_OF_LINE</code></value>
      <value><code>CONSTRUCTOR</code></value>
      <value><code>DIRECTIVE</code></value>
      <value>
        <code>DYNAMIC_TYPE</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>DYNAMIC_LOCAL_VARIABLE_DECLARATION</code>
      </value>
      <value>
        <code>DYNAMIC_LOCAL_VARIABLE_REFERENCE</code>
      </value>
      <value>
        <code>DYNAMIC_PARAMETER_DECLARATION</code>
      </value>
      <value>
        <code>DYNAMIC_PARAMETER_REFERENCE</code>
      </value>
      <value><code>ENUM</code></value>
      <value><code>ENUM_CONSTANT</code></value>
      <value>
        <code>FIELD</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>FIELD_STATIC</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>FUNCTION</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>FUNCTION_DECLARATION</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value><code>FUNCTION_TYPE_ALIAS</code></value>
      <value>
        <code>GETTER_DECLARATION</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value><code>IDENTIFIER_DEFAULT</code></value>
      <value><code>IMPORT_PREFIX</code></value>
      <value>
        <code>INSTANCE_FIELD_DECLARATION</code>
      </value>
      <value>
        <code>INSTANCE_FIELD_REFERENCE</code>
      </value>
      <value>
        <code>INSTANCE_GETTER_DECLARATION</code>
      </value>
      <value>
        <code>INSTANCE_GETTER_REFERENCE</code>
      </value>
      <value>
        <code>INSTANCE_METHOD_DECLARATION</code>
      </value>
      <value>
        <code>INSTANCE_METHOD_REFERENCE</code>
      </value>
      <value>
        <code>INSTANCE_SETTER_DECLARATION</code>
      </value>
      <value>
        <code>INSTANCE_SETTER_REFERENCE</code>
      </value>
      <value>
        <code>INVALID_STRING_ESCAPE</code>
      </value>
      <value><code>KEYWORD</code></value>
      <value><code>LABEL</code></value>
      <value>
        <code>LIBRARY_NAME</code>
      </value>
      <value><code>LITERAL_BOOLEAN</code></value>
      <value><code>LITERAL_DOUBLE</code></value>
      <value><code>LITERAL_INTEGER</code></value>
      <value><code>LITERAL_LIST</code></value>
      <value><code>LITERAL_MAP</code></value>
      <value><code>LITERAL_STRING</code></value>
      <value>
        <code>LOCAL_FUNCTION_DECLARATION</code>
      </value>
      <value>
        <code>LOCAL_FUNCTION_REFERENCE</code>
      </value>
      <value>
        <code>LOCAL_VARIABLE</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value><code>LOCAL_VARIABLE_DECLARATION</code></value>
      <value>
        <code>LOCAL_VARIABLE_REFERENCE</code>
      </value>
      <value>
        <code>METHOD</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>METHOD_DECLARATION</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>METHOD_DECLARATION_STATIC</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>METHOD_STATIC</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>PARAMETER</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>SETTER_DECLARATION</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>TOP_LEVEL_VARIABLE</code>
        <p>Deprecated - no longer sent.</p>
      </value>
      <value>
        <code>PARAMETER_DECLARATION</code>
      </value>
      <value>
        <code>PARAMETER_REFERENCE</code>
      </value>
      <value>
        <code>STATIC_FIELD_DECLARATION</code>
      </value>
      <value>
        <code>STATIC_GETTER_DECLARATION</code>
      </value>
      <value>
        <code>STATIC_GETTER_REFERENCE</code>
      </value>
      <value>
        <code>STATIC_METHOD_DECLARATION</code>
      </value>
      <value>
        <code>STATIC_METHOD_REFERENCE</code>
      </value>
      <value>
        <code>STATIC_SETTER_DECLARATION</code>
      </value>
      <value>
        <code>STATIC_SETTER_REFERENCE</code>
      </value>
      <value>
        <code>TOP_LEVEL_FUNCTION_DECLARATION</code>
      </value>
      <value>
        <code>TOP_LEVEL_FUNCTION_REFERENCE</code>
      </value>
      <value>
        <code>TOP_LEVEL_GETTER_DECLARATION</code>
      </value>
      <value>
        <code>TOP_LEVEL_GETTER_REFERENCE</code>
      </value>
      <value>
        <code>TOP_LEVEL_SETTER_DECLARATION</code>
      </value>
      <value>
        <code>TOP_LEVEL_SETTER_REFERENCE</code>
      </value>
      <value>
        <code>TOP_LEVEL_VARIABLE_DECLARATION</code>
      </value>
      <value>
        <code>TYPE_ALIAS</code>
      </value>
      <value><code>TYPE_NAME_DYNAMIC</code></value>
      <value><code>TYPE_PARAMETER</code></value>
      <value>
        <code>UNRESOLVED_INSTANCE_MEMBER_REFERENCE</code>
      </value>
      <value>
        <code>VALID_STRING_ESCAPE</code>
      </value>
    </enum>
  </type>
  <type name="KytheEntry">
    <p>
      This object matches the format and documentation of the Entry object
      documented in the
      <a href="https://kythe.io/docs/kythe-storage.html#_entry">Kythe Storage
        Model</a>.
    </p>
    <object>
      <field name="source">
        <ref>KytheVName</ref>
        <p>
          The ticket of the source node.
        </p>
      </field>
      <field name="kind" optional="true">
        <ref>String</ref>
        <p>
          An edge label. The schema defines which labels are meaningful.
        </p>
      </field>
      <field name="target" optional="true">
        <ref>KytheVName</ref>
        <p>
          The ticket of the target node.
        </p>
      </field>
      <field name="fact">
        <ref>String</ref>
        <p>
          A fact label. The schema defines which fact labels are meaningful.
        </p>
      </field>
      <field name="value" optional="true">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The <tt>String</tt> value of the fact.
        </p>
      </field>
    </object>
  </type>
  <type name="KytheVName">
    <p>
      This object matches the format and documentation of the Vector-Name object
      documented in the
      <a href="https://kythe.io/docs/kythe-storage.html#_a_id_termvname_a_vector_name_strong_vname_strong">Kythe
        Storage Model</a>.
    </p>
    <object>
      <field name="signature">
        <ref>String</ref>
        <p>
          An opaque signature generated by the analyzer.
        </p>
      </field>
      <field name="corpus">
        <ref>String</ref>
        <p>
          The corpus of source code this <tt>KytheVName</tt> belongs to.
          Loosely, a corpus is a collection of related files, such as the
          contents of a given source repository.
        </p>
      </field>
      <field name="root">
        <ref>String</ref>
        <p>
          A corpus-specific root label, typically a directory path or project
          identifier, denoting a distinct subset of the corpus. This may also be
          used to designate virtual collections like generated files.
        </p>
      </field>
      <field name="path">
        <ref>String</ref>
        <p>
          A path-structured label describing the “location” of the named object
          relative to the corpus and the root.
        </p>
      </field>
      <field name="language">
        <ref>String</ref>
        <p>
          The language this name belongs to.
        </p>
      </field>
    </object>
  </type>
  <type name="LinkedEditGroup">
    <p>
      A collection of positions that should be linked (edited simultaneously)
      for the purposes of updating code after a source change. For example, if a
      set of edits introduced a new variable name, the group would contain all
      of the positions of the variable name so that if the client wanted to let
      the user edit the variable name after the operation, all occurrences of
      the name could be edited simultaneously.
    </p>
    <object>
      <field name="positions">
        <list>
          <ref>Position</ref>
        </list>
        <p>
          The positions of the regions that should be edited simultaneously.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the regions that should be edited simultaneously.
        </p>
      </field>
      <field name="suggestions">
        <list>
          <ref>LinkedEditSuggestion</ref>
        </list>
        <p>
          Pre-computed suggestions for what every region might want to be
          changed to.
        </p>
      </field>
    </object>
  </type>
  <type name="LinkedEditSuggestion">
    <p>
      A suggestion of a value that could be used to replace all of the linked
      edit regions in a <a href="#type_LinkedEditGroup">LinkedEditGroup</a>.
    </p>
    <object>
      <field name="value">
        <ref>String</ref>
        <p>
          The value that could be used to replace all of the linked edit
          regions.
        </p>
      </field>
      <field name="kind">
        <ref>LinkedEditSuggestionKind</ref>
        <p>
          The kind of value being proposed.
        </p>
      </field>
    </object>
  </type>
  <type name="LinkedEditSuggestionKind">
    <p>
      An enumeration of the kind of values that can be suggested for a linked
      edit.
    </p>
    <enum>
      <value><code>METHOD</code></value>
      <value><code>PARAMETER</code></value>
      <value><code>TYPE</code></value>
      <value><code>VARIABLE</code></value>
    </enum>
  </type>
  <type name="Location">
    <p>
      A location (character range) within a file.
    </p>
    <object>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the range.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the range.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the range.
        </p>
      </field>
      <field name="startLine">
        <ref>int</ref>
        <p>
          The one-based index of the line containing the first character of the
          range.
        </p>
      </field>
      <field name="startColumn">
        <ref>int</ref>
        <p>
          The one-based index of the column containing the first character of
          the range.
        </p>
      </field>
      <field name="endLine">
        <ref>int</ref>
        <p>
          The one-based index of the line containing the character immediately
          following the range.
        </p>
      </field>
      <field name="endColumn">
        <ref>int</ref>
        <p>
          The one-based index of the column containing the character immediately
          following the range.
        </p>
      </field>
    </object>
  </type>
  <type name="NavigationRegion">
    <p>
      A description of a region from which the user can navigate to the
      declaration of an element.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region from which the user can navigate.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region from which the user can navigate.
        </p>
      </field>
      <field name="targets">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The indexes of the targets (in the enclosing navigation response) to
          which the given region is bound. By opening the target, clients can
          implement one form of navigation. This list cannot be empty.
        </p>
      </field>
    </object>
  </type>
  <type name="NavigationTarget">
    <p>
      A description of a target to which the user can navigate.
    </p>
    <object>
      <field name="kind">
        <ref>ElementKind</ref>
        <p>
          The kind of the element.
        </p>
      </field>
      <field name="fileIndex">
        <ref>int</ref>
        <p>
          The index of the file (in the enclosing navigation response) to
          navigate to.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the name of the target to which the user can navigate.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name of the target to which the user can navigate.
        </p>
      </field>
      <field name="startLine">
        <ref>int</ref>
        <p>
          The one-based index of the line containing the first character of the
          name of the target.
        </p>
      </field>
      <field name="startColumn">
        <ref>int</ref>
        <p>
          The one-based index of the column containing the first character of
          the name of the target.
        </p>
      </field>
      <field name="codeOffset" optional="true">
        <ref>int</ref>
        <p>
          The offset of the target code to which the user can navigate.
        </p>
      </field>
      <field name="codeLength" optional="true">
        <ref>int</ref>
        <p>
          The length of the target code to which the user can navigate.
        </p>
      </field>
    </object>
  </type>
  <type name="Occurrences">
    <p>
      A description of the references to a single element within a single file.
    </p>
    <object>
      <field name="element">
        <ref>Element</ref>
        <p>
          The element that was referenced.
        </p>
      </field>
      <field name="offsets">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The offsets of the name of the referenced element within the file.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name of the referenced element.
        </p>
      </field>
    </object>
  </type>
  <type name="Outline">
    <p>
      An node in the outline structure of a file.
    </p>
    <object>
      <field name="element">
        <ref>Element</ref>
        <p>
          A description of the element represented by this node.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the first character of the element. This is different
          than the offset in the Element, which is the offset of the name of the
          element. It can be used, for example, to map locations in the file
          back to an outline.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the element.
        </p>
      </field>
      <field name="codeOffset">
        <ref>int</ref>
        <p>
          The offset of the first character of the element code, which is
          neither documentation, nor annotation.
        </p>
      </field>
      <field name="codeLength">
        <ref>int</ref>
        <p>
          The length of the element code.
        </p>
      </field>
      <field name="children" optional="true">
        <list>
          <ref>Outline</ref>
        </list>
        <p>
          The children of the node. The field will be omitted if the node has no
          children. Children are sorted by offset.
        </p>
      </field>
    </object>
  </type>
  <type name="ParameterInfo" experimental="true">
    <p>
      A description of a member that is being overridden.
    </p>
    <object>
      <field name="kind">
        <ref>ParameterKind</ref>
        <p>
          The kind of the parameter.
        </p>
      </field>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the parameter.
        </p>
      </field>
      <field name="type">
        <ref>String</ref>
        <p>
          The type of the parameter.
        </p>
      </field>
      <field name="defaultValue" optional="true">
        <ref>String</ref>
        <p>The default value for this parameter. This value will be omitted if the parameter
          does not have a default value.
        </p>
      </field>
    </object>
  </type>
  <type name="ParameterKind" experimental="true">
    <p>
      An enumeration of the types of parameters.
    </p>
    <enum>
      <value>
        <code>OPTIONAL_NAMED</code>
        <p>
          An optional named parameter.
        </p>
      </value>
      <value>
        <code>OPTIONAL_POSITIONAL</code>
        <p>
          An optional positional parameter.
        </p>
      </value>
      <value>
        <code>REQUIRED_NAMED</code>
        <p>
          A required named parameter.
        </p>
      </value>
      <value>
        <code>REQUIRED_POSITIONAL</code>
        <p>
          A required positional parameter.
        </p>
      </value>
    </enum>
  </type>
  <type name="Position">
    <p>
      A position within a file.
    </p>
    <object>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the position.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the position.
        </p>
      </field>
    </object>
  </type>
  <type name="RefactoringKind">
    <p>
      An enumeration of the kinds of refactorings that can be created.
    </p>
    <enum>
      <value><code>CONVERT_GETTER_TO_METHOD</code></value>
      <value><code>CONVERT_METHOD_TO_GETTER</code></value>
      <value><code>EXTRACT_LOCAL_VARIABLE</code></value>
      <value><code>EXTRACT_METHOD</code></value>
      <value><code>EXTRACT_WIDGET</code></value>
      <value><code>INLINE_LOCAL_VARIABLE</code></value>
      <value><code>INLINE_METHOD</code></value>
      <value><code>MOVE_FILE</code></value>
      <value><code>RENAME</code></value>
    </enum>
  </type>
  <type name="RefactoringMethodParameter">
    <!-- This type does not appear to be referenced yet. -->
    <p>
      A description of a parameter in a method refactoring.
    </p>
    <object>
      <field name="id" optional="true">
        <ref>String</ref>
        <p>
          The unique identifier of the parameter. Clients may omit this field
          for the parameters they want to add.
        </p>
      </field>
      <field name="kind">
        <ref>RefactoringMethodParameterKind</ref>
        <p>
          The kind of the parameter.
        </p>
      </field>
      <field name="type">
        <ref>String</ref>
        <p>
          The type that should be given to the parameter, or the return type of
          the parameter's function type.
        </p>
      </field>
      <field name="name">
        <ref>String</ref>
        <p>
          The name that should be given to the parameter.
        </p>
      </field>
      <field name="parameters" optional="true">
        <ref>String</ref>
        <p>
          The parameter list of the parameter's function type. If the parameter
          is not of a function type, this field will not be defined. If the
          function type has zero parameters, this field will have a value of
          '()'.
        </p>
      </field>
    </object>
  </type>
  <type name="RefactoringMethodParameterKind">
    <p>
      An enumeration of the kinds of parameters.
    </p>
    <enum>
      <value><code>REQUIRED</code></value>
      <value><code>POSITIONAL</code></value>
      <value><code>NAMED</code></value>
    </enum>
  </type>
  <type name="RefactoringProblem">
    <p>
      A description of a problem related to a refactoring.
    </p>
    <object>
      <field name="severity">
        <ref>RefactoringProblemSeverity</ref>
        <p>
          The severity of the problem being represented.
        </p>
      </field>
      <field name="message">
        <ref>String</ref>
        <p>
          A human-readable description of the problem being represented.
        </p>
      </field>
      <field name="location" optional="true">
        <ref>Location</ref>
        <p>
          The location of the problem being represented. This field is omitted
          unless there is a specific location associated with the problem (such
          as a location where an element being renamed will be shadowed).
        </p>
      </field>
    </object>
  </type>
  <type name="RefactoringProblemSeverity">
    <p>
      An enumeration of the severities of problems that can be returned by the
      refactoring requests.
    </p>
    <enum>
      <value>
        <code>INFO</code>
        <p>
          A minor code problem. No example, because it is not used yet.
        </p>
      </value>
      <value>
        <code>WARNING</code>
        <p>
          A minor code problem. For example names of local variables should be
          camel case and start with a lower case letter. Staring the name of a
          variable with an upper case is OK from the language point of view, but
          it is nice to warn the user.
        </p>
      </value>
      <value>
        <code>ERROR</code>
        <p>
          The refactoring technically can be performed, but there is a logical
          problem. For example the name of a local variable being extracted
          conflicts with another name in the scope, or duplicate parameter names
          in the method being extracted, or a conflict between a parameter name
          and a local variable, etc. In some cases the location of the problem
          is also provided, so the IDE can show user the location and the
          problem, and let the user decide whether they want to perform the
          refactoring. For example the name conflict might be expected, and the
          user wants to fix it afterwards.
        </p>
      </value>
      <value>
        <code>FATAL</code>
        <p>
          A fatal error, which prevents performing the refactoring. For example
          the name of a local variable being extracted is not a valid
          identifier, or selection is not a valid expression.
        </p>
      </value>
    </enum>
  </type>
  <type name="RemoveContentOverlay">
    <p>
      A directive to remove an existing file content overlay. After processing
      this directive, the file contents will once again be read from the file
      system.
    </p>
    <p>
      If this directive is used on a file that doesn't currently have a content
      overlay, it has no effect.
    </p>
    <object>
      <field name="type" value="remove">
        <ref>String</ref>
      </field>
    </object>
  </type>
  <type name="SourceChange">
    <p>
      A description of a set of edits that implement a single conceptual change.
    </p>
    <object>
      <field name="message">
        <ref>String</ref>
        <p>
          A human-readable description of the change to be applied.
        </p>
      </field>
      <field name="edits">
        <list>
          <ref>SourceFileEdit</ref>
        </list>
        <p>
          A list of the edits used to effect the change, grouped by file.
        </p>
      </field>
      <field name="linkedEditGroups">
        <list>
          <ref>LinkedEditGroup</ref>
        </list>
        <p>
          A list of the linked editing groups used to customize the changes that
          were made.
        </p>
      </field>
      <field name="selection" optional="true">
        <ref>Position</ref>
        <p>
          The position that should be selected after the edits have been
          applied.
        </p>
      </field>
      <field name="id" optional="true">
        <ref>String</ref>
        <p>
          The optional identifier of the change kind. The identifier remains
          stable even if the message changes, or is parameterized.
        </p>
      </field>
    </object>
  </type>
  <type name="SourceEdit">
    <p>
      A description of a single change to a single file.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region to be modified.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region to be modified.
        </p>
      </field>
      <field name="replacement">
        <ref>String</ref>
        <p>
          The code that is to replace the specified region in the original code.
        </p>
      </field>
      <field name="id" optional="true">
        <ref>String</ref>
        <p>
          An identifier that uniquely identifies this source edit from other
          edits in the same response. This field is omitted unless a containing
          structure needs to be able to identify the edit for some reason.
        </p>
        <p>
          For example, some refactoring operations can produce edits that might
          not be appropriate (referred to as potential edits). Such edits will
          have an id so that they can be referenced. Edits in the same response
          that do not need to be referenced will not have an id.
        </p>
      </field>
    </object>
  </type>
  <type name="SourceFileEdit">
    <p>
      A description of a set of changes to a single file.
    </p>
    <object>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the code to be modified.
        </p>
      </field>
      <field name="fileStamp" deprecated="true">
        <ref>long</ref>
        <p>
          The modification stamp of the file at the moment when the change was
          created, in milliseconds since the "Unix epoch". Will be -1 if the
          file did not exist and should be created. The client may use this
          field to make sure that the file was not changed since then, so it is
          safe to apply the change.
        </p>
      </field>
      <field name="edits">
        <list>
          <ref>SourceEdit</ref>
        </list>
        <p>
          A list of the edits used to effect the change.
        </p>
      </field>
    </object>
  </type>
</types>
</body>
</html>
