<!doctype html>
<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.18.1</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/">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>
<p>
  In order to be backward compatible, clients should ignore fields that were
  not specified in the version of the API on which they were based. Clients
  should also use the server.getVersion request to test that the version of
  the server supports an API before using it.
</p>
<h3>Eventual Consistency</h3>
<p>
  The analysis server satisfies requests under the principle of
  <a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventual
    consistency</a>.
  That is, in some cases it may return responses with the currently available
  results while it's catching up with unprocessed changes.
</p>
<h3>Domains</h3>
<p>
  For convenience, the API is divided into domains. Each domain is specified
  in a separate section below. 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>
<toc></toc>
<h3>Command-line Arguments</h3>
<p>
  The command-line arguments that can be passed to the server.
</p>
<h4>Options</h4>
<blockquote>
  <dl>
    <dt>--client-id</dt>
    <dd>
      <p>
        Specifies an identifier associated with the client. Used when
        generating error reports.
      </p>
      <p>
        Clients are strongly encouraged to provide this information in
        order to improve the quality of information that can be provided
        to them.
      </p>
    </dd>
  </dl>
  <dl>
    <dt>--client-version</dt>
    <dd>
      <p>
        Specifies the version of the client that is communicating with
        the server. Used when generating error reports.
      </p>
      <p>
        Clients are strongly encouraged to provide this information in
        order to improve the quality of information that can be provided
        to them.
      </p>
    </dd>
  </dl>
  <dl>
    <dt class="deprecated">--no-error-notification</dt>
    <dd>
      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
      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 class="deprecated">--no-index</dt>
    <dd>
      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
      This flag used to disable the server from generating an index, but now
      it has no effect.
    </dd>
  </dl>
  <dl>
    <dt class="deprecated">--file-read-mode</dt>
    <dd>
      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
      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>
<domains></domains>
<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>
    <params>
      <field name="version">
        <ref>String</ref>
        <p>The version number of the analysis server.</p>
      </field>
      <field name="pid">
        <ref>int</ref>
        <p>The process id of the analysis server process.</p>
      </field>
      <field name="sessionId" optional="true">
        <ref>String</ref>
        <p>The session id for this session.</p>
      </field>
    </params>
  </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="getReachableSources">
    <p>
      Return the transitive closure of reachable sources for a given file.
    </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_REACHABLE_SOURCES_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file for which reachable source information is being requested.
        </p>
      </field>
    </params>
    <result>
      <field name="sources">
        <map>
          <key>
            <ref>String</ref>
          </key>
          <value>
            <list>
              <ref>String</ref>
            </list>
          </value>
        </map>
        <p>
          A mapping from source URIs to directly reachable source URIs. For
          example,
          a file "foo.dart" that imports "bar.dart" would have the corresponding
          mapping
          { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
          further imports
          (or exports) there will be a mapping from the URI "file:///bar.dart"
          to them.
          To check if a specific URI is reachable from a given file, clients can
          check
          for its presence in the resulting key set.
        </p>
      </field>
    </result>
  </request>
  <request method="getLibraryDependencies">
    <p>
      Return library dependency information for use in client-side indexing
      and package URI resolution.
    </p>
    <p>
      Clients that are only using the libraries field should consider using the
      analyzedFiles notification instead.
    </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>
    <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_NAVIGATION_INVALID_FILE</tt> will be generated.
    </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 specified
      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>
    <p>
      If no analysis roots are provided, then all current analysis roots
      will be re-analyzed. If an empty list of analysis roots is provided,
      then nothing will be re-analyzed. If the list contains one or more
      paths that are not currently analysis roots, then an error of type
      <tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
    </p>
    <params>
      <field name="roots" optional="true">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the analysis roots that are to be re-analyzed.
        </p>
      </field>
    </params>
  </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 package roots
          that should override the normal package: URI resolution
          mechanism.
        </p>
        <p>
          If a package root is a directory, then
          the analyzer will behave as though the associated
          source directory in the map contains a special
          pubspec.yaml file which resolves any package: URI to the
          corresponding path within that package root directory. The
          effect is the same as specifying the package root directory as
          a "--package_root" parameter to the Dart VM when
          executing any Dart file inside the source directory.
        </p>
        <p>
          If a package root is a file, then the analyzer
          will behave as though that file is a ".packages" file in the
          source directory. The effect is the same as specifying the file
          as a "--packages" 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="setGeneralSubscriptions">
    <p>
      Subscribe for general services (that is, services that are not
      specific to individual files). 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>GeneralAnalysisService</ref>
        </list>
        <p>A list of the services being subscribed to.</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 that are specific to individual files.
      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" deprecated="true">
    <p><b>Deprecated:</b> all of the options can be set by users in
      an analysis options file.</p>
    <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="analyzedFiles">
    <p>
      Reports the paths of the files that are being analyzed.
    </p>
    <p>
      This notification is not subscribed to by default. Clients can
      subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the list
      of services passed in an analysis.setGeneralSubscriptions request.
    </p>
    <params>
      <field name="directories">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the paths of the files that are being analyzed.
        </p>
      </field>
    </params>
  </notification>
  <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>
    <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="implemented">
    <p>
      Reports the classes that are implemented or extended and
      class members that are implemented or overridden in a file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"IMPLEMENTED"</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 implementations are associated.
        </p>
      </field>
      <field name="classes">
        <list>
          <ref>ImplementedClass</ref>
        </list>
        <p>
          The classes defined in the file that are implemented or extended.
        </p>
      </field>
      <field name="members">
        <list>
          <ref>ImplementedMember</ref>
        </list>
        <p>
          The member defined in the file that are implemented or overridden.
        </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="kind">
        <ref>FileKind</ref>
        <p>
          The kind of the file.
        </p>
      </field>
      <field name="libraryName" optional="true">
        <ref>String</ref>
        <p>
          The name of the library defined by the file using a "library"
          directive, or referenced by a "part of" directive. If both
          "library" and "part of" directives are present, then the
          "library" directive takes precedence.
          This field will be omitted if the file has neither "library"
          nor "part of" directives.
        </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 overriding 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>
      <field name="superOnly" optional="true">
        <ref>bool</ref>
        <p>
          True if the client is only requesting superclasses and
          interfaces hierarchy.
        </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. If preserving selection
      information is not required, zero (0) can be specified for both the
      selection offset and selection length.
    </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. If the source
      contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</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.
        </p>
      </field>
      <field name="selectionLength">
        <ref>int</ref>
        <p>
          The length of the current selection in the file.
        </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>
          -->
      <field name="lineLength" optional="true">
        <ref>int</ref>
        <p>
          The line length to be used by the formatter.
        </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="getStatementCompletion" experimental="true">
    <p>
      Get the changes required to convert the partial statement at the given
      location into a syntactically valid statement. If the current statement
      is already valid the change will insert a newline plus appropriate
      indentation at the end of the line containing the offset.
      If a change that makes the statement valid cannot be determined (perhaps
      because it has not yet been implemented) the statement will be considered
      already valid and the appropriate change returned.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the statement to be completed.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset used to identify the statement to be completed.
        </p>
      </field>
    </params>
    <result>
      <field name="change">
        <ref>SourceChange</ref>
        <p>
          The change to be applied in order to complete the statement.
        </p>
      </field>
      <field name="whitespaceOnly">
        <ref>bool</ref>
        <p>
          Will be true if the change contains nothing but whitespace
          characters, or is empty.
        </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>
  <request method="organizeDirectives">
    <p>
      Organizes all of the directives - removes unused imports and sorts
      directives of the given Dart file according to the
      <a href="https://www.dartlang.org/articles/style-guide/">Dart Style
        Guide</a>.
    </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>FILE_NOT_ANALYZED</tt> will be generated.
    </p>
    <p>
      If directives of the Dart file cannot be organized, for example
      because it has scan or parse errors, or by other reasons,
      <tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
      will provide details about the reason.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The Dart file to organize directives in.
        </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 organizing.
        </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, or the
          path of the directory containing the file.
        </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. If both
      fields are provided, then an error of type <tt>INVALID_PARAMETER</tt>
      will be generated. Similarly, if neither field is provided, then an
      error of type <tt>INVALID_PARAMETER</tt> will be generated.
    </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>INVALID_PARAMETER</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>INVALID_PARAMETER</tt> will be generated.
    </p>
    <p>
      If the contextRoot used to create the execution context does not
      exist, 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" deprecated="true">
    <p>
      <b>Deprecated:</b> the analysis server no longer fires
      <tt>LAUNCH_DATA</tt> events.
    </p>
    <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>
<domain name="diagnostic">
  <p>
    The diagnostic domain contains server diagnostics APIs.
  </p>
  <request method="getDiagnostics">
    <p>Return server diagnostics.</p>
    <result>
      <field name="contexts">
        <list>
          <ref>ContextData</ref>
        </list>
        <p>The list of analysis contexts.</p>
      </field>
    </result>
  </request>
  <request method="getServerPort">
    <p>
      Return the port of the diagnostic web server. If the server is not running
      this call will start the server. If unable to start the diagnostic web
      server,
      this call will return an error of <tt>DEBUG_PORT_COULD_NOT_BE_OPENED</tt>.
    </p>
    <result>
      <field name="port">
        <ref>int</ref>
        <p>The diagnostic server port.</p>
      </field>
    </result>
  </request>
</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>
  <include path="../../../analyzer_plugin/tool/spec/common_types_spec.html"
           import="package:analyzer_plugin/protocol/protocol_common.dart"></include>
  <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="AnalysisOptions" deprecated="true">
    <p><b>Deprecated:</b> the only reference to this type has been
      deprecated.</p>
    <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" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed async feature.
        </p>
      </field>
      <field name="enableDeferredLoading" optional="true" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed deferred loading feature.
        </p>
      </field>
      <field name="enableEnums" optional="true" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed enum feature.
        </p>
      </field>
      <field name="enableNullAwareOperators" optional="true" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed "null aware operators" feature.
        </p>
      </field>
      <field name="enableSuperMixins" optional="true">
        <ref>bool</ref>
        <p>
          True if the client wants to enable support for the
          proposed "less restricted mixins" proposal (DEP 34).
        </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 that
      are related to a specific list of files.
    </p>
    <enum>
      <value><code>FOLDING</code></value>
      <value><code>HIGHLIGHTS</code></value>
      <value><code>IMPLEMENTED</code></value>
      <value>
        <code>INVALIDATE</code>
        <p>
          This service is not currently implemented and will become a
          GeneralAnalysisService in a future release.
        </p>
      </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="CompletionId">
    <ref>String</ref>
    <p>
      An identifier used to associate completion results with a
      completion request.
    </p>
  </type>
  <type name="ContextData">
    <p>
      Information about an analysis context.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the context.
        </p>
      </field>
      <field name="explicitFileCount">
        <ref>int</ref>
        <p>
          Explicitly analyzed files.
        </p>
      </field>
      <field name="implicitFileCount">
        <ref>int</ref>
        <p>
          Implicitly analyzed files.
        </p>
      </field>
      <field name="workItemQueueLength">
        <ref>int</ref>
        <p>
          The number of work items in the queue.
        </p>
      </field>
      <field name="cacheEntryExceptions">
        <list>
          <ref>String</ref>
        </list>
        <p>
          Exceptions associated with cache entries.
        </p>
      </field>
    </object>
  </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="FileKind">
    <p>
      An enumeration of the kinds of files.
    </p>
    <enum>
      <value><code>LIBRARY</code></value>
      <value><code>PART</code></value>
    </enum>
  </type>
  <type name="GeneralAnalysisService">
    <p>
      An enumeration of the services provided by the analysis domain that are
      general in nature (that is, are not specific to some list of files).
    </p>
    <enum>
      <value><code>ANALYZED_FILES</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 encompasses 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 encompasses 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="containingClassDescription" optional="true">
        <ref>String</ref>
        <p>
          A human-readable description of the class declaring the element
          being referenced. This data is omitted if there is no referenced
          element, or if the element is not a class member.
        </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="isDeprecated" optional="true">
        <ref>bool</ref>
        <p>
          True if the referenced element is deprecated.
        </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="ImplementedClass">
    <p>
      A description of a class that is implemented or extended.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the name of the implemented class.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name of the implemented class.
        </p>
      </field>
    </object>
  </type>
  <type name="ImplementedMember">
    <p>
      A description of a class member that is implemented or overridden.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the name of the implemented member.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name of the implemented member.
        </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="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="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="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>DEBUG_PORT_COULD_NOT_BE_OPENED</code>
        <p>
          The server was unable to open a port for the diagnostic server.
        </p>
      </value>
      <value>
        <code>FILE_NOT_ANALYZED</code>
        <p>
          A request specified a FilePath which does not match a file in
          an analysis root, or the requested operation is not available
          for the file.
        </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>FORMAT_WITH_ERRORS</code>
        <p>
          An "edit.format" request specified a file that contains syntax
          errors.
        </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>GET_NAVIGATION_INVALID_FILE</code>
        <p>
          An "analysis.getNavigation" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </value>
      <value>
        <code>GET_REACHABLE_SOURCES_INVALID_FILE</code>
        <p>
          An "analysis.getReachableSources" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </value>
      <value>
        <code>INVALID_ANALYSIS_ROOT</code>
        <p>
          A path passed as an argument to a request (such as
          analysis.reanalyze) is required to be an analysis root, but isn't.
        </p>
      </value>
      <value>
        <code>INVALID_EXECUTION_CONTEXT</code>
        <p>
          The context root used to create an execution context does not
          exist.
        </p>
      </value>
      <value>
        <code>INVALID_FILE_PATH_FORMAT</code>
        <p>
          The format of the given file path is invalid, e.g. is not
          absolute and normalized.
        </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>ORGANIZE_DIRECTIVES_ERROR</code>
        <p>
          An "edit.organizeDirectives" request specified a Dart file that
          cannot be analyzed. The reason is described in the message.
        </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
          configuration.
        </p>
      </value>
      <value>
        <code>UNKNOWN_SOURCE</code>
        <p>
          The analysis server was requested to perform an action
          on a source that does not exist.
        </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="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 the expression that covers
      the specified selection.
    </p>
    <p>
      It is an error if the selection range is not covered by a
      complete expression.
    </p>
    <feedback>
      <field name="coveringExpressionOffsets" optional="true">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The offsets of the expressions that cover the specified
          selection, from the down most to the up most.
        </p>
      </field>
      <field name="coveringExpressionLengths" optional="true">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The lengths of the expressions that cover the specified
          selection, from the down most to the up most.
        </p>
      </field>
      <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 <tt>offsets[i]</tt>, then
          the length of that expression is <tt>lengths[i]</tt>.
        </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.
          If the returned element does not have a declared return type,
          this field will contain an empty string.
        </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 <tt>offsets[i]</tt>, then the length
          of that expression is <tt>lengths[i]</tt>.
        </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>
  TODO: TBD
</p>
<h2 class="domain"><a name="index">Index</a></h2>
<index></index>
</body>
</html>
