
<html>
  <head>
    <meta charset="UTF-8"/>
    <title>Analysis Server API Specification</title>
  </head>
  <body>
    <h1>Analysis Server API Specification</h1>
    <h1 style="color:#999999">Version <version>1.0.0</version></h1>
    <p>
      This document contains a specification of the API provided by the
      analysis server.  The API in this document is currently under
      development.  Changes to the API will be accompanied by an update to the
      protocol version number according to the principles of semantic
      versioning <a href="http://semver.org/">http://semver.org/</a>.
    </p>
    <h2>Overview</h2>
    <p>
      The analysis server API is a bi-directional client-server
      API. The API is independent of the transport mechanism used, but
      is heavily influenced by a model in which sockets or character
      streams are used to transport JSON-RPC encoded information.
    </p>
    <h3>Transport Mechanism</h3>
    <p>
      The characters passed to the server are expected to be encoded
      using UTF-8.
    </p>
    <p>
      When character streams are used as the transport, messages are
      delineated by newlines. This means, in particular, that the JSON
      encoding process must not introduce newlines within a
      message. Note however that newlines are used in this document
      for readability.
    </p>
    <p>
      It is the client's responsibility to read output from the server to
      avoid its blocking.
    </p>
    <p>
      To ease interoperability with Lisp-based clients (which may not
      be able to easily distinguish between empty lists, empty maps,
      and null), client-to-server communication is allowed to replace
      any instance of “<tt>{}</tt>” or “<tt>[]</tt>” with null. The
      server will always properly represent empty lists as
      “<tt>[]</tt>” and empty maps as “<tt>{}</tt>”.
    </p>
    <h3>Communication Structure</h3>
    <p>
      Clients can make a request of the server and the server will
      provide a response for each request that it receives. While many
      of the requests that can be made by a client are informational
      in nature, we have chosen to always return a response so that
      clients can know whether the request was received and was
      correct.
    </p>
    <p>
      There is no guarantee concerning the order in which responses
      will be returned, but there is a guarantee that the server will
      process requests in the order in which they are sent as long as
      the transport mechanism also makes this guarantee. Responses can
      be returned in an order that is different from the order in
      which the requests were received because some requests take
      longer to process than others.
    </p>
    <p>
      Every request is required to have two fields and may have two
      additional optional fields. The first required field is the ‘id’
      field, which is only used by the server to associate a response
      with the request that generated the response. The second
      required field is the ‘method’ field, which is used to determine
      what the server is being requested to do. One optional field is
      the ‘params’ field, whose structure is dependent on the method
      being requested. The structure of this field is described with
      each request for which it is required. The other optional field
      is the 'clientRequestTime' field, which is a number indicating
      the time at which the client made the request (milliseconds
      since epoch). Providing clientRequestTime helps us track
      how responsive analysis server is to client requests
      and better address any issues that occur.
    </p>
    <p>
      Every response has up to three fields. The first field is the
      ‘id’ field, which is always present and whose value is the
      identifier that was passed to the request that generated the
      response. The second field is the ‘error’ field, which is only
      present if an error was encountered while processing the
      request. The third field is the ‘result’ field, whose structure
      is dependent on the method being responded to, and is described
      with each request that will produce it.
    </p>
    <p>
      The server can also communicate to the clients by sending a
      notification. The purpose of these notifications is to provide
      information to clients as it becomes available rather than to
      require that clients poll for it. Unless explicitly stated, all
      notifications are designed to return the complete information
      available at the time the notification is sent; clients are not
      required to update previously communicated
      results. Consequently, the server can and should return partial
      results before all results are available. For example, the
      syntactic errors for a file can be returned as soon as the
      syntactic analysis is complete, and both syntactic and semantic
      errors can be returned together at a later time.
    </p>
    <p>
      Each notification has two fields. The first field is the ‘event’
      field, which identifies the kind of notification. The second
      field is the ‘params’ field, whose structure is dependent on the
      kind of notification being sent. The structure of this field is
      described with each notification.
    </p>
    <h3>Eventual Consistency</h3>
    <p>
      TBD
    </p>
    <h3>Domains</h3>
    <p>
      For convenience, the API is divided into domains. Each domain is
      specified in a separate section below:
    </p>
    <ul>
      <li><a href="#domain_server">Server</a></li>
      <li><a href="#domain_analysis">Analysis</a></li>
      <li><a href="#domain_completion">Code Completion</a></li>
      <li><a href="#domain_search">Search</a></li>
      <li><a href="#domain_edit">Edit</a></li>
      <li><a href="#domain_execution">Execution</a></li>
    </ul>
    <p>
      The specifications of the API’s refer to data structures beyond
      the standard JSON primitives. These data structures are
      documented in the section titled <a href="#types">Types</a>.
    </p>
    <h3>Command-line Arguments</h3>
    <p>
      The command-line arguments that can be passed to the server.
    </p>
    <h4>Options</h4>
    <blockquote>
    <dl>
      <dt>--no-error-notification</dt>
      <dd>
      Disable notifications about errors (see analysis.error). If this
      flag is not specified then notifications will be sent for all
      errors produced for all files in the actual analysis roots.
      </dd>
    </dl>
    <dl>
      <dt>--file-read-mode</dt>
      <dd>
      An enumeration of the ways files can be read from disk. Some clients
      normalize end of line characters which would make the file offset and
      range information incorrect. The default option is <tt>as-is</tt>, but
      can also be set to <tt>normalize-eol-always</tt>. The default option
      (<tt>as-is</tt>) reads files as they are on disk. The
      <tt>normalize-eol-always</tt> option does the following:
      <ul>
        <li>'\r\n' is converted to '\n';</li>
        <li>'\r' by itself is converted to '\n';</li>
        <li>this happens regardless of the OS editor is running on.</li>
      </ul>
      </dd>
    </dl>
    </blockquote>
    <domain name="server">
      <p>
        The server domain contains API’s related to the execution of
        the server.
      </p>
      <request method="getVersion">
        <p>Return the version number of the analysis server.</p>
        <result>
          <field name="version">
            <ref>String</ref>
            <p>The version number of the analysis server.</p>
          </field>
        </result>
      </request>
      <request method="shutdown">
        <p>
          Cleanly shutdown the analysis server. Requests that are
          received after this request will not be processed. Requests
          that were received before this request, but for which a
          response has not yet been sent, will not be responded to. No
          further responses or notifications will be sent after the
          response to this request has been sent.
        </p>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services. All previous subscriptions are
          replaced by the given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not
          valid services. If there is an error, then the current
          subscriptions will remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <list><ref>ServerService</ref></list>
            <p>A list of the services being subscribed to.</p>
          </field>
        </params>
      </request>
      <notification event="connected">
        <p>
          Reports that the server is running. This notification is
          issued once after the server has started running but before
          any requests are processed to let the client know that it
          started correctly.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
      </notification>
      <notification event="error">
        <p>
          Reports that an unexpected error has occurred while
          executing the server. This notification is not used for
          problems with specific requests (which are returned as part
          of the response) but is used for exceptions that occur while
          performing other tasks, such as analysis or preparing
          notifications.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
        <params>
          <field name="isFatal">
            <ref>bool</ref>
            <p>
              True if the error is a fatal error, meaning that the
              server will shutdown automatically after sending this
              notification.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              The error message indicating what kind of error was
              encountered.
            </p>
          </field>
          <field name="stackTrace">
            <ref>String</ref>
            <p>
              The stack trace associated with the generation of the
              error, used for debugging the server.
            </p>
          </field>
        </params>
      </notification>
      <notification event="status">
        <p>
          Reports the current status of the server. Parameters are
          omitted if there has been no change in the status
          represented by that parameter.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"STATUS"</tt> in
          the list of services passed in a server.setSubscriptions
          request.
        </p>
        <params>
          <field name="analysis" optional="true">
            <ref>AnalysisStatus</ref>
            <p>
              The current status of analysis, including whether
              analysis is being performed and if so what is being
              analyzed.
            </p>
          </field>
          <field name="pub" optional="true">
            <ref>PubStatus</ref>
            <p>
              The current status of pub execution, indicating whether we are
              currently running pub.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="analysis">
      <p>
        The analysis domain contains API’s related to the analysis of
        files.
      </p>
      <request method="getErrors">
        <p>
          Return the errors associated with the given file. If the
          errors for the given file have not yet been computed, or the
          most recently computed errors for the given file are out of
          date, then the response for this request will be delayed
          until they have been computed. If some or all of the errors
          for the file cannot be computed, then the subset of the
          errors that can be computed will be returned and the
          response will contain an error to indicate why the errors
          could not be computed. If the content of the file changes after this
          request was received but before a response could be sent, then an
          error of type <tt>CONTENT_MODIFIED</tt> will be generated.
        </p>
        <p>
          This request is intended to be used by clients that cannot
          asynchronously apply updated error information. Clients that
          <b>can</b> apply error information as it becomes available
          should use the information provided by the 'analysis.errors'
          notification.
        </p>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file for which errors are being requested.
            </p>
          </field>
        </params>
        <result>
          <field name="errors">
            <list><ref>AnalysisError</ref></list>
            <p>
              The errors associated with the file.
            </p>
          </field>
        </result>
      </request>
      <request method="getHover">
        <p>
          Return the hover information associate with the given
          location. If some or all of the hover information is not
          available at the time this request is processed the
          information will be omitted from the response.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which hover information is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset for which hover information is being requested.
            </p>
          </field>
        </params>
        <result>
          <field name="hovers">
            <list><ref>HoverInformation</ref></list>
            <p>
              The hover information associated with the
              location. The list will be empty if no information
              could be determined for the location. The list can
              contain multiple items if the file is being analyzed
              in multiple contexts in conflicting ways (such as a
              part that is included in multiple libraries).
            </p>
          </field>
        </result>
      </request>
      <request method="getLibraryDependencies">
        <p>
          Return library dependency information for use in client-side indexing
          and package URI resolution.
        </p>
        <result>
          <field name="libraries">
            <list><ref>FilePath</ref></list>
              <p>
                A list of the paths of library elements referenced by
                files in existing analysis roots.
              </p>
            </field>
            <field name="packageMap">
              <map>
                <key><ref>String</ref></key>
                <value>
                  <map>
                    <key><ref>String</ref></key>
                    <value><list><ref>FilePath</ref></list></value>
                  </map>
                </value>
              </map>
              <p>
                A mapping from context source roots to package maps which map
                package names to source directories for use in client-side
                package URI resolution.
              </p>
            </field>
        </result>
      </request>
      <request method="getNavigation">
        <p>
          Return the navigation information associated with the given region of
          the given file. If the navigation information for the given file has
          not yet been computed, or the most recently computed navigation
          information for the given file is out of date, then the response for
          this request will be delayed until it has been computed. If the
          content of the file changes after this request was received but before
          a response could be sent, then an error of type
          <tt>CONTENT_MODIFIED</tt> will be generated.
        </p>
        <p>
          If a navigation region overlaps (but extends either before or after)
          the given region of the file it will be included in the result. This
          means that it is theoretically possible to get the same navigation
          region in response to multiple requests. Clients can avoid this by
          always choosing a region that starts at the beginning of a line and
          ends at the end of a (possibly different) line in the file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which navigation information is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region for which navigation information is being
              requested.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region for which navigation information is being
              requested.
            </p>
          </field>
        </params>
        <result>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the paths of files that are referenced by the navigation
              targets.
            </p>
          </field>
          <field name="targets">
            <list><ref>NavigationTarget</ref></list>
            <p>
              A list of the navigation targets that are referenced by the
              navigation regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>NavigationRegion</ref></list>
            <p>
              A list of the navigation regions within the requested region of
              the file.
            </p>
          </field>
        </result>
      </request>
      <request method="reanalyze">
        <p>
          Force the re-analysis of everything contained in the
          existing analysis roots. This will cause all previously
          computed analysis results to be discarded and recomputed,
          and will cause all subscribed notifications to be re-sent.
        </p>
      </request>
      <request method="setAnalysisRoots">
        <p>
          Sets the root paths used to determine which files to analyze. The set
          of files to be analyzed are all of the files in one of the root paths
          that are not either explicitly or implicitly excluded. A file is
          explicitly excluded if it is in one of the excluded paths. A file is
          implicitly excluded if it is in a subdirectory of one of the root
          paths where the name of the subdirectory starts with a period (that
          is, a hidden directory).
        </p>
        <p>
          Note that this request determines the set of requested
          analysis roots. The actual set of analysis roots at any
          given time is the intersection of this set with the set of
          files and directories actually present on the
          filesystem. When the filesystem changes, the actual set of
          analysis roots is automatically updated, but the set of
          requested analysis roots is unchanged. This means that if
          the client sets an analysis root before the root becomes
          visible to server in the filesystem, there is no error; once
          the server sees the root in the filesystem it will start
          analyzing it. Similarly, server will stop analyzing files
          that are removed from the file system but they will remain
          in the set of requested roots.
        </p>
        <p>
          If an included path represents a file, then server will look
          in the directory containing the file for a pubspec.yaml
          file. If none is found, then the parents of the directory
          will be searched until such a file is found or the root of
          the file system is reached. If such a file is found, it will
          be used to resolve package: URI’s within the file.
        </p>
        <params>
          <field name="included">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the files and directories that should be
              analyzed.
            </p>
          </field>
          <field name="excluded">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the files and directories within the
              included directories that should not be analyzed.
            </p>
          </field>
          <field name="packageRoots" optional="true">
            <map>
              <key><ref>FilePath</ref></key>
              <value><ref>FilePath</ref></value>
            </map>
            <p>
              A mapping from source directories to target directories
              that should override the normal package: URI resolution
              mechanism.  The analyzer will behave as though each
              source directory in the map contains a special
              pubspec.yaml file which resolves any package: URI to the
              corresponding path within the target directory.  The
              effect is the same as specifying the target directory as
              a "--package_root" parameter to the Dart VM when
              executing any Dart file inside the source directory.
            </p>
            <p>
              Files in any directories that are not overridden by this
              mapping have their package: URI's resolved using the
              normal pubspec.yaml mechanism.  If this field is absent,
              or the empty map is specified, that indicates that the
              normal pubspec.yaml mechanism should always be used.
            </p>
          </field>
        </params>
      </request>
      <request method="setPriorityFiles">
        <p>
          Set the priority files to the files in the given list. A
          priority file is a file that is given priority when
          scheduling which analysis work to do first. The list
          typically contains those files that are visible to the user
          and those for which analysis results will have the biggest
          impact on the user experience. The order of the files within
          the list is significant: the first file will be given higher
          priority than the second, the second higher priority than
          the third, and so on.
        </p>
        <p>
          Note that this request determines the set of requested
          priority files. The actual set of priority files is the
          intersection of the requested set of priority files with the
          set of files currently subject to analysis. (See
          analysis.setSubscriptions for a description of files that
          are subject to analysis.)
        </p>
        <p>
          If a requested priority file is a directory it is ignored,
          but remains in the set of requested priority files so that
          if it later becomes a file it can be included in the set of
          actual priority files.
        </p>
        <params>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files that are to be a priority for analysis.
            </p>
          </field>
        </params>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services. All previous subscriptions are
          replaced by the current set of subscriptions. If a given
          service is not included as a key in the map then no files
          will be subscribed to the service, exactly as if the service
          had been included in the map with an explicit empty list of
          files.
        </p>
        <p>
          Note that this request determines the set of requested
          subscriptions. The actual set of subscriptions at any given
          time is the intersection of this set with the set of files
          currently subject to analysis. The files currently subject
          to analysis are the set of files contained within an actual
          analysis root but not excluded, plus all of the files
          transitively reachable from those files via import, export
          and part directives. (See analysis.setAnalysisRoots for an
          explanation of how the actual analysis roots are
          determined.) When the actual analysis roots change, the
          actual set of subscriptions is automatically updated, but
          the set of requested subscriptions is unchanged.
        </p>
        <p>
          If a requested subscription is a directory it is ignored,
          but remains in the set of requested subscriptions so that if
          it later becomes a file it can be included in the set of
          actual subscriptions.
        </p>
        <p>
          It is an error if any of the keys in the map are not valid
          services. If there is an error, then the existing
          subscriptions will remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <map>
              <key><ref>AnalysisService</ref></key>
              <value>
                <list><ref>FilePath</ref></list>
              </value>
            </map>
            <p>
              A table mapping services to a list of the files being
              subscribed to the service.
            </p>
          </field>
        </params>
      </request>
      <request method="updateContent">
        <p>
          Update the content of one or more files. Files that were
          previously updated but not included in this update remain
          unchanged. This effectively represents an overlay of the
          filesystem. The files whose content is overridden are
          therefore seen by server as being files with the given
          content, even if the files do not exist on the filesystem or
          if the file path represents the path to a directory on the
          filesystem.
        </p>
        <params>
          <field name="files">
            <map>
              <key><ref>FilePath</ref></key>
              <value>
                <union field="type">
                  <ref>AddContentOverlay</ref>
                  <ref>ChangeContentOverlay</ref>
                  <ref>RemoveContentOverlay</ref>
                </union>
              </value>
            </map>
            <p>
              A table mapping the files whose content has changed to a
              description of the content change.
            </p>
          </field>
        </params>
        <result>
        </result>
      </request>
      <request method="updateOptions">
        <p>
          Update the options controlling analysis based on the given
          set of options. Any options that are not included in the
          analysis options will not be changed. If there are options
          in the analysis options that are not valid, they will be
          silently ignored.
        </p>
        <params>
          <field name="options">
            <ref>AnalysisOptions</ref>
            <p>
              The options that are to be used to control analysis.
            </p>
          </field>
        </params>
      </request>
      <notification event="errors">
        <p>
          Reports the errors associated with a given file. The set of
          errors included in the notification is always a complete
          list that supersedes any previously reported errors.
        </p>
        <p>
          It is only possible to unsubscribe from this notification by
          using the command-line flag --no-error-notification.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the errors.
            </p>
          </field>
          <field name="errors">
            <list><ref>AnalysisError</ref></list>
            <p>
              The errors contained in the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="flushResults">
        <p>
          Reports that any analysis results that were previously
          associated with the given files should be considered to be
          invalid because those files are no longer being analyzed,
          either because the analysis root that contained it is no
          longer being analyzed or because the file no longer exists.
        </p>
        <p>
          If a file is included in this notification and at some later
          time a notification with results for the file is received,
          clients should assume that the file is once again being
          analyzed and the information should be processed.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
        <params>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files that are no longer being analyzed.
            </p>
          </field>
        </params>
      </notification>
      <notification event="folding">
        <p>
          Reports the folding regions associated with a given
          file. Folding regions can be nested, but will not be
          overlapping. Nesting occurs when a foldable element, such as
          a method, is nested inside another foldable element such as
          a class.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"FOLDING"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the folding regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>FoldingRegion</ref></list>
            <p>
              The folding regions contained in the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="highlights">
        <p>
          Reports the highlight regions associated with a given file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"HIGHLIGHTS"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the highlight regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>HighlightRegion</ref></list>
            <p>
              The highlight regions contained in the file. Each
              highlight region represents a particular syntactic or
              semantic meaning associated with some range. Note that
              the highlight regions that are returned can overlap
              other highlight regions if there is more than one
              meaning associated with a particular region.
            </p>
          </field>
        </params>
      </notification>
      <notification event="invalidate">
        <p>
          Reports that the navigation information associated with a region of a
          single file has become invalid and should be re-requested.
        </p>
        <p>
          This notification is not subscribed to by default. Clients can
          subscribe by including the value <tt>"INVALIDATE"</tt> in the list of
          services passed in an analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file whose information has been invalidated.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the invalidated region.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the invalidated region.
            </p>
          </field>
          <field name="delta">
            <ref>int</ref>
            <p>
              The delta to be applied to the offsets in information that follows
              the invalidated region in order to update it so that it doesn't
              need to be re-requested.
            </p>
          </field>
        </params>
      </notification>
      <notification event="navigation">
        <p>
          Reports the navigation targets associated with a given file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"NAVIGATION"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the navigation regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>NavigationRegion</ref></list>
            <p>
              The navigation regions contained in the file.
              The regions are sorted by their offsets.
              Each navigation region represents a list of targets
              associated with some range. The lists will usually
              contain a single target, but can contain more in the
              case of a part that is included in multiple libraries
              or in Dart code that is compiled against multiple
              versions of a package. Note that the navigation
              regions that are returned do not overlap other
              navigation regions.
            </p>
          </field>
          <field name="targets">
            <list><ref>NavigationTarget</ref></list>
            <p>
              The navigation targets referenced in the file.
              They are referenced by <tt>NavigationRegion</tt>s by their
              index in this array.
            </p>
          </field>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files containing navigation targets referenced in the file.
              They are referenced by <tt>NavigationTarget</tt>s by their
              index in this array.
            </p>
          </field>
        </params>
      </notification>
      <notification event="occurrences">
        <p>
          Reports the occurrences of references to elements within a
          single file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OCCURRENCES"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which the references occur.
            </p>
          </field>
          <field name="occurrences">
            <list><ref>Occurrences</ref></list>
            <p>
              The occurrences of references to elements within the
              file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="outline">
        <p>
          Reports the outline associated with a single file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OUTLINE"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file with which the outline is associated.
            </p>
          </field>
          <field name="outline">
            <ref>Outline</ref>
            <p>
              The outline associated with the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="overrides">
        <p>
          Reports the overridding members in a file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OVERRIDES"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file with which the overrides are associated.
            </p>
          </field>
          <field name="overrides">
            <list><ref>Override</ref></list>
            <p>
              The overrides associated with the file.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="completion">
      <p>
        The code completion domain contains commands related to
        getting code completion suggestions.
      </p>
      <request method="getSuggestions">
        <p>
          Request that completion suggestions for the given offset in
          the given file be returned.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the point at which suggestions are
              to be made.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset within the file at which suggestions are to
              be made.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>CompletionId</ref>
            <p>
              The identifier used to associate results with this
              completion request.
            </p>
          </field>
        </result>
      </request>
      <notification event="results">
        <p>
          Reports the completion suggestions that should be presented
          to the user. The set of suggestions included in the
          notification is always a complete list that supersedes any
          previously reported suggestions.
        </p>
        <params>
          <field name="id">
            <ref>CompletionId</ref>
            <p>
              The id associated with the completion.
            </p>
          </field>
          <field name="replacementOffset">
            <ref>int</ref>
            <p>
              The offset of the start of the text to be
              replaced. This will be different than the offset used
              to request the completion suggestions if there was a
              portion of an identifier before the original
              offset. In particular, the replacementOffset will be
              the offset of the beginning of said identifier.
            </p>
          </field>
          <field name="replacementLength">
            <ref>int</ref>
            <p>
              The length of the text to be replaced if the remainder
              of the identifier containing the cursor is to be
              replaced when the suggestion is applied (that is, the
              number of characters in the existing identifier).
            </p>
          </field>
          <field name="results">
            <list><ref>CompletionSuggestion</ref></list>
            <p>
              The completion suggestions being reported.  The
              notification contains all possible completions at the
              requested cursor position, even those that do not match
              the characters the user has already typed.  This allows
              the client to respond to further keystrokes from the
              user without having to make additional requests.
            </p>
          </field>
          <field name="isLast">
            <ref>bool</ref>
            <p>
              True if this is that last set of results that will be
              returned for the indicated completion.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="search">
      <p>
        The search domain contains commands related to searches that
        can be performed against the code base.
      </p>
      <request method="findElementReferences">
        <p>
          Perform a search for references to the element defined or
          referenced at the given offset in the given file.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the declaration of or reference to
              the element used to define the search.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset within the file of the declaration of or
              reference to the element.
            </p>
          </field>
          <field name="includePotential">
            <ref>bool</ref>
            <p>
              True if potential matches are to be included in the
              results.
            </p>
          </field>
        </params>
        <result>
          <field name="id" optional="true">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
            <p>
              If no element was found at the given location, this
              field will be absent, and no results will be reported
              via the search.results notification.
            </p>
          </field>
          <field name="element" optional="true">
            <ref>Element</ref>
            <p>
              The element referenced or defined at the given offset
              and whose references will be returned in the search
              results.
            </p>
            <p>
              If no element was found at the given location, this
              field will be absent.
            </p>
          </field>
        </result>
      </request>
      <request method="findMemberDeclarations">
        <p>
          Perform a search for declarations of members whose name is
          equal to the given name.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the declarations to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="findMemberReferences">
        <p>
          Perform a search for references to members whose name is
          equal to the given name. This search does not check to see
          that there is a member defined with the given name, so it is
          able to find references to undefined members as well.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the references to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="findTopLevelDeclarations">
        <p>
          Perform a search for declarations of top-level elements
          (classes, typedefs, getters, setters, functions and fields)
          whose name matches the given pattern.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="pattern">
            <ref>String</ref>
            <p>
              The regular expression used to match the names of the
              declarations to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="getTypeHierarchy">
        <p>
          Return the type hierarchy of the class declared or
          referenced at the given location.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the declaration or reference to the
              type for which a hierarchy is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the name of the type within the file.
            </p>
          </field>
        </params>
        <result>
          <field name="hierarchyItems" optional="true">
            <list><ref>TypeHierarchyItem</ref></list>
            <p>
              A list of the types in the requested hierarchy. The
              first element of the list is the item representing the
              type for which the hierarchy was requested. The index of
              other elements of the list is unspecified, but
              correspond to the integers used to reference supertype
              and subtype items within the items.
            </p>
            <p>
              This field will be absent if the code at the given file
              and offset does not represent a type, or if the file has
              not been sufficiently analyzed to allow a type hierarchy
              to be produced.
            </p>
          </field>
        </result>
      </request>
      <notification event="results">
        <p>
          Reports some or all of the results of performing a requested
          search. Unlike other notifications, this notification
          contains search results that should be added to any
          previously received search results associated with the same
          search id.
        </p>
        <params>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The id associated with the search.
            </p>
          </field>
          <field name="results">
            <list><ref>SearchResult</ref></list>
            <p>
              The search results being reported.
            </p>
          </field>
          <field name="isLast">
            <ref>bool</ref>
            <p>
              True if this is that last set of results that will be
              returned for the indicated search.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="edit">
      <p>
        The edit domain contains commands related to edits that can be
        applied to the code.
      </p>
      <request method="format">
        <p>
          Format the contents of a single file. The currently selected region of
          text is passed in so that the selection can be preserved across the
          formatting operation. The updated selection will be as close to
          matching the original as possible, but whitespace at the beginning or
          end of the selected region will be ignored.
        </p>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>FORMAT_INVALID_FILE</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code to be formatted.
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset of the current selection in the file. In case
              preserving, selection information is not required, 0 can be
              specified for both selection offset and length.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The length of the current selection in the file. In case
              preserving, selection information is not required, 0 can be
              specified for both selection offset and length.
            </p>
          </field>
          <!--
          <field name="selectionOnly" optional="true">
            <ref>bool</ref>
            <p>
              True if the code to be formatted should be limited to the selected
              text (or the smallest portion of text that encloses the selected
              text that can be formatted).
            </p>
          </field>
          -->
        </params>
        <result>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              The edit(s) to be applied in order to format the code. The list
              will be empty if the code was already formatted (there are no
              changes).
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset of the selection after formatting the code.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The length of the selection after formatting the code.
            </p>
          </field>
        </result>
      </request>
      <request method="getAssists">
        <p>
          Return the set of assists that are available at the given
          location. An assist is distinguished from a refactoring
          primarily by the fact that it affects a single file and does
          not require user input in order to be performed.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code for which assists are being
              requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the code for which assists are being
              requested.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the code for which assists are being
              requested.
            </p>
          </field>
        </params>
        <result>
          <field name="assists">
            <list><ref>SourceChange</ref></list>
            <p>
              The assists that are available at the given location.
            </p>
          </field>
        </result>
      </request>
      <request method="getAvailableRefactorings">
        <p>
          Get a list of the kinds of refactorings that are valid for
          the given selection in the given file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code on which the refactoring
              would be based.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the code on which the refactoring would be
              based.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the code on which the refactoring would be
              based.
            </p>
          </field>
        </params>
        <result>
          <field name="kinds">
            <list><ref>RefactoringKind</ref></list>
            <p>
              The kinds of refactorings that are valid for the given
              selection.
            </p>
          </field>
        </result>
      </request>
      <request method="getFixes">
        <p>
          Return the set of fixes that are available for the errors at
          a given offset in a given file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the errors for which fixes are being
              requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset used to select the errors for which fixes
              will be returned.
            </p>
          </field>
        </params>
        <result>
          <field name="fixes">
            <list><ref>AnalysisErrorFixes</ref></list>
            <p>
              The fixes that are available for the errors at the given offset.
            </p>
          </field>
        </result>
      </request>
      <request method="getRefactoring">
        <p>
          Get the changes required to perform a refactoring.
        </p>
        <p>
          If another refactoring request is received during the processing
          of this one, an error of type <tt>REFACTORING_REQUEST_CANCELLED</tt>
          will be generated.
        </p>
        <params>
          <field name="kind">
            <ref>RefactoringKind</ref>
            <p>
              The kind of refactoring to be performed.
            </p>
          </field>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code involved in the
              refactoring.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region involved in the refactoring.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region involved in the refactoring.
            </p>
          </field>
          <field name="validateOnly">
            <ref>bool</ref>
            <p>
              True if the client is only requesting that the values of
              the options be validated and no change be generated.
            </p>
          </field>
          <field name="options" optional="true">
            <ref>RefactoringOptions</ref>
            <p>
              Data used to provide values provided by the user. The
              structure of the data is dependent on the kind of
              refactoring being performed. The data that is expected is
              documented in the section titled <a
              href="#refactorings">Refactorings</a>, labeled as
              “Options”. This field can be omitted if the refactoring
              does not require any options or if the values of those
              options are not known.
            </p>
          </field>
        </params>
        <result>
          <field name="initialProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The initial status of the refactoring, i.e. problems related to
              the context in which the refactoring is requested.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="optionsProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The options validation status, i.e. problems in the given options,
              such as light-weight validation of a new name, flags
              compatibility, etc.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="finalProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The final status of the refactoring, i.e. problems identified in
              the result of a full, potentially expensive validation and / or
              change creation.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="feedback" optional="true">
            <ref>RefactoringFeedback</ref>
            <p>
              Data used to provide feedback to the user. The structure
              of the data is dependent on the kind of refactoring
              being created. The data that is returned is documented
              in the section titled <a
              href="#refactorings">Refactorings</a>, labeled as
              “Feedback”.
            </p>
          </field>
          <field name="change" optional="true">
            <ref>SourceChange</ref>
            <p>
              The changes that are to be applied to affect the
              refactoring. This field will be omitted if there are
              problems that prevent a set of changes from being
              computed, such as having no options specified for a
              refactoring that requires them, or if only validation
              was requested.
            </p>
          </field>
          <field name="potentialEdits" optional="true">
            <list><ref>String</ref></list>
            <p>
              The ids of source edits that are not known to be valid. An edit is
              not known to be valid if there was insufficient type information
              for the server to be able to determine whether or not the code
              needs to be modified, such as when a member is being renamed and
              there is a reference to a member from an unknown type. This field
              will be omitted if the change field is omitted or if there are no
              potential edits for the refactoring.
            </p>
          </field>
        </result>
      </request>
      <request method="sortMembers">
        <p>
          Sort all of the directives, unit and class members
          of the given Dart file.
        </p>
        <p>
          If a request is made for a file that does not exist, does not belong
          to an analysis root or is not a Dart file,
          <tt>SORT_MEMBERS_INVALID_FILE</tt> will be generated.
        </p>
        <p>
          If the Dart file has scan or parse errors,
          <tt>SORT_MEMBERS_PARSE_ERRORS</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The Dart file to sort.
            </p>
          </field>
        </params>
        <result>
          <field name="edit">
            <ref>SourceFileEdit</ref>
            <p>
              The file edit that is to be applied to the given file to effect
              the sorting.
            </p>
          </field>
        </result>
      </request>
    </domain>
    <domain name="execution">
      <p>
        The execution domain contains commands related to providing an execution
        or debugging experience.
      </p>
      <request method="createContext">
        <p>
          Create an execution context for the executable file with the given
          path. The context that is created will persist until
          execution.deleteContext is used to delete it. Clients, therefore, are
          responsible for managing the lifetime of execution contexts.
        </p>
        <params>
          <field name="contextRoot">
            <ref>FilePath</ref>
            <p>
              The path of the Dart or HTML file that will be launched.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier used to refer to the execution context that was
              created.
            </p>
          </field>
        </result>
      </request>
      <request method="deleteContext">
        <p>
          Delete the execution context with the given identifier. The context id
          is no longer valid after this command. The server is allowed to re-use
          ids when they are no longer valid.
        </p>
        <params>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier of the execution context that is to be deleted.
            </p>
          </field>
        </params>
      </request>
      <request method="mapUri">
        <p>
          Map a URI from the execution context to the file that it corresponds
          to, or map a file to the URI that it corresponds to in the execution
          context.
        </p>
        <p>
          Exactly one of the file and uri fields must be provided.
        </p>
        <p>
          If the file field is provided and the value is not the path of a file
          (either the file does not exist or the path references something other
          than a file), then an error of type <tt>MAP_URI_INVALID_FILE</tt> will
          be generated.
        </p>
        <p>
          If the uri field is provided and the value is not a valid URI or if
          the URI references something that is not a file (either a file that
          does not exist or something other than a file), then an error of type
          <tt>MAP_URI_INVALID_URI</tt> will be generated.
        </p>
        <p>
          If the contextRoot used to create the execution context is not a file
          (either the file does not exist or the path references something other
          than a file), then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt>
          will be generated.
        </p>
        <params>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier of the execution context in which the URI is to be
              mapped.
            </p>
          </field>
          <field name="file" optional="true">
            <ref>FilePath</ref>
            <p>
              The path of the file to be mapped into a URI.
            </p>
          </field>
          <field name="uri" optional="true">
            <ref>String</ref>
            <p>
              The URI to be mapped into a file path.
            </p>
          </field>
        </params>
        <result>
          <field name="file" optional="true">
            <ref>FilePath</ref>
            <p>
              The file to which the URI was mapped. This field is omitted if the
              uri field was not given in the request.
            </p>
          </field>
          <field name="uri" optional="true">
            <ref>String</ref>
            <p>
              The URI to which the file path was mapped. This field is omitted
              if the file field was not given in the request.
            </p>
          </field>
        </result>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services. All previous subscriptions are replaced by the
          given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not valid
          services. If there is an error, then the current subscriptions will
          remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <list><ref>ExecutionService</ref></list>
            <p>
              A list of the services being subscribed to.
            </p>
          </field>
        </params>
      </request>
      <notification event="launchData">
        <p>
          Reports information needed to allow a single file to be launched.
        </p>
        <p>
          This notification is not subscribed to by default. Clients can
          subscribe by including the value "LAUNCH_DATA" in the list of services
          passed in an <tt>execution.setSubscriptions</tt> request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file for which launch data is being provided. This will either
              be a Dart library or an HTML file.
            </p>
          </field>
          <field name="kind" optional="true">
            <ref>ExecutableKind</ref>
            <p>
              The kind of the executable file. This field is omitted if the file
              is not a Dart file.
            </p>
          </field>
          <field name="referencedFiles" optional="true">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the Dart files that are referenced by the file. This
              field is omitted if the file is not an HTML file.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <types>
      <h2 class="domain"><a name="types">Types</a></h2>
      <p>
        This section contains descriptions of the data types referenced
        in the API’s of the various domains.
      </p>
      <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>
        </object>
      </type>
      <type name="AnalysisErrorFixes">
        <p>
          A list of fixes associated with a specific error
        </p>
        <object>
          <field name="error">
            <ref>AnalysisError</ref>
            <p>
              The error with which the fixes are associated.
            </p>
          </field>
          <field name="fixes">
            <list><ref>SourceChange</ref></list>
            <p>
              The fixes associated with the error.
            </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="AnalysisOptions">
        <p>
          A set of options controlling what kind of analysis is to be
          performed. If the value of a field is omitted the value of the
          option will not be changed.
        </p>
        <object>
          <field name="enableAsync" optional="true">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b>/<p>
            <p>
              True if the client wants to enable support for the
              proposed async feature.
            </p>
          </field>
          <field name="enableDeferredLoading" optional="true">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b>/<p>
            <p>
              True if the client wants to enable support for the
              proposed deferred loading feature.
            </p>
          </field>
          <field name="enableEnums" optional="true">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b>/<p>
            <p>
              True if the client wants to enable support for the
              proposed enum feature.
            </p>
          </field>
          <field name="generateDart2jsHints" optional="true">
            <ref>bool</ref>
            <p>
              True if hints that are specific to dart2js should be
              generated. This option is ignored if generateHints is false.
            </p>
          </field>
          <field name="generateHints" optional="true">
            <ref>bool</ref>
            <p>
              True if hints should be generated as part of generating
              errors and warnings.
            </p>
          </field>
          <field name="generateLints" optional="true">
            <ref>bool</ref>
            <p>
              True if lints should be generated as part of generating
              errors and warnings.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisService">
        <p>
          An enumeration of the services provided by the analysis
          domain.
        </p>
        <enum>
          <value><code>FOLDING</code></value>
          <value><code>HIGHLIGHTS</code></value>
          <value><code>INVALIDATE</code></value>
          <value><code>NAVIGATION</code></value>
          <value><code>OCCURRENCES</code></value>
          <value><code>OUTLINE</code></value>
          <value><code>OVERRIDES</code></value>
        </enum>
      </type>
      <type name="AnalysisStatus">
        <p>
          An indication of the current state of analysis.
        </p>
        <object>
          <field name="isAnalyzing">
            <ref>bool</ref>
            <p>True if analysis is currently being performed.</p>
          </field>
          <field name="analysisTarget" optional="true">
            <ref>String</ref>
            <p>
              The name of the current target of analysis. This field is
              omitted if analyzing is false.
            </p>
          </field>
        </object>
      </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 INVALID_OVERLAY_CHANGE 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="CompletionId">
        <ref>String</ref>
        <p>
          An identifier used to associate completion results with a
          completion request.
        </p>
      </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="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="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 import 'myLib.dart' show someMethod; .
              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 x.someMethod(); .
              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></value>
          <value><code>OPTIONAL_ARGUMENT</code></value>
          <value><code>PARAMETER</code></value>
        </enum>
      </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>
        </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>FIELD</code></value>
          <value><code>FUNCTION</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>PARAMETER</code></value>
          <value><code>PREFIX</code></value>
          <value><code>SETTER</code></value>
          <value><code>TOP_LEVEL_VARIABLE</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="ExecutableFile">
        <p>
          A description of an executable file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The path of the executable file.
            </p>
          </field>
          <field name="kind">
            <ref>ExecutableKind</ref>
            <p>
              The kind of the executable file.
            </p>
          </field>
        </object>
      </type>
      <type name="ExecutableKind">
        <p>
          An enumeration of the kinds of executable files.
        </p>
        <enum>
          <value><code>CLIENT</code></value>
          <value><code>EITHER</code></value>
          <value><code>NOT_EXECUTABLE</code></value>
          <value><code>SERVER</code></value>
        </enum>
      </type>
      <type name="ExecutionContextId">
        <ref>String</ref>
        <p>
          The identifier for a execution context.
        </p>
      </type>
      <type name="ExecutionService">
        <p>
          An enumeration of the services provided by the execution
          domain.
        </p>
        <enum>
          <value><code>LAUNCH_DATA</code></value>
        </enum>
      </type>
      <type name="FilePath">
        <ref>String</ref>
        <p>
          The absolute path of a file.
        </p>
      </type>
      <type name="FoldingKind">
        <p>
          An enumeration of the kinds of folding regions.
        </p>
        <enum>
          <value><code>COMMENT</code></value>
          <value><code>CLASS_MEMBER</code></value>
          <value><code>DIRECTIVES</code></value>
          <value><code>DOCUMENTATION_COMMENT</code></value>
          <value><code>TOP_LEVEL_DECLARATION</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></value>
          <value><code>ENUM</code></value>
          <value><code>ENUM_CONSTANT</code></value>
          <value><code>FIELD</code></value>
          <value><code>FIELD_STATIC</code></value>
          <value><code>FUNCTION</code></value>
          <value><code>FUNCTION_DECLARATION</code></value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value><code>GETTER_DECLARATION</code></value>
          <value><code>IDENTIFIER_DEFAULT</code></value>
          <value><code>IMPORT_PREFIX</code></value>
          <value><code>KEYWORD</code></value>
          <value><code>LABEL</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_VARIABLE</code></value>
          <value><code>LOCAL_VARIABLE_DECLARATION</code></value>
          <value><code>METHOD</code></value>
          <value><code>METHOD_DECLARATION</code></value>
          <value><code>METHOD_DECLARATION_STATIC</code></value>
          <value><code>METHOD_STATIC</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>SETTER_DECLARATION</code></value>
          <value><code>TOP_LEVEL_VARIABLE</code></value>
          <value><code>TYPE_NAME_DYNAMIC</code></value>
          <value><code>TYPE_PARAMETER</code></value>
        </enum>
      </type>
      <type name="HoverInformation">
        <p>
          The hover information associated with a specific location.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the range of characters that encompases the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the range of characters that encompases the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </field>
          <field name="containingLibraryPath" optional="true">
            <ref>String</ref>
            <p>
              The path to the defining compilation unit of the library
              in which the referenced element is declared. This data is
              omitted if there is no referenced element, or if the
              element is declared inside an HTML file.
            </p>
          </field>
          <field name="containingLibraryName" optional="true">
            <ref>String</ref>
            <p>
              The name of the library in which the referenced element is
              declared. This data is omitted if there is no referenced
              element, or if the element is declared inside an HTML
              file.
            </p>
          </field>
          <field name="dartdoc" optional="true">
            <ref>String</ref>
            <p>
              The dartdoc associated with the referenced element. Other
              than the removal of the comment delimiters, including
              leading asterisks in the case of a block comment, the
              dartdoc is unprocessed markdown. This data is omitted if
              there is no referenced element, or if the element has no
              dartdoc.
            </p>
          </field>
          <field name="elementDescription" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the element being
              referenced. This data is omitted if there is no referenced
              element.
            </p>
          </field>
          <field name="elementKind" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the kind of element being
              referenced (such as “class” or “function type
              alias”). This data is omitted if there is no referenced
              element.
            </p>
          </field>
          <field name="parameter" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the parameter
              corresponding to the expression being hovered over. This
              data is omitted if the location is not in an argument to a
              function.
            </p>
          </field>
          <field name="propagatedType" optional="true">
            <ref>String</ref>
            <p>
              The name of the propagated type of the expression. This
              data is omitted if the location does not correspond to an
              expression or if there is no propagated type information.
            </p>
          </field>
          <field name="staticType" optional="true">
            <ref>String</ref>
            <p>
              The name of the static type of the expression. This data
              is omitted if the location does not correspond to an
              expression.
            </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 LinkedEditGroup.
        </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>
        </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.
            </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 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="startLine">
            <ref>int</ref>
            <p>
              The one-based index of the line containing the first
              character of the region.
            </p>
          </field>
          <field name="startColumn">
            <ref>int</ref>
            <p>
              The one-based index of the column containing the first
              character of the region.
            </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 if 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="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.
            </p>
          </field>
        </object>
      </type>
      <type name="Override">
        <p>
          A description of a member that overrides an inherited member.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the name of the overriding member.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name of the overriding member.
            </p>
          </field>
          <field name="superclassMember" optional="true">
            <ref>OverriddenMember</ref>
            <p>
              The member inherited from a superclass that is overridden
              by the overriding member. The field is omitted if there is
              no superclass member, in which case there must be at least
              one interface member.
            </p>
          </field>
          <field name="interfaceMembers" optional="true">
            <list><ref>OverriddenMember</ref></list>
            <p>
              The members inherited from interfaces that are overridden
              by the overriding member. The field is omitted if there
              are no interface members, in which case there must be a
              superclass member.
            </p>
          </field>
        </object>
      </type>
      <type name="OverriddenMember">
        <p>
          A description of a member that is being overridden.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              The element that is being overridden.
            </p>
          </field>
          <field name="className">
            <ref>String</ref>
            <p>
              The name of the class in which the member is defined.
            </p>
          </field>
        </object>
      </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="PubStatus">
        <p>
          An indication of the current state of pub execution.
        </p>
        <object>
          <field name="isListingPackageDirs">
            <ref>bool</ref>
            <p>
              True if the server is currently running pub to produce a list of
              package directories.
            </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>INLINE_LOCAL_VARIABLE</code></value>
          <value><code>INLINE_METHOD</code></value>
          <value><code>MOVE_FILE</code></value>
          <value><code>RENAME</code></value>
          <value><code>SORT_MEMBERS</code></value>
        </enum>
      </type>
      <type name="RefactoringMethodParameter">
        <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="RefactoringFeedback">
        <p>
          An abstract superclass of all refactoring feedbacks.
        </p>
        <object>
        </object>
      </type>
      <type name="RefactoringOptions">
        <p>
          An abstract superclass of all refactoring options.
        </p>
        <object>
        </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></value>
          <value><code>WARNING</code></value>
          <value><code>ERROR</code></value>
          <value><code>FATAL</code></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="RequestError">
        <p>
          An indication of a problem with the execution of the server,
          typically in response to a request.
        </p>
        <object>
          <field name="code">
            <ref>RequestErrorCode</ref>
            <p>
              A code that uniquely identifies the error that occurred.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              A short description of the error.
            </p>
          </field>
          <field name="stackTrace" optional="true">
            <ref>String</ref>
            <p>
              The stack trace associated with processing the request,
              used for debugging the server.
            </p>
          </field>
        </object>
      </type>
      <type name="RequestErrorCode">
        <p>
          An enumeration of the types of errors that can occur in the
          execution of the server.
        </p>
        <enum>
          <value>
            <code>CONTENT_MODIFIED</code>
            <p>
              An "analysis.getErrors" or "analysis.getNavigation" request could
              not be satisfied because the content of the file changed before
              the requested results could be computed.
            </p>
          </value>
          <value>
            <code>FORMAT_INVALID_FILE</code>
            <p>
              An "edit.format" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </value>
          <value>
            <code>GET_ERRORS_INVALID_FILE</code>
            <p>
              An "analysis.getErrors" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </value>
          <value>
            <code>INVALID_OVERLAY_CHANGE</code>
            <p>
              An analysis.updateContent request contained a
              ChangeContentOverlay object which can't be applied, due
              to an edit having an offset or length that is out of
              range.
            </p>
          </value>
          <value>
            <code>INVALID_PARAMETER</code>
            <p>
              One of the method parameters was invalid.
            </p>
          </value>
          <value>
            <code>INVALID_REQUEST</code>
            <p>
              A malformed request was received.
            </p>
          </value>
          <value>
            <code>REFACTORING_REQUEST_CANCELLED</code>
            <p>
              Another refactoring request was received during processing of
              this one.
            </p>
          </value>
          <value>
            <code>SERVER_ALREADY_STARTED</code>
            <p>
              The analysis server has already been started (and hence
              won't accept new connections).
            </p>
            <p>
              This error is included for future expansion; at present
              the analysis server can only speak to one client at a
              time so this error will never occur.
            </p>
          </value>
          <value>
            <code>SERVER_ERROR</code>
            <p>
              An internal error occurred in the analysis server.
              Also see the server.error notification.
            </p>
          </value>
          <value>
            <code>SORT_MEMBERS_INVALID_FILE</code>
            <p>
              An "edit.sortMembers" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </value>
          <value>
            <code>SORT_MEMBERS_PARSE_ERRORS</code>
            <p>
              An "edit.sortMembers" request specified a Dart file that has
              scan or parse errors.
            </p>
          </value>
          <value>
            <code>UNANALYZED_PRIORITY_FILES</code>
            <p>
              An "analysis.setPriorityFiles" request includes one or
              more files that are not being analyzed.
            </p>
            <p>
              This is a legacy error; it will be removed before the
              API reaches version 1.0.
            </p>
            <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
          </value>
          <value>
            <code>UNKNOWN_REQUEST</code>
            <p>
              A request was received which the analysis server does
              not recognize, or cannot handle in its current
              configuation.
            </p>
          </value>
          <value>
            <code>UNSUPPORTED_FEATURE</code>
            <p>
              The analysis server was requested to perform an action
              which is not supported.
            </p>
            <p>
              This is a legacy error; it will be removed before the
              API reaches version 1.0.
            </p>
            <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
          </value>
        </enum>
      </type>
      <type name="SearchId">
        <ref>String</ref>
        <p>
          An identifier used to associate search results with a search
          request.
        </p>
      </type>
      <type name="SearchResult">
        <p>
          A single result from a search request.
        </p>
        <object>
          <field name="location">
            <ref>Location</ref>
            <p>
              The location of the code that matched the search criteria.
            </p>
          </field>
          <field name="kind">
            <ref>SearchResultKind</ref>
            <p>
              The kind of element that was found or the kind of
              reference that was found.
            </p>
          </field>
          <field name="isPotential">
            <ref>bool</ref>
            <p>
              True if the result is a potential match but cannot be
              confirmed to be a match. For example, if all references to
              a method m defined in some class were requested, and a
              reference to a method m from an unknown class were found,
              it would be marked as being a potential match.
            </p>
          </field>
          <field name="path">
            <list><ref>Element</ref></list>
            <p>
              The elements that contain the result, starting with the
              most immediately enclosing ancestor and ending with the
              library.
            </p>
          </field>
        </object>
      </type>
      <type name="SearchResultKind">
        <p>
          An enumeration of the kinds of search results returned by the
          search domain.
        </p>
        <enum>
          <value>
            <code>DECLARATION</code>
            <p>
              The declaration of an element.
            </p>
          </value>
          <value>
            <code>INVOCATION</code>
            <p>
              The invocation of a function or method.
            </p>
          </value>
          <value>
            <code>READ</code>
            <p>
              A reference to a field, parameter or variable where it is being read.
            </p>
          </value>
          <value>
            <code>READ_WRITE</code>
            <p>
              A reference to a field, parameter or variable where it is being read and written.
            </p>
          </value>
          <value>
            <code>REFERENCE</code>
            <p>
              A reference to an element.
            </p>
          </value>
          <value>
            <code>UNKNOWN</code>
            <p>
              Some other kind of search result.
            </p>
          </value>
          <value>
            <code>WRITE</code>
            <p>
              A reference to a field, parameter or variable where it is being written.
            </p>
          </value>
        </enum>
      </type>
      <type name="ServerService">
        <p>
          An enumeration of the services provided by the server domain.
        </p>
        <enum>
          <value><code>STATUS</code></value>
        </enum>
      </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>
        </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">
            <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>
      <type name="TypeHierarchyItem">
        <p>
          A representation of a class in a type hierarchy.
        </p>
        <object>
          <field name="classElement">
            <ref>Element</ref>
            <p>
              The class element represented by this item.
            </p>
          </field>
          <field name="displayName" optional="true">
            <ref>String</ref>
            <p>
              The name to be displayed for the class. This field will be
              omitted if the display name is the same as the name of the
              element. The display name is different if there is
              additional type information to be displayed, such as type
              arguments.
            </p>
          </field>
          <field name="memberElement" optional="true">
            <ref>Element</ref>
            <p>
              The member in the class corresponding to the member on
              which the hierarchy was requested. This field will be
              omitted if the hierarchy was not requested for a member or
              if the class does not have a corresponding member.
            </p>
          </field>
          <field name="superclass" optional="true">
            <ref>int</ref>
            <p>
              The index of the item representing the superclass of
              this class. This field will be omitted if this item
              represents the class Object.
            </p>
          </field>
          <field name="interfaces">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the interfaces
              implemented by this class. The list will be empty if
              there are no implemented interfaces.
            </p>
          </field>
          <field name="mixins">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the mixins
              referenced by this class. The list will be empty if
              there are no classes mixed in to this class.
            </p>
          </field>
          <field name="subclasses">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the subtypes of
              this class. The list will be empty if there are no
              subtypes or if this item represents a supertype of the
              pivot type.
            </p>
          </field>
        </object>
      </type>
    </types>
    <refactorings>
      <h2><a name="refactorings">Refactorings</a></h2>
      <p>
        This section contains additional information for each kind of
        refactoring. In addition to a brief description of the
        refactoring, there is a specification of the feedback that is
        provided when a refactoring is requested using the
        edit.getRefactoring request (designed to improve the UX)
        and the options that may be provided to edit.getRefactoring.
      </p>
      <refactoring kind="CONVERT_GETTER_TO_METHOD">
        <p>
          Convert a getter into a method by removing the keyword get
          and adding an empty parameter list.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single getter.
        </p>
      </refactoring>
      <refactoring kind="CONVERT_METHOD_TO_GETTER">
        <p>
          Convert a method into a getter by adding the keyword get and
          removing the parameter list.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single method or if the method has
          a non-empty parameter list.
        </p>
      </refactoring>
      <refactoring kind="EXTRACT_LOCAL_VARIABLE">
        <p>
          Create a local variable initialized by a specified
          expression.
        </p>
        <p>
          It is an error if the range contains anything other than a
          complete expression (no partial expressions are allowed).
        </p>
        <feedback>
          <field name="names">
            <list><ref>String</ref></list>
            <p>
              The proposed names for the local variable.
            </p>
          </field>
          <field name="offsets">
            <list><ref>int</ref></list>
            <p>
              The offsets of the expressions that would be replaced by
              a reference to the variable.
            </p>
          </field>
          <field name="lengths">
            <list><ref>int</ref></list>
            <p>
              The lengths of the expressions that would be replaced by
              a reference to the variable. The lengths correspond to
              the offsets. In other words, for a given expression, if
              the offset of that expression is offsets[i], then the
              length of that expression is lengths[i].
            </p>
          </field>
        </feedback>
        <options>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that the local variable should be given.
            </p>
          </field>
          <field name="extractAll">
            <ref>bool</ref>
            <p>
              True if all occurrences of the expression within the
              scope in which the variable will be defined should be
              replaced by a reference to the local variable. The
              expression used to initiate the refactoring will always
              be replaced.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="EXTRACT_METHOD">
        <p>
          Create a method whose body is the specified expression or
          list of statements, possibly augmented with a return
          statement.
        </p>
        <p>
          It is an error if the range contains anything other than a
          complete expression (no partial expressions are allowed) or
          a complete sequence of statements.
        </p>
        <feedback>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset to the beginning of the expression or
              statements that will be extracted.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the expression or statements that will be
              extracted.
            </p>
          </field>
          <field name="returnType">
            <ref>String</ref>
            <p>
              The proposed return type for the method.
            </p>
          </field>
          <field name="names">
            <list><ref>String</ref></list>
            <p>
              The proposed names for the method.
            </p>
          </field>
          <field name="canCreateGetter">
            <ref>bool</ref>
            <p>
              True if a getter could be created rather than a method.
            </p>
          </field>
          <field name="parameters">
            <list><ref>RefactoringMethodParameter</ref></list>
            <p>
              The proposed parameters for the method.
            </p>
          </field>
          <field name="offsets">
            <list><ref>int</ref></list>
            <p>
              The offsets of the expressions or statements that would
              be replaced by an invocation of the method.
            </p>
          </field>
          <field name="lengths">
            <list><ref>int</ref></list>
            <p>
              The lengths of the expressions or statements that would
              be replaced by an invocation of the method. The lengths
              correspond to the offsets. In other words, for a given
              expression (or block of statements), if the offset of
              that expression is offsets[i], then the length of that
              expression is lengths[i].
            </p>
          </field>
        </feedback>
        <options>
          <field name="returnType">
            <ref>String</ref>
            <p>
              The return type that should be defined for the method.
            </p>
          </field>
          <field name="createGetter">
            <ref>bool</ref>
            <p>
              True if a getter should be created rather than a
              method. It is an error if this field is true and the
              list of parameters is non-empty.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that the method should be given.
            </p>
          </field>
          <field name="parameters">
            <list><ref>RefactoringMethodParameter</ref></list>
            <p>
              The parameters that should be defined for the method.
            </p>
            <p>
              It is an error if a REQUIRED or NAMED parameter follows a
              POSITIONAL parameter.
              It is an error if a REQUIRED or POSITIONAL parameter follows a
              NAMED parameter.
            </p>
            <ul>
              <li>
                To change the order and/or update proposed parameters, add
                parameters with the same identifiers as proposed.
              </li>
              <li>To add new parameters, omit their identifier.</li>
              <li>To remove some parameters, omit them in this list.</li>
            </ul>
          </field>
          <field name="extractAll">
            <ref>bool</ref>
            <p>
              True if all occurrences of the expression or statements
              should be replaced by an invocation of the method. The
              expression or statements used to initiate the
              refactoring will always be replaced.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="INLINE_LOCAL_VARIABLE">
        <p>
          Inline the initializer expression of a local variable in
          place of any references to that variable.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single local variable.
        </p>
        <feedback>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the variable being inlined.
            </p>
          </field>
          <field name="occurrences">
            <ref>int</ref>
            <p>
              The number of times the variable occurs.
            </p>
          </field>
        </feedback>
      </refactoring>
      <refactoring kind="INLINE_METHOD">
        <p>
          Inline a method in place of one or all references to that
          method.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single method.
        </p>
        <feedback>
          <field name="className" optional="true">
            <ref>String</ref>
            <p>
              The name of the class enclosing the method being inlined.
              If not a class member is being inlined, this field will be absent.
            </p>
          </field>
          <field name="methodName">
            <ref>String</ref>
            <p>
              The name of the method (or function) being inlined.
            </p>
          </field>
          <field name="isDeclaration">
            <ref>bool</ref>
            <p>
              True if the declaration of the method is selected.
              So all references should be inlined.
            </p>
          </field>
        </feedback>
        <options>
          <field name="deleteSource">
            <ref>bool</ref>
            <p>
              True if the method being inlined should be removed.
              It is an error if this field is true and inlineAll is false.
            </p>
          </field>
          <field name="inlineAll">
            <ref>bool</ref>
            <p>
              True if all invocations of the method should be inlined,
              or false if only the invocation site used to create this
              refactoring should be inlined.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="MOVE_FILE">
        <p>
          Move the given file and update all of the references to that file
          and from it. The move operation is supported in general case - for
          renaming a file in the same folder, moving it to a different folder
          or both.
        </p>
        <p>
          The refactoring must be activated before an actual file moving
          operation is performed.
        </p>
        <p>
          The "offset" and "length" fields from the request are ignored, but the
          file specified in the request specifies the file to be moved.
        </p>
        <options>
          <field name="newFile">
            <ref>FilePath</ref>
            <p>
              The new file path to which the given file is being moved.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="RENAME">
        <p>
          Rename a given element and all of the references to that
          element.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single function (including methods,
          getters and setters), variable (including fields, parameters
          and local variables), class or function type.
        </p>
        <feedback>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset to the beginning of the name selected to be
              renamed.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name selected to be renamed.
            </p>
          </field>
          <field name="elementKindName">
            <ref>String</ref>
            <p>
              The human-readable description of the kind of element being
              renamed (such as “class” or “function type
              alias”).
            </p>
          </field>
          <field name="oldName">
            <ref>String</ref>
            <p>
              The old name of the element before the refactoring.
            </p>
          </field>
        </feedback>
        <options>
          <field name="newName">
            <ref>String</ref>
            <p>
              The name that the element should have after the
              refactoring.
            </p>
          </field>
        </options>
      </refactoring>
    </refactorings>
    <h2>Errors</h2>
    <p>
      This section contains a list of all of the errors that are
      produced by the server and the data that is returned with each.
    </p>
    <p>
      TBD
    </p>
  </body>
</html>
