<!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.3</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="getImportedElements" experimental="true">
    <p>
      Return a description of all of the elements referenced in a given region
      of a given file that come from imported libraries.
    </p>
    <p>
      If a request is made for a file that does not exist, or that is not
      currently subject to analysis (e.g. because it is not associated with any
      analysis root specified via analysis.setAnalysisRoots), an error of type
      <tt>GET_IMPORTED_ELEMENTS_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which import information is being requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region for which import information is being
          requested.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region for which import information is being
          requested.
        </p>
      </field>
    </params>
    <result>
      <field name="elements">
        <list>
          <ref>ImportedElements</ref>
        </list>
        <p>
          The information about the elements that are referenced in the
          specified region of the specified file that come from imported
          libraries.
        </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="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="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="closingLabels">
    <p>
      Reports closing labels relevant to a given file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"CLOSING_LABELS"</tt>
      in the list of services passed in an
      analysis.setSubscriptions request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file the closing labels relate to.
        </p>
      </field>
      <field name="labels">
        <list>
          <ref>ClosingLabel</ref>
        </list>
        <p>
          Closing labels relevant to the file. Each item
          represents a useful label associated with some range
          with may be useful to display to the user within the editor
          at the end of the range to indicate what construct is closed
          at that location. Closing labels include constructor/method
          calls and List arguments that span multiple lines.
          Note that the ranges that are returned can overlap
          each other because they may be associated with
          constructs that can be nested.
        </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="getPostfixCompletion" experimental="true">
    <p>
      Get the changes required to convert the postfix template at the given
      location into the template's expanded form.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the postfix template to be expanded.
        </p>
      </field>
      <field name="key">
        <ref>String</ref>
        <p>
          The unique name that identifies the template in use.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset used to identify the code to which the template will be applied.
        </p>
      </field>
    </params>
    <result>
      <field name="change">
        <ref>SourceChange</ref>
        <p>
          The change to be applied in order to complete the statement.
        </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="isPostfixCompletionApplicable" experimental="true">
    <p>
      Determine if the request postfix completion template is applicable at
      the given location in the given file.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the postfix template to be expanded.
        </p>
      </field>
      <field name="key">
        <ref>String</ref>
        <p>
          The unique name that identifies the template in use.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset used to identify the code to which the template will be applied.
        </p>
      </field>
    </params>
    <result>
      <field name="value">
        <ref>bool</ref>
        <p>
          True if the template can be expanded at the given location.
        </p>
      </field>
    </result>
  </request>
  <request method="listPostfixCompletionTemplates" experimental="true">
    <p>
      Return a list of all postfix templates currently available.
    </p>
    <result>
      <field name="templates">
        <list>
          <ref>PostfixTemplateDescriptor</ref>
        </list>
        <p>
          The list of available templates.
        </p>
      </field>
    </result>
  </request>
  <request method="importElements" experimental="true">
    <p>
      Return a list of edits that would need to be applied in order to ensure
      that all of the elements in the specified list of imported elements are
      accessible within the library.
    </p>
    <p>
      If a request is made for a file that does not exist, or that is not
      currently subject to analysis (e.g. because it is not associated with any
      analysis root specified via analysis.setAnalysisRoots), an error of type
      <tt>IMPORT_ELEMENTS_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which the specified elements are to be made accessible.
        </p>
      </field>
      <field name="elements">
        <list>
          <ref>ImportedElements</ref>
        </list>
        <p>
          The elements to be made accessible in the specified file.
        </p>
      </field>
    </params>
    <result>
      <field name="edits">
        <list>
          <ref>SourceEdit</ref>
        </list>
        <p>
          The edit(s) to be applied in order to make the specified elements
          accessible.
        </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>
<domain name="analytics" experimental="true">
  <p>
    The analytics domain contains APIs related to reporting analytics.
  </p>
  <p>
    This API allows clients to expose a UI option to enable and disable the
    analysis server's reporting of analytics. This value is shared with other
    tools and can change outside of this API; because of this, clients should
    use the analysis server's flag as the system of record. Clients can choose
    to send in additional analytics (see <tt>sendEvent</tt> and
    <tt>sendTiming</tt>) if they so choose. Dart command-line tools provide a
    disclaimer similar to:
    <tt>
      Dart SDK tools anonymously report feature usage statistics and basic crash
      reports to help improve Dart tools over time. See Google's privacy policy:
      https://www.google.com/intl/en/policies/privacy/.
    </tt>
  </p>
  <p>
    The analysis server will send it's own analytics data (for example, operations
    performed, operating system type, SDK version). No data (from the analysis
    server or from clients) will be sent if analytics is disabled.
  </p>
  <request method="isEnabled">
    <p>Query whether analytics is enabled.</p>
    <p>
      This flag controls whether the analysis server sends any analytics data to
      the cloud. If disabled, the analysis server does not send any analytics
      data, and any data sent to it by clients (from <tt>sendEvent</tt> and
      <tt>sendTiming</tt>) will be ignored.
    </p>
    <p>
      The value of this flag can be changed by other tools outside of the
      analysis server's process. When you query the flag, you get the value of
      the flag at a given moment. Clients should not use the value returned to
      decide whether or not to send the <tt>sendEvent</tt> and <tt>sendTiming</tt>
      requests. Those requests should be used unconditionally and server will
      determine whether or not it is appropriate to forward the information to
      the cloud at the time each request is received.
    </p>
    <result>
      <field name="enabled">
        <ref>bool</ref>
        <p>Whether sending analytics is enabled or not.</p>
      </field>
    </result>
  </request>
  <request method="enable">
    <p>
      Enable or disable the sending of analytics data. Note that there are other
      ways for users to change this setting, so clients cannot assume that they
      have complete control over this setting. In particular, there is no
      guarantee that the result returned by the <tt>isEnabled</tt> request will
      match the last value set via this request.
    </p>
    <params>
      <field name="value">
        <ref>bool</ref>
        <p>Enable or disable analytics.</p>
      </field>
    </params>
  </request>
  <request method="sendEvent">
    <p>Send information about client events.</p>
    <p>
      Ask the analysis server to include the fact that an action was performed
      in the client as part of the analytics data being sent. The data will only
      be included if the sending of analytics data is enabled at the time the
      request is processed. The action that was performed is indicated by the
      value of the <tt>action</tt> field.
    </p>
    <p>
      The value of the action field should not include the identity of the
      client. The analytics data sent by server will include the client id
      passed in using the <tt>--client-id</tt> command-line argument. The
      request will be ignored if the client id was not provided when server was
      started.
    </p>
    <params>
      <field name="action">
        <ref>String</ref>
        <p>The value used to indicate which action was performed.</p>
      </field>
    </params>
  </request>
  <request method="sendTiming">
    <p>Send timing information for client events (e.g. code completions).</p>
    <p>
      Ask the analysis server to include the fact that a timed event occurred as
      part of the analytics data being sent. The data will only be included if
      the sending of analytics data is enabled at the time the request is
      processed.
    </p>
    <p>
      The value of the event field should not include the identity of the
      client. The analytics data sent by server will include the client id
      passed in using the <tt>--client-id</tt> command-line argument. The
      request will be ignored if the client id was not provided when server was
      started.
    </p>
    <params>
      <field name="event">
        <ref>String</ref>
        <p>The name of the event.</p>
      </field>
      <field name="millis">
        <ref>int</ref>
        <p>The duration of the event in milliseconds.</p>
      </field>
    </params>
  </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>CLOSING_LABELS</code></value>
      <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="ClosingLabel">
    <p>
      A label that is associated with a range of code that may be useful to render at the end
      of the range to aid code readability. For example, a constructor call that spans multiple
      lines may result in a closing label to allow the constructor type/name to be rendered
      alongside the closing parenthesis.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the construct being labelled.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the whole construct to be labelled.
        </p>
      </field>
      <field name="label">
        <ref>String</ref>
        <p>
          The label associated with this range that should be displayed to the user.
        </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="ImportedElements">
    <p>
      A description of the elements that are referenced in a region of a file
      that come from a single imported library.
    </p>
    <object>
      <field name="path">
        <ref>FilePath</ref>
        <p>
          The absolute and normalized path of the file containing the library.
        </p>
      </field>
      <field name="prefix">
        <ref>String</ref>
        <p>
          The prefix that was used when importing the library into the original
          source.
        </p>
      </field>
      <field name="elements">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The names of the elements imported from the library.
        </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="PostfixTemplateDescriptor">
    <p>
      The description of a postfix completion template.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The template name, shown in the UI.
        </p>
      </field>
      <field name="key">
        <ref>String</ref>
        <p>
          The unique template key, not shown in the UI.
        </p>
      </field>
      <field name="example">
        <ref>String</ref>
        <p>
          A short example of the transformation performed when the template is applied.
        </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_IMPORTED_ELEMENTS_INVALID_FILE</code>
        <p>
          An "analysis.getImportedElements" request specified a FilePath that
          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>IMPORT_ELEMENTS_INVALID_FILE</code>
        <p>
          An "edit.importElements" request specified a FilePath that 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>
