<!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.38.0</version>
</h1>
<p>
  This document contains a specification of the API provided by the
  analysis server. The API in this document is currently under
  development. Changes to the API will be accompanied by an update to the
  protocol version number according to the principles of semantic
  versioning (<a href="https://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 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>
  The server can also communicate to the clients by sending a request. As with
  requests sent from the client, requests from the server have both an 'id' and
  a 'method' field, and an optional 'params' field. The ids used by the server
  are independent of the ids used by the client. In other words, the ids sent by
  the server might be equal to ids already sent from the client, but are
  unrelated to the client request with that same id.
</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>Enumerations</h3>
<p>
  Responses from the server may include enumerations indicating the kind of a
  specific item. The enums may be extended with new values in future versions of
  the server so clients should ensure unknown values are handled gracefully, either
  ignoring the item or treating it with some default/fallback handling.
</p>
<h3>Changelog</h3>
<h4>1.38.0</h4>
<ul>
  <li>Deprecated the <tt>analytics.enable</tt> request.</li>
  <li>Deprecated the <tt>analytics.isEnabled</tt> request.</li>
</ul>
<h4>1.37.0</h4>
<ul>
  <li><tt>SourceEdit</tt> now has an optional human-readable <tt>description</tt> that
  may contain a description of a change.</li>
</ul>
<h4>1.36.0</h4>
<ul>
  <li>
    Added a new <tt>supportsUris</tt> client capability to indicate that <tt>FilePath</tt>s should be URIs instead of file paths.
  </li>
  <li>
    Added an experimental "lsp.handle" request to allow sending LSP requests through the protocol.
  </li>
  <li>
    Added an experimental "lsp.notification" notification to allow receiving LSP notifications.
  </li>
</ul>
<h4>1.35.0</h4>
<ul>
  <li>
    Removed the requests <tt>completion.getSuggestions</tt>,
    <tt>completion.setSubscriptions</tt>, and
    <tt>completion.getSuggestionDetails</tt>. These requests are no longer
    supported and the server will return an error if they are invoked. The
    associated object structures and notifications have also been removed.
  </li>
</ul>
<h4>1.34.0</h4>
<ul>
  <li>
    Added the ability for the server to send requests to the client when the
    client uses <tt>setClientCapabilities</tt> to enable the requests. Also
    added the <tt>openUrlRequest</tt> and <tt>showMessageRequest</tt> requests.
  </li>
</ul>
<h4>1.33.1</h4>
<ul>
  <li><tt>SourceChange</tt> now has an optional <tt>selectionLength</tt> that may be
  provided when <tt>selection</tt> is.</li>
</ul>
<h4>1.33.0</h4>
<ul>
  <li>Requests <tt>getSuggestions2</tt> and <tt>getSuggestionDetails2</tt>
    are enabled.</li>
</ul>
<h4>1.32.10</h4>
<ul>
  <li>The <tt>MOVE_FILE</tt> refactor now supports moving/renaming folders.</li>
</ul>
<h4>1.32.8</h4>
<ul>
  <li>Added <tt>server.cancelRequest</tt> to allow clients to request cancellation
  of outstanding requests.</li>
</ul>
<h4>1.32.7</h4>
<ul>
  <li><tt>HoverInformation.elementDescription</tt> may now include linebreaks to
  improve formatting of functions and methods with many parameters. This is not
  an API change but may be useful as a signal for clients that previously did their
  own formatting.</li>
</ul>
<h4>1.32.6</h4>
<ul>
  <li>Added <tt>FoldingKind.PARAMETERS</tt> for folding regions for parameters
  that span multiple lines.</li>
</ul>
<h4>1.32.5</h4>
<ul>
  <li>Added optional <tt>replacementOffset</tt> and <tt>replacementLength</tt> on
  <tt>CompletionSuggestion</tt> to support different per-completion text replacement
  ranges (for example when inserting names for arguments, a different range may be
  supplied than for completions that are not name labels).</li>
</ul>
<h4>1.32.4</h4>
<ul>
  <li>Added <tt>ElementKind.TYPE_ALIAS</tt> and <tt>HighlightRegionType.TYPE_ALIAS</tt>
    for non-function type aliases.</li>
</ul>
<h4>1.32.3</h4>
<ul>
  <li>Removed the experimental <tt>completion.listTokenDetails</tt> request and
    the associated data types.</li>
</ul>
<h4>1.32.2</h4>
<ul>
  <li>Added <tt>FoldingKind.COMMENT</tt> for folding regions for blocks of
    comments.</li>
</ul>
<h4>1.32.1</h4>
<ul>
  <li>Added <tt>CompletionSuggestionKind.PACKAGE_NAME</tt> for Pub package name
    completions in <tt>pubspec.yaml</tt>.</li>
</ul>
<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>
  <request method="cancelRequest">
    <p>Requests cancellation of a request sent by the client by id.
      This is provided on a best-effort basis and there is no
      guarantee the server will be able to cancel any specific
      request.

      The server will still always produce a response to the request
      even in the case of cancellation, but clients should discard
      any results of any cancelled request because they may be
      incomplete or inaccurate.

      This request always completes without error regardless of
      whether the request is successfully cancelled.</p>
    <params>
      <field name="id">
        <ref>String</ref>
        <p>The id of the request that should be cancelled.</p>
      </field>
    </params>
  </request>
  <request method="setClientCapabilities">
    <p>
      Record the capabilities supported by the client. The default values,
      documented below, will be assumed until this request is received.
    </p>
    <params>
      <field name="requests">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The names of the requests that the server can safely send to the
          client. Only requests whose name is in the list will be sent.
        </p>
        <p>
          A request should only be included in the list if the client will
          unconditionally honor the request.
        </p>
        <p>
          The default, used before this request is received, is an empty list.
        </p>
        <p>
          The following is a list of the names of the requests that can be
          specified:
        </p>
        <ul>
          <li>
            <tt>openUrlRequest</tt>
          </li>
          <li>
            <tt>showMessageRequest</tt>
          </li>
        </ul>
      </field>
      <field name="supportsUris" optional="true">
        <ref>bool</ref>
        <p>
          True if the client supports the server sending URIs in place of file paths.
        </p>
        <p>
          In this mode, the server will use URIs in all protocol fields with the type <tt>FilePath</tt>. Returned URIs may be `file://` URIs or custom schemes. The client can fetch the file contents for URIs with custom schemes (and receive modification events) through the LSP protocol (see the "lsp" domain).
        </p>
        <p>
          LSP notifications are automatically enabled when the client sets this capability.
        </p>
      </field>
    </params>
  </request>
  <request method="openUrlRequest">
    <p><b>Note:</b> This is a request from the server to the client.</p>
    <p>
      Request that a URL be opened.
    </p>
    <p>
      The client is expected to open the URL, either within the client's UI or
      in the default browser.
    </p>
    <p>
      The request will only be sent from the server to the client if the client
      has indicated that it supports this request by using the
      <tt>setClientCapabilities</tt> request.
    </p>
    <params>
      <field name="url">
        <ref>String</ref>
        <p>
          The URL to be opened.
        </p>
      </field>
    </params>
  </request>
  <request method="showMessageRequest">
    <p><b>Note:</b> This is a request from the server to the client.</p>
    <p>
      Request that a message be displayed to the user.
    </p>
    <p>
      The client is expected to display the message to the user with one or more
      buttons with the specified labels, and to return a response consisting of
      the label of the button that was clicked.
    </p>
    <p>
      The request will only be sent from the server to the client if the client
      has indicated that it supports this request by using the
      <tt>setClientCapabilities</tt> request.
    </p>
    <p>
      This request is modeled after the
      <a href="https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_showMessageRequest">
      same request from the LSP specification</a>.
    </p>
    <params>
      <field name="type">
        <ref>MessageType</ref>
        <p>
          The type of the message.
        </p>
      </field>
      <field name="message">
        <ref>String</ref>
        <p>
          The message to be displayed.
        </p>
      </field>
      <field name="actions">
        <list>
          <ref>MessageAction</ref>
        </list>
        <p>
          The labels of the buttons by which the user can dismiss the message.
        </p>
      </field>
    </params>
    <result>
      <field name="action" optional="true">
        <ref>String</ref>
        <p>
          The label of the action that was selected by the user. May be
          omitted or `null` if the user dismissed the message without
          clicking an action button.
        </p>
      </field>
    </result>
  </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>
    </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="log" experimental="true">
    <p>
      The stream of entries describing events happened in the server.
    </p>
    <params>
      <field name="entry">
        <ref>ServerLogEntry</ref>
      </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" deprecated="true">
        <ref>PubStatus</ref>
        <p>
          The current status of pub execution, indicating whether we are
          currently running pub.
        </p>

        <p>
          Note: this status type is deprecated, and is no longer sent by
          the server.
      </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" deprecated="true">
    <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="getSignature" experimental="true">
    <p>
      Return the signature information associated with the given
      location in the given file. If the signature information
      for the given file has not yet been computed, or the most
      recently computed signature information for the given file
      is out of date, then the response for this request will be
      delayed until it has been computed.

      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_SIGNATURE_INVALID_FILE</tt> will be generated.

      If the location given is not inside the argument list for a
      function (including method and constructor) invocation, then
      an error of type <tt>GET_SIGNATURE_INVALID_OFFSET</tt> will
      be generated. If the location is inside an argument list but
      the function is not defined or cannot be determined (such as
      a method invocation where the target has type 'dynamic')
      then an error of type <tt>GET_SIGNATURE_UNKNOWN_FUNCTION</tt>
      will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which signature information is being requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The location for which signature information is being requested.
        </p>
      </field>
    </params>
    <result>
      <field name="name">
        <ref>String</ref>
        <p>The name of the function being invoked at the given offset.</p>
      </field>
      <field name="parameters">
        <list>
          <ref>ParameterInfo</ref>
        </list>
        <p>A list of information about each of the parameters of the function being invoked.</p>
      </field>
      <field name="dartdoc" optional="true">
        <ref>String</ref>
        <p>
          The dartdoc associated with the function being invoked. 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>
    </result>
  </request>
  <request method="reanalyze">
    <p>
      Force re-reading of all potentially changed files, re-resolving of all
      referenced URIs, and corresponding re-analysis of everything affected in
      the current analysis roots.
    </p>
  </request>
  <request method="setAnalysisRoots">
    <p>
      Sets the root paths used to determine which files to analyze. The set
      of files to be analyzed are all of the files in one of the root paths
      that are not either explicitly or implicitly excluded. A file is
      explicitly excluded if it is in one of the excluded paths. A file is
      implicitly excluded if it is in a subdirectory of one of the root
      paths where the name of the subdirectory starts with a period (that
      is, a hidden directory).
    </p>
    <p>
      Note that this request determines the set of requested
      analysis roots. The actual set of analysis roots at any
      given time is the intersection of this set with the set of
      files and directories actually present on the
      filesystem. When the filesystem changes, the actual set of
      analysis roots is automatically updated, but the set of
      requested analysis roots is unchanged. This means that if
      the client sets an analysis root before the root becomes
      visible to server in the filesystem, there is no error; once
      the server sees the root in the filesystem it will start
      analyzing it. Similarly, server will stop analyzing files
      that are removed from the file system but they will remain
      in the set of requested roots.
    </p>
    <p>
      If an included path represents a file, then server will look
      in the directory containing the file for a pubspec.yaml
      file. If none is found, then the parents of the directory
      will be searched until such a file is found or the root of
      the file system is reached. If such a file is found, it will
      be used to resolve package: URI's within the file.
    </p>
    <params>
      <field name="included">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the files and directories that should be
          analyzed.
        </p>
      </field>
      <field name="excluded">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the files and directories within the
          included directories that should not be analyzed.
        </p>
      </field>
      <field name="packageRoots" optional="true">
        <map>
          <key>
            <ref>FilePath</ref>
          </key>
          <value>
            <ref>FilePath</ref>
          </value>
        </map>
        <p>
          A mapping from source directories to package roots
          that should override the normal package: URI resolution
          mechanism.
        </p>
        <p>
          If a package root is a file, then the analyzer
          will behave as though that file is a
          ".dart_tool/package_config.json" 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="getSuggestions2">
    <p>
      Request that completion suggestions for the given offset in the given
      file be returned. The suggestions will be filtered using fuzzy matching
      with the already existing prefix.
    </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>
      <field name="maxResults">
        <ref>int</ref>
        <p>
          The maximum number of suggestions to return. If the number of
          suggestions after filtering is greater than the <tt>maxResults</tt>,
          then <tt>isIncomplete</tt> is set to <tt>true</tt>.
        </p>
      </field>
      <field name="completionCaseMatchingMode" optional="true">
        <ref>CompletionCaseMatchingMode</ref>
        <p>
          The mode of code completion being invoked. If no value is provided,
          <tt>MATCH_FIRST_CHAR</tt> will be assumed.
        </p>
      </field>
      <field name="completionMode" experimental="true" optional="true">
        <ref>CompletionMode</ref>
        <p>
          The mode of code completion being invoked. If no value is provided,
          <tt>BASIC</tt> will be assumed. <tt>BASIC</tt> is also the only
          currently supported.
        </p>
      </field>
      <field name="invocationCount" experimental="true" optional="true">
        <ref>int</ref>
        <p>
          The number of times that the user has invoked code completion at
          the same code location, counting from 1. If no value is provided,
          1 will be assumed.
        </p>
      </field>
      <field name="timeout" experimental="true" optional="true">
        <ref>int</ref>
        <p>
          The approximate time in milliseconds that the server should spend.
          The server will perform some steps anyway, even if it takes longer
          than the specified timeout. This field is intended to be used for
          benchmarking, and usually should not be  provided, so that the
          default timeout is used.
        </p>
      </field>
    </params>
    <result>
      <field name="replacementOffset">
        <ref>int</ref>
        <p>
          The offset of the start of the text to be  replaced. This will be
          different from 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="suggestions">
        <list>
          <ref>CompletionSuggestion</ref>
        </list>
        <p>
          The completion suggestions being reported. This list is filtered
          by the already existing prefix, and sorted first by relevance,
          and (if the same) by the suggestion text. The list will have at
          most <tt>maxResults</tt> items. If the user types a new keystroke,
          the client is expected to either do local filtering (when the
          returned list was complete), or ask the server again (if
          <tt>isIncomplete</tt> was <tt>true</tt>).
        </p>
        <p>
          This list contains suggestions from both imported, and not yet
          imported libraries. Items from not yet imported libraries will
          have <tt>isNotImported</tt> set to <tt>true</tt>.
        </p>
      </field>
      <field name="isIncomplete">
        <ref>bool</ref>
        <p>
          True if the number of suggestions after filtering was greater than
          the requested <tt>maxResults</tt>.
        </p>
      </field>
    </result>
  </request>
  <request method="registerLibraryPaths" deprecated="true">
    <p>
      The client can make this request to express interest in certain
      libraries to receive completion suggestions from based on the client path.
      If this request is received before the client has used
      'completion.setSubscriptions' to subscribe to the <tt>AVAILABLE_SUGGESTION_SETS</tt>
      service, then an error of type <tt>NOT_SUBSCRIBED_TO_AVAILABLE_SUGGESTION_SETS</tt>
      will be generated. All previous paths are replaced by the given set of paths.
    </p>
    <params>
      <field name="paths">
        <list>
          <ref>LibraryPathSet</ref>
        </list>
        <p>
          A list of objects each containing a path and the additional libraries from which
          the client is interested in receiving completion suggestions.
          If one configured path is beneath another, the descendant
          will override the ancestors' configured libraries of interest.
        </p>
      </field>
    </params>
  </request>
  <request method="getSuggestionDetails2">
    <p>
      Clients must make this request when the user has selected a completion
      suggestion with the <tt>isNotImported</tt> field set to <tt>true</tt>.
      The server will respond with the text to insert, as well as any
      <tt>SourceChange</tt> that needs to be applied in case the completion
      requires an additional import to be  added. The text to insert might be
      different from the original suggestion to include an import prefix if the
      library will be imported with a prefix to avoid shadowing
      conflicts in the file.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The path of the file into which this completion is being inserted.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset in the file where the completion will be inserted.
        </p>
      </field>
      <field name="completion">
        <ref>String</ref>
        <p>
          The <tt>completion</tt> from the selected
          <tt>CompletionSuggestion</tt>.  It could be a name of a class, or a
          name of a constructor in form "typeName.constructorName()", or an
          enumeration constant in form "enumName.constantName", etc.
        </p>
      </field>
      <field name="libraryUri">
        <ref>String</ref>
        <p>
          The URI of the library to import, so that the element referenced
          in the <tt>completion</tt> becomes accessible.
        </p>
      </field>
    </params>
    <result>
      <field name="completion">
        <ref>String</ref>
        <p>
          The full text to insert, which possibly includes now an import prefix.
          The client should insert this text, not the <tt>completion</tt> from
          the selected <tt>CompletionSuggestion</tt>.
        </p>
      </field>
      <field name="change">
        <ref>SourceChange</ref>
        <p>
          A change for the client to apply to make the accepted completion
          suggestion available. In most cases the change is to add a new
          import directive to the file.
        </p>
      </field>
    </result>
  </request>
  <notification event="existingImports">
    <p>
      Reports existing imports in a library. This notification may be sent
      multiple times for a library. When a notification is processed, clients
      should replace any previous information for the library.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The defining file of the library.
        </p>
      </field>
      <field name="imports">
        <ref>ExistingImports</ref>
        <p>
          The existing imports in the library.
        </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="getElementDeclarations" experimental="true">
    <p>
      Return top-level and class member declarations.
    </p>
    <params>
      <field name="file" optional="true">
        <ref>FilePath</ref>
        <p>
          If this field is provided, return only declarations in this file.
          If this field is missing, return declarations in all files.
        </p>
      </field>
      <field name="pattern" optional="true">
        <ref>String</ref>
        <p>
          The regular expression used to match the names of declarations.
          If this field is missing, return all declarations.
        </p>
      </field>
      <field name="maxResults" optional="true">
        <ref>int</ref>
        <p>
          The maximum number of declarations to return.
          If this field is missing, return all matching declarations.
        </p>
      </field>
    </params>
    <result>
      <field name="declarations">
        <list>
          <ref>ElementDeclaration</ref>
        </list>
        <p>
          The list of declarations.
        </p>
      </field>
      <field name="files">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The list of the paths of files with declarations.
        </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. This value is ignored if a
          <tt>formatter.page_width</tt> has been configured in the relevant
          <tt>analysis_options.yaml</tt> file.
        </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="formatIfEnabled" experimental="true">
    <p>
      Format the contents of the files in one or more directories, but only if
      the analysis options file for those files has enabled the 'format' option.
    </p>
    <p>
      If any of the specified directories does not exist, that directory will be
      ignored. If any of the files that are eligible for being formatted cannot
      be formatted because of a syntax error in the file, that file will be
      ignored.
    </p>
    <params>
      <field name="directories">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The paths of the directories containing the code to be formatted.
        </p>
      </field>
    </params>
    <result>
      <field name="edits">
        <list>
          <ref>SourceFileEdit</ref>
        </list>
        <p>
          The edit(s) to be applied in order to format the code. The list will
          be empty if none of the files were formatted, whether because they
          were not eligible to be formatted or because they were already
          formatted.
        </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="bulkFixes" experimental="true">
    <p>
      Analyze the specified sources for fixes that can be applied in bulk
      and return a set of suggested edits for those sources.
      These edits may include changes to sources outside the set
      of specified sources if a change in a specified source requires it.
    </p>
    <params>
      <field name="included">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the files and directories for which edits should be
          suggested.
        </p>
        <p>
          If a request is made with a path that is invalid, e.g. is not absolute
          and normalized, an error of type <tt>INVALID_FILE_PATH_FORMAT</tt>
          will be generated. 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>FILE_NOT_ANALYZED</tt> will be generated.
        </p>
      </field>
      <field name="inTestMode" optional="true">
        <ref>bool</ref>
        <p>
          A flag indicating whether the bulk fixes are being run in test mode.
          The only difference is that in test mode the fix processor will look
          for a configuration file that can modify the content of the data file
          used to compute the fixes when data-driven fixes are being considered.
        </p>
        <p>
          If this field is omitted the flag defaults to <tt>false</tt>.
        </p>
      </field>
      <field name="updatePubspec" optional="true">
        <ref>bool</ref>
        <p>
          A flag indicating whether to validate that the dependencies used by the included files are
          listed in the pubspec file. If specified, the fix processor will compute the set of
          packages imported in the source and check to see if they are listed in the corresponding
          pubspec file, and compute the fixes, if any.
        </p>
        <p>
          If this field is omitted the flag defaults to <tt>false</tt>.
        </p>
      </field>
      <field name="codes" optional="true">
        <list>
          <ref>String</ref>
        </list>
        <p>
          A list of diagnostic codes to be fixed.
        </p>
      </field>
    </params>
    <result>
      <field name="message">
        <p>
          An optional message explaining unapplied fixes.
        </p>
        <ref>String</ref>
      </field>
      <field name="edits">
        <list>
          <ref>SourceFileEdit</ref>
        </list>
        <p>
          A list of source edits to apply the recommended changes.
        </p>
      </field>
      <field name="details">
        <list>
          <ref>BulkFix</ref>
        </list>
        <p>
          Details that summarize the fixes associated with the recommended
          changes.
        </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>
    <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_FIXES_INVALID_FILE</tt> will be generated.
    </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">
    <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>
      <field name="offset" optional="true">
        <ref>int</ref>
        <p>
          The offset at which the specified elements need to be made accessible.
          If provided, this is used to guard against adding imports for text
          that would be inserted into a comment, string literal, or other
          location where the imports would not be necessary.
        </p>
      </field>
    </params>
    <result>
      <field name="edit" optional="true">
        <ref>SourceFileEdit</ref>
        <p>
          The edits to be applied in order to make the specified elements
          accessible. The file to be edited will be the defining compilation
          unit of the library containing the file specified in the request,
          which can be different than the file specified in the request if the
          specified file is a part file. This field will be omitted if there are
          no edits that need to be applied.
        </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://dart.dev/guides/language/effective-dart/style">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="getSuggestions">
    <p>
      Request completion suggestions for the given runtime context.
    </p>
    <p>
      It might take one or two requests of this type to get completion
      suggestions. The first request should have only "code", "offset",
      and "variables", but not "expressions". If there are sub-expressions that
      can have different runtime types, and are considered to be safe to
      evaluate at runtime (e.g. getters), so using their actual runtime types
      can improve completion results, the server will not include the
      "suggestions" field in the response, and instead will return the
      "expressions" field. The client will use debug API to get current runtime
      types for these sub-expressions and send another request, this time with
      "expressions". If there are no interesting sub-expressions to get
      runtime types for, or when the "expressions" field is provided by the
      client, the server will return "suggestions" in the response.
    </p>
    <params>
      <field name="code">
        <ref>String</ref>
        <p>
          The code to get suggestions in.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset within the code to get suggestions at.
        </p>
      </field>
      <field name="contextFile">
        <ref>FilePath</ref>
        <p>
          The path of the context file, e.g. the file of the current debugger
          frame. The combination of the context file and context offset can
          be used to ensure that all variables of the context are available
          for completion (with their static types).
        </p>
      </field>
      <field name="contextOffset">
        <ref>int</ref>
        <p>
          The offset in the context file, e.g. the line offset in the current
          debugger frame.
        </p>
      </field>
      <field name="variables">
        <list>
          <ref>RuntimeCompletionVariable</ref>
        </list>
        <p>
          The runtime context variables that are potentially referenced in the
          code.
        </p>
      </field>
      <field name="expressions" optional="true">
        <list>
          <ref>RuntimeCompletionExpression</ref>
        </list>
        <p>
          The list of sub-expressions in the code for which the client wants
          to provide runtime types. It does not have to be the full list of
          expressions requested by the server, for missing expressions their
          static types will be used.
        </p>
        <p>
          When this field is omitted, the server will return completion
          suggestions only when there are no interesting sub-expressions in the
          given code. The client may provide an empty list, in this case the
          server will return completion suggestions.
        </p>
      </field>
    </params>
    <result>
      <field name="suggestions" optional="true">
        <list>
          <ref>CompletionSuggestion</ref>
        </list>
        <p>
          The completion suggestions. In contrast to usual completion request,
          suggestions for private elements also will be provided.
        </p>
        <p>
          If there are sub-expressions that can have different runtime types,
          and are considered to be safe to evaluate at runtime (e.g. getters),
          so using their actual runtime types can improve completion results,
          the server omits this field in the response, and instead will return
          the "expressions" field.
        </p>
      </field>
      <field name="expressions" optional="true">
        <list>
          <ref>RuntimeCompletionExpression</ref>
        </list>
        <p>
          The list of sub-expressions in the code for which the server would
          like to know runtime types to provide better completion suggestions.
        </p>
        <p>
          This field is omitted the field "suggestions" is returned.
        </p>
      </field>
    </result>
  </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" deprecated="true">
    <p><b>Deprecated:</b> this flag is no longer supported.</p>
    <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" deprecated="true">
    <p><b>Deprecated:</b> this option is no longer supported.</p>
    <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>
<domain name="flutter">
  <p>
    The analysis domain contains API's related to Flutter support.
  </p>
  <request method="getWidgetDescription" experimental="true">
    <p>
      Return the description of the widget instance at the given location.
    </p>
    <p>
      If the location does not have a support widget, an error of type
      <tt>FLUTTER_GET_WIDGET_DESCRIPTION_NO_WIDGET</tt> will be generated.
    </p>
    <p>
      If a change to a file happens while widget descriptions are computed,
      an error of type <tt>FLUTTER_GET_WIDGET_DESCRIPTION_CONTENT_MODIFIED</tt>
      will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file where the widget instance is created.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset in the file where the widget instance is created.
        </p>
      </field>
    </params>
    <result>
      <field name="properties">
        <list>
          <ref>FlutterWidgetProperty</ref>
        </list>
        <p>
          The list of properties of the widget. Some of the properties might be
          read only, when their <tt>editor</tt> is not set. This might be
          because they have type that we don't know how to edit, or for
          compound properties that work as containers for sub-properties.
        </p>
      </field>
    </result>
  </request>
  <request method="setWidgetPropertyValue" experimental="true">
    <p>
      Set the value of a property, or remove it.
    </p>
    <p>
      The server will generate a change that the client should apply to the
      project to get the value of the property set to the new value.
      The complexity of the change might be from updating a single literal
      value in the code, to updating multiple files to get libraries imported,
      and new intermediate widgets instantiated.
    </p>
    <params>
      <field name="id">
        <ref>int</ref>
        <p>
          The identifier of the property, previously returned as a part of
          a <tt>FlutterWidgetProperty</tt>.
        </p>
        <p>
          An error of type <tt>FLUTTER_SET_WIDGET_PROPERTY_VALUE_INVALID_ID</tt>
          is generated if the identifier is not valid.
        </p>
      </field>
      <field name="value" optional="true">
        <ref>FlutterWidgetPropertyValue</ref>
        <p>
          The new value to set for the property.
        </p>
        <p>
          If absent, indicates that the property should be removed. If the
          property corresponds to an optional parameter, the corresponding
          named argument is removed. If the property <tt>isRequired</tt> is
          true, <tt>FLUTTER_SET_WIDGET_PROPERTY_VALUE_IS_REQUIRED</tt> error
          is generated.
        </p>
        <p>
          If the <tt>expression</tt> is not a syntactically valid Dart code,
          then <tt>FLUTTER_SET_WIDGET_PROPERTY_VALUE_INVALID_EXPRESSION</tt>
          is reported.
        </p>
      </field>
    </params>
    <result>
      <field name="change">
        <ref>SourceChange</ref>
        <p>
          The change that should be applied.
        </p>
      </field>
    </result>
  </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>FlutterService</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>
  <notification event="outline">
    <p>
      Reports the Flutter 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 flutter.setSubscriptions
      request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file with which the outline is associated.
        </p>
      </field>
      <field name="outline">
        <ref>FlutterOutline</ref>
        <p>
          The outline associated with the file.
        </p>
      </field>
    </params>
  </notification>
</domain>
<domain name="lsp" experimental="true">
  <p>
    The LSP domain contains API's for interacting with LSP handlers.
  </p>
  <request method="handle" experimental="true">
    <p>
      Call an LSP handler. Message can be requests or notifications.
    </p>
    <params>
      <field name="lspMessage">
        <p>
          The LSP RequestMessage.
        </p>
        <ref>object</ref>
      </field>
    </params>
    <result>
      <field name="lspResponse">
        <p>
          The LSP ResponseMessage returned by the handler.
        </p>
        <ref>object</ref>
      </field>
    </result>
  </request>
  <notification event="notification">
    <p>
      Reports an LSP notification from the server.
    </p>
    <params>
      <field name="lspNotification">
        <p>
          The LSP NotificationMessage sent by the server.
        </p>
        <ref>object</ref>
      </field>
    </params>
  </notification>
</domain>
<types>
  <h2 class="domain"><a name="types">Types</a></h2>
  <p>
    This section contains descriptions of the data types referenced
    in the API's of the various domains.
  </p>
  <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="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="BulkFix">
    <p>
      A description of bulk fixes to a library.
    </p>
    <object>
      <field name="path">
        <ref>FilePath</ref>
        <p>
          The path of the library.
        </p>
      </field>
      <field name="fixes">
        <list>
          <ref>BulkFixDetail</ref>
        </list>
        <p>
          A list of bulk fix details.
        </p>
      </field>
    </object>
  </type>
  <type name="BulkFixDetail">
    <p>
      A description of a fix applied to a library.
    </p>
    <object>
      <field name="code">
        <ref>String</ref>
        <p>
          The code of the diagnostic associated with the fix.
        </p>
      </field>
      <field name="occurrences">
        <ref>int</ref>
        <p>
          The number times the associated diagnostic was fixed in the associated
          source edit.
        </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="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="ElementDeclaration">
    <p>
      A declaration - top-level (class, field, etc) or a class member (method,
      field, etc).
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the declaration.
        </p>
      </field>
      <field name="kind">
        <ref>ElementKind</ref>
        <p>
          The kind of the element that corresponds to the declaration.
        </p>
      </field>
      <field name="fileIndex">
        <ref>int</ref>
        <p>
          The index of the file (in the enclosing response).
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the declaration name in the file.
        </p>
      </field>
      <field name="line">
        <ref>int</ref>
        <p>
          The one-based index of the line containing the declaration name.
        </p>
      </field>
      <field name="column">
        <ref>int</ref>
        <p>
          The one-based index of the column containing the declaration name.
        </p>
      </field>
      <field name="codeOffset">
        <ref>int</ref>
        <p>
          The offset of the first character of the declaration code in the file.
        </p>
      </field>
      <field name="codeLength">
        <ref>int</ref>
        <p>
          The length of the declaration code in the file.
        </p>
      </field>
      <field name="className" optional="true">
        <ref>String</ref>
        <p>
          The name of the class enclosing this declaration. If the declaration
          is not a class member, this field will be absent.
        </p>
      </field>
      <field name="mixinName" optional="true">
        <ref>String</ref>
        <p>
          The name of the mixin enclosing this declaration. If the declaration
          is not a mixin member, this field will be absent.
        </p>
      </field>
      <field name="parameters" optional="true">
        <ref>String</ref>
        <p>
          The parameter list for the element. If the element is not a method or
          function this field will not be defined. If the element doesn't have
          parameters (e.g. getter), this field will not be defined. If the
          element has zero parameters, this field will have a value of "()".

          The value should not be treated as exact presentation of parameters,
          it is just approximation of parameters to give the user general idea.
        </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="ExistingImport">
    <p>
      Information about an existing import, with elements that it provides.
    </p>
    <object>
      <field name="uri">
        <ref>int</ref>
        <p>
          The URI of the imported library.
          It is an index in the <tt>strings</tt> field, in the enclosing
          <tt>ExistingImports</tt> and its <tt>ImportedElementSet</tt> object.
        </p>
      </field>
      <field name="elements">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The list of indexes of elements, in the enclosing
          <tt>ExistingImports</tt> object.
        </p>
      </field>
    </object>
  </type>
  <type name="ExistingImports">
    <p>
      Information about all existing imports in a library.
    </p>
    <object>
      <field name="elements">
        <ref>ImportedElementSet</ref>
        <p>
          The set of all unique imported elements for all imports.
        </p>
      </field>
      <field name="imports">
        <list>
          <ref>ExistingImport</ref>
        </list>
        <p>
          The list of imports in the library.
        </p>
      </field>
    </object>
  </type>
  <type name="ImportedElementSet">
    <p>
      The set of top-level elements encoded as pairs of the defining library
      URI and the name, and stored in the parallel lists <tt>elementUris</tt>
      and <tt>elementNames</tt>.
    </p>
    <object>
      <field name="strings">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The list of unique strings in this object.
        </p>
      </field>
      <field name="uris">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The library URI part of the element.
          It is an index in the <tt>strings</tt> field.
        </p>
      </field>
      <field name="names">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The name part of a the element.
          It is an index in the <tt>strings</tt> field.
        </p>
      </field>
    </object>
  </type>
  <type name="LibraryPathSet">
    <p>
      A list of associations between paths and the libraries that should be
      included for code completion when editing a file beneath that path.
    </p>
    <object>
      <field name="scope">
        <ref>FilePath</ref>
        <p>
          The filepath for which this request's libraries should be active
          in completion suggestions. This object associates filesystem regions
          to libraries and library directories of interest to the client.
        </p>
      </field>
      <field name="libraryPaths">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The paths of the libraries of interest to the client for completion suggestions.
        </p>
      </field>
    </object>
  </type>
  <type name="CompletionMode">
    <p>
      An enumeration of the kinds of code completion that users can invoke.
    </p>
    <enum>
      <value>
        <code>BASIC</code>
        <p>
          Basic code completion invocation type, and the default for this
          enumeration.
        </p>
      </value>
      <value>
        <code>SMART</code>
        <p>
          Smart code completion, currently not implemented.
        </p>
      </value>
    </enum>
  </type>
  <type name="CompletionCaseMatchingMode">
    <p>
      An enumeration of the character case matching modes that the user may set in the client.
    </p>
    <enum>
      <value>
        <code>FIRST_CHAR</code>
        <p>
          Match the first character case only when filtering completions, the default for this
          enumeration.
        </p>
      </value>
      <value>
        <code>ALL_CHARS</code>
        <p>
          Match all character cases when filtering completion lists.
        </p>
      </value>
      <value>
        <code>NONE</code>
        <p>
          Do not match character cases when filtering completion lists.
        </p>
      </value>
    </enum>
  </type>
  <type name="MessageAction">
    <p>
      An action associated with a message that the server is requesting the
      client to display to the user.
    </p>
    <object>
      <field name="label">
        <ref>String</ref>
        <p>
          The label of the button to be displayed, and the value to be returned
          to the server if the button is clicked.
        </p>
      </field>
    </object>
  </type>
  <type name="MessageType">
    <p>
      The type of a message that the server is requesting the client to display
      to the user. The type can be used by the client to control the way in
      which the message is displayed.
    </p>
    <enum>
      <value>
        <code>ERROR</code>
        <p>
          The message is an error message.
        </p>
      </value>
      <value>
        <code>WARNING</code>
        <p>
          The message is a warning message.
        </p>
      </value>
      <value>
        <code>INFO</code>
        <p>
          The message is an informational message.
        </p>
      </value>
      <value>
        <code>LOG</code>
        <p>
          The message is a log message.
        </p>
      </value>
    </enum>
  </type>
  <type name="RuntimeCompletionExpression">
    <p>
      An expression for which we want to know its runtime type.
      In expressions like 'a.b.c.where((e) => e.^)' we want to know the
      runtime type of 'a.b.c' to enforce it statically at the time when we
      compute completion suggestions, and get better type for 'e'.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the expression in the code for completion.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the expression in the code for completion.
        </p>
      </field>
      <field name="type" optional="true">
        <ref>RuntimeCompletionExpressionType</ref>
        <p>
          When the expression is sent from the server to the client, the
          type is omitted. The client should fill the type when it sends the
          request to the server again.
        </p>
      </field>
    </object>
  </type>
  <type name="RuntimeCompletionVariable">
    <p>
      A variable in a runtime context.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the variable.
          The name "this" has a special meaning and is used as an implicit
          target for runtime completion, and in explicit "this" references.
        </p>
      </field>
      <field name="type">
        <ref>RuntimeCompletionExpressionType</ref>
        <p>
          The type of the variable.
        </p>
      </field>
    </object>
  </type>
  <type name="RuntimeCompletionExpressionType">
    <p>
      A type at runtime.
    </p>
    <object>
      <field name="libraryPath" optional="true">
        <ref>FilePath</ref>
        <p>
          The path of the library that has this type.
          Omitted if the type is not declared in any library, e.g. "dynamic",
          or "void".
        </p>
      </field>
      <field name="kind">
        <ref>RuntimeCompletionExpressionTypeKind</ref>
        <p>
          The kind of the type.
        </p>
      </field>
      <field name="name" optional="true">
        <ref>String</ref>
        <p>
          The name of the type. Omitted if the type does not have a name, e.g.
          an inline function type.
        </p>
      </field>
      <field name="typeArguments" optional="true">
        <list>
          <ref>RuntimeCompletionExpressionType</ref>
        </list>
        <p>
          The type arguments of the type.
          Omitted if the type does not have type parameters.
        </p>
      </field>
      <field name="returnType" optional="true">
        <ref>RuntimeCompletionExpressionType</ref>
        <p>
          If the type is a function type, the return type of the function.
          Omitted if the type is not a function type.
        </p>
      </field>
      <field name="parameterTypes" optional="true">
        <list>
          <ref>RuntimeCompletionExpressionType</ref>
        </list>
        <p>
          If the type is a function type, the types of the function parameters
          of all kinds - required, optional positional, and optional named.
          Omitted if the type is not a function type.
        </p>
      </field>
      <field name="parameterNames" optional="true">
        <list>
          <ref>String</ref>
        </list>
        <p>
          If the type is a function type, the names of the function parameters
          of all kinds - required, optional positional, and optional named.
          The names of positional parameters are empty strings.
          Omitted if the type is not a function type.
        </p>
      </field>
    </object>
  </type>
  <type name="RuntimeCompletionExpressionTypeKind">
    <p>
      An enumeration of the kinds of runtime expression types.
    </p>
    <enum>
      <value><code>DYNAMIC</code></value>
      <value><code>FUNCTION</code></value>
      <value><code>INTERFACE</code></value>
    </enum>
  </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="FlutterWidgetProperty">
    <p>
      A property of a Flutter widget.
    </p>
    <object>
      <field name="documentation" optional="true">
        <ref>String</ref>
        <p>
          The documentation of the property to show to the user. Omitted if
          the server does not know the documentation, e.g. because the
          corresponding field is not documented.
        </p>
      </field>
      <field name="expression" optional="true">
        <ref>String</ref>
        <p>
          If the value of this property is set, the Dart code of the expression
          of this property.
        </p>
      </field>
      <field name="id">
        <ref>int</ref>
        <p>
          The unique identifier of the property, must be passed back to the
          server when updating the property value. Identifiers become invalid
          on any source code change.
        </p>
      </field>
      <field name="isRequired">
        <ref>bool</ref>
        <p>
          True if the property is required, e.g. because it corresponds to
          a required parameter of a constructor.
        </p>
      </field>
      <field name="isSafeToUpdate">
        <ref>bool</ref>
        <p>
          If the property expression is a concrete value (e.g. a literal, or
          an enum constant), then it is safe to replace the expression with
          another concrete value. In this case this field is true. Otherwise,
          for example when the expression is a reference to a field, so that
          its value is provided from outside, this field is false.
        </p>
      </field>
      <field name="name">
        <ref>String</ref>
        <p>The name of the property to display to the user.</p>
      </field>
      <field name="children" optional="true">
        <list>
          <ref>FlutterWidgetProperty</ref>
        </list>
        <p>
          The list of children properties, if any. For example any property of
          type <tt>EdgeInsets</tt> will have four children properties of type
          <tt>double</tt> - left / top / right / bottom.
        </p>
      </field>
      <field name="editor" optional="true">
        <ref>FlutterWidgetPropertyEditor</ref>
        <p>
          The editor that should be used by the client. This field is omitted
          if the server does not know the editor for this property, for example
          because it does not have one of the supported types.
        </p>
      </field>
      <field name="value" optional="true">
        <ref>FlutterWidgetPropertyValue</ref>
        <p>
          If the expression is set, and the server knows the value of the
          expression, this field is set.
        </p>
      </field>
    </object>
  </type>
  <type name="FlutterWidgetPropertyEditor">
    <p>
      An editor for a property of a Flutter widget.
    </p>
    <object>
      <field name="kind">
        <ref>FlutterWidgetPropertyEditorKind</ref>
      </field>
      <field name="enumItems" optional="true">
        <list>
          <ref>FlutterWidgetPropertyValueEnumItem</ref>
        </list>
      </field>
    </object>
  </type>
  <type name="FlutterWidgetPropertyEditorKind">
    <p>
      An enumeration of the kinds of property editors.
    </p>
    <enum>
      <value>
        <code>BOOL</code>
        <p>
          The editor for a property of type <tt>bool</tt>.
        </p>
      </value>
      <value>
        <code>DOUBLE</code>
        <p>
          The editor for a property of the type <tt>double</tt>.
        </p>
      </value>
      <value>
        <code>ENUM</code>
        <p>
          The editor for choosing an item of an enumeration, see the
          <tt>enumItems</tt> field of <tt>FlutterWidgetPropertyEditor</tt>.
        </p>
      </value>
      <value>
        <code>ENUM_LIKE</code>
        <p>
          The editor for either choosing a pre-defined item from a list of
          provided static field references (like <tt>ENUM</tt>), or specifying
          a free-form expression.
        </p>
      </value>
      <value>
        <code>INT</code>
        <p>
          The editor for a property of type <tt>int</tt>.
        </p>
      </value>
      <value>
        <code>STRING</code>
        <p>
          The editor for a property of the type <tt>String</tt>.
        </p>
      </value>
    </enum>
  </type>
  <type name="FlutterWidgetPropertyValue">
    <p>
      A value of a property of a Flutter widget.
    </p>
    <object>
      <field name="boolValue" optional="true">
        <ref>bool</ref>
      </field>
      <field name="doubleValue" optional="true">
        <ref>double</ref>
      </field>
      <field name="intValue" optional="true">
        <ref>int</ref>
      </field>
      <field name="stringValue" optional="true">
        <ref>String</ref>
      </field>
      <field name="enumValue" optional="true">
        <ref>FlutterWidgetPropertyValueEnumItem</ref>
      </field>
      <field name="expression" optional="true">
        <ref>String</ref>
        <p>
          A free-form expression, which will be used as the value as is.
        </p>
      </field>
    </object>
  </type>
  <type name="FlutterWidgetPropertyValueEnumItem">
    <p>
      An item of an enumeration in a general sense - actual <tt>enum</tt>
      value, or a static field in a class.
    </p>
    <object>
      <field name="libraryUri">
        <ref>String</ref>
        <p>
          The URI of the library containing the <tt>className</tt>. When the
          enum item is passed back, this will allow the server to import the
          corresponding library if necessary.
        </p>
      </field>
      <field name="className">
        <ref>String</ref>
        <p>
          The name of the class or enum.
        </p>
      </field>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the field in the enumeration, or the static field in the
          class.
        </p>
      </field>
      <field name="documentation" optional="true">
        <ref>String</ref>
        <p>
          The documentation to show to the user. Omitted if the server does not
          know the documentation, e.g. because the corresponding field is not
          documented.
        </p>
      </field>
    </object>
  </type>
  <type name="FlutterService">
    <p>
      An enumeration of the services provided by the flutter domain that
      are related to a specific list of files.
    </p>
    <enum>
      <value><code>OUTLINE</code></value>
    </enum>
  </type>
  <type name="FlutterOutline">
    <p>
      An node in the Flutter specific outline structure of a file.
    </p>
    <object>
      <field name="kind">
        <ref>FlutterOutlineKind</ref>
        <p>The kind of the node.</p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the first character of the element. This is different
          than the offset in the Element, which is the offset of the name of the
          element. It can be used, for example, to map locations in the file
          back to an outline.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the element.
        </p>
      </field>
      <field name="codeOffset">
        <ref>int</ref>
        <p>
          The offset of the first character of the element code, which is
          neither documentation, nor annotation.
        </p>
      </field>
      <field name="codeLength">
        <ref>int</ref>
        <p>
          The length of the element code.
        </p>
      </field>
      <field name="label" optional="true">
        <ref>String</ref>
        <p>
          The text label of the node children of the node.
          It is provided for any FlutterOutlineKind.GENERIC node,
          where better information is not available.
        </p>
      </field>
      <field name="dartElement" optional="true">
        <ref>Element</ref>
        <p>
          If this node is a Dart element, the description of it; omitted
          otherwise.
        </p>
      </field>
      <field name="attributes" optional="true">
        <list>
          <ref>FlutterOutlineAttribute</ref>
        </list>
        <p>
          Additional attributes for this node, which might be interesting
          to display on the client. These attributes are usually arguments
          for the instance creation or the invocation that created the widget.
        </p>
      </field>
      <field name="className" optional="true">
        <ref>String</ref>
        <p>
          If the node creates a new class instance, or a reference to an
          instance, this field has the name of the class.
        </p>
      </field>
      <field name="parentAssociationLabel" optional="true">
        <ref>String</ref>
        <p>
          A short text description how this node is associated with the parent
          node. For example "appBar" or "body" in Scaffold.
        </p>
      </field>
      <field name="variableName" optional="true">
        <ref>String</ref>
        <p>
          If FlutterOutlineKind.VARIABLE, the name of the variable.
        </p>
      </field>
      <field name="children" optional="true">
        <list>
          <ref>FlutterOutline</ref>
        </list>
        <p>
          The children of the node. The field will be omitted if the node has no
          children.
        </p>
      </field>
    </object>
  </type>
  <type name="FlutterOutlineAttribute">
    <p>
      An attribute for a FlutterOutline.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the attribute.
        </p>
      </field>
      <field name="label">
        <ref>String</ref>
        <p>
          The label of the attribute value, usually the Dart code.
          It might be quite long, the client should abbreviate as needed.
        </p>
      </field>
      <field name="literalValueBoolean" optional="true">
        <ref>bool</ref>
        <p>
          The boolean literal value of the attribute.
          This field is absent if the value is not a boolean literal.
        </p>
      </field>
      <field name="literalValueInteger" optional="true">
        <ref>int</ref>
        <p>
          The integer literal value of the attribute.
          This field is absent if the value is not an integer literal.
        </p>
      </field>
      <field name="literalValueString" optional="true">
        <ref>String</ref>
        <p>
          The string literal value of the attribute.
          This field is absent if the value is not a string literal.
        </p>
      </field>
      <field name="nameLocation" optional="true">
        <ref>Location</ref>
        <p>
          If the attribute is a named argument, the location of the name,
          without the colon.
        </p>
      </field>
      <field name="valueLocation" optional="true">
        <ref>Location</ref>
        <p>
          The location of the value.
        </p>
        <p>
          This field is always available, but marked optional for backward
          compatibility between new clients with older servers.
        </p>
      </field>
    </object>
  </type>
  <type name="FlutterOutlineKind">
    <p>
      An enumeration of the kinds of FlutterOutline elements. The list of kinds
      might be expanded with time, clients must be able to handle new kinds
      in some general way.
    </p>
    <enum>
      <value>
        <code>DART_ELEMENT</code>
        <p>A dart element declaration.</p>
      </value>
      <value>
        <code>GENERIC</code>
        <p>A generic Flutter element, without additional information.</p>
      </value>
      <value>
        <code>NEW_INSTANCE</code>
        <p>A new instance creation.</p>
      </value>
      <value>
        <code>INVOCATION</code>
        <p>An invocation of a method, a top-level function, a function
          expression, etc.</p>
      </value>
      <value>
        <code>VARIABLE</code>
        <p>A reference to a local variable, or a field.</p>
      </value>
      <value>
        <code>PLACEHOLDER</code>
        <p>The parent node has a required Widget. The node works as a
          placeholder child to drop a new Widget to.</p>
      </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 URI of the containing library, examples here include
          "dart:core", "package:.." and file uris represented by the
          path on disk, "/..". The data is omitted 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>FLUTTER_GET_WIDGET_DESCRIPTION_CONTENT_MODIFIED</code>
        <p>
          A file was change while widget descriptions were being computed.
        </p>
      </value>
      <value>
        <code>FLUTTER_GET_WIDGET_DESCRIPTION_NO_WIDGET</code>
        <p>
          The given location does not have a supported widget.
        </p>
      </value>
      <value>
        <code>FLUTTER_SET_WIDGET_PROPERTY_VALUE_INVALID_EXPRESSION</code>
        <p>
          The given property expression is invalid, e.g. has a syntax error.
        </p>
      </value>
      <value>
        <code>FLUTTER_SET_WIDGET_PROPERTY_VALUE_INVALID_ID</code>
        <p>
          The given property identifier is not valid. It might have never been
          valid, or a change to code invalidated it, or its TTL was exceeded.
        </p>
      </value>
      <value>
        <code>FLUTTER_SET_WIDGET_PROPERTY_VALUE_IS_REQUIRED</code>
        <p>
          The value of the property cannot be removed, for example because
          the corresponding constructor argument is required, and the server
          does not know what default value to use.
        </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_FIXES_INVALID_FILE</code>
        <p>
          An "edit.getFixes" 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>GET_SIGNATURE_INVALID_FILE</code>
        <p>
          An "analysis.getSignature" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </value>
      <value>
        <code>GET_SIGNATURE_INVALID_OFFSET</code>
        <p>
          An "analysis.getSignature" request specified an offset
          which is not a valid location within for the contents of
          the file specified FilePath.
        </p>
      </value>
      <value>
        <code>GET_SIGNATURE_UNKNOWN_FUNCTION</code>
        <p>
          An "analysis.getSignature" request specified an offset
          that could not be matched to a function call.
        </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>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>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>LOG</code></value>
      <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 into 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>
  <type name="ServerLogEntry" experimental="true">
    <p>
      A log entry from the server.
    </p>
    <object>
      <field name="time">
        <ref>int</ref>
        <p>
          The time (milliseconds since epoch) at which the server created
          this log entry.
        </p>
      </field>
      <field name="kind" >
        <ref>ServerLogEntryKind</ref>
        <p>
          The kind of the entry, used to determine how to interpret the "data"
          field.
        </p>
      </field>
      <field name="data">
        <ref>String</ref>
        <p>
          The payload of the entry, the actual format is determined by the
          "kind" field.
        </p>
      </field>
    </object>
  </type>
  <type name="ServerLogEntryKind" experimental="true">
    <p>
      An enumeration of the kinds of server long entries.
    </p>
    <enum>
      <value>
        <code>NOTIFICATION</code>
        <p>
          A notification from the server, such as "analysis.highlights".
          The "data" field contains a JSON object with abbreviated notification.
        </p>
      </value>
      <value>
        <code>RAW</code>
        <p>
          Arbitrary string, describing some event that happened in the server,
          e.g. starting a file analysis, and details which files were accessed.
          These entries are not structured, but provide context information
          about requests and notification, and can be related by "time" for
          further manual analysis.
        </p>
      </value>
      <value>
        <code>REQUEST</code>
        <p>
          A request from the client, as the server views it, e.g.
          "edit.getAssists". The "data" field contains a JSON object with
          abbreviated request.
        </p>
      </value>
      <value>
        <code>RESPONSE</code>
        <p>
          Various counters and measurements related to execution of a request.
          The "data" field contains a JSON object with following fields:
        </p>
        <ul>
          <li>
            "id" - the id of the request - copied from the request.
          </li>
          <li>
            "method" - the method of the request, e.g. "edit.getAssists".
          </li>
          <li>
            "clientRequestTime" - the time (milliseconds since epoch) at which
            the client made the request - copied from the request.
          </li>
          <li>
            "serverRequestTime" - the time (milliseconds since epoch) at which
            the server received and decoded the JSON request.
          </li>
          <li>
            "responseTime" - the time (milliseconds since epoch) at which the
            server created the response to be encoded into JSON and sent to the
            client.
          </li>
        </ul>
      </value>
    </enum>
  </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="EXTRACT_WIDGET">
    <p>
      Create a new class that extends StatelessWidget, whose build() method is
      the widget creation expression, or a method returning a Flutter widget,
      at the specified offset.
    </p>
    <feedback>
    </feedback>
    <options>
      <field name="name">
        <ref>String</ref>
        <p>
          The name that the widget class should be given.
        </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 or folder and update all of the references to
      and from it. The move operation is supported in general case -
      for renaming an item in the same folder, moving it to a different
      folder or both.

      Moving or renaming large folders may take time and clients should
      consider showing an indicator to the user with the ability to
      cancel the request (which can be done using
      <tt>server.cancelRequest</tt>).
    </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, or -1 if the name does not exist yet.
        </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>
