<!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.14.0</version></h1>
    <p>
      This document contains a specification of the API provided by the
      analysis server.  The API in this document is currently under
      development.  Changes to the API will be accompanied by an update to the
      protocol version number according to the principles of semantic
      versioning <a href="http://semver.org/">http://semver.org/</a>.
    </p>
    <h2>Overview</h2>
    <p>
      The analysis server API is a bi-directional client-server
      API. The API is independent of the transport mechanism used, but
      is heavily influenced by a model in which sockets or character
      streams are used to transport JSON-RPC encoded information.
    </p>
    <h3>Transport Mechanism</h3>
    <p>
      The characters passed to the server are expected to be encoded
      using UTF-8.
    </p>
    <p>
      When character streams are used as the transport, messages are
      delineated by newlines. This means, in particular, that the JSON
      encoding process must not introduce newlines within a
      message. Note however that newlines are used in this document
      for readability.
    </p>
    <p>
      It is the client's responsibility to read output from the server to
      avoid its blocking.
    </p>
    <p>
      To ease interoperability with Lisp-based clients (which may not
      be able to easily distinguish between empty lists, empty maps,
      and null), client-to-server communication is allowed to replace
      any instance of “<tt>{}</tt>” or “<tt>[]</tt>” with null. The
      server will always properly represent empty lists as
      “<tt>[]</tt>” and empty maps as “<tt>{}</tt>”.
    </p>
    <h3>Communication Structure</h3>
    <p>
      Clients can make a request of the server and the server will
      provide a response for each request that it receives. While many
      of the requests that can be made by a client are informational
      in nature, we have chosen to always return a response so that
      clients can know whether the request was received and was
      correct.
    </p>
    <p>
      There is no guarantee concerning the order in which responses
      will be returned, but there is a guarantee that the server will
      process requests in the order in which they are sent as long as
      the transport mechanism also makes this guarantee. Responses can
      be returned in an order that is different from the order in
      which the requests were received because some requests take
      longer to process than others.
    </p>
    <p>
      Every request is required to have two fields and may have two
      additional optional fields. The first required field is the ‘id’
      field, which is only used by the server to associate a response
      with the request that generated the response. The second
      required field is the ‘method’ field, which is used to determine
      what the server is being requested to do. One optional field is
      the ‘params’ field, whose structure is dependent on the method
      being requested. The structure of this field is described with
      each request for which it is required. The other optional field
      is the 'clientRequestTime' field, which is a number indicating
      the time at which the client made the request (milliseconds
      since epoch). Providing clientRequestTime helps us track
      how responsive analysis server is to client requests
      and better address any issues that occur.
    </p>
    <p>
      Every response has up to three fields. The first field is the
      ‘id’ field, which is always present and whose value is the
      identifier that was passed to the request that generated the
      response. The second field is the ‘error’ field, which is only
      present if an error was encountered while processing the
      request. The third field is the ‘result’ field, whose structure
      is dependent on the method being responded to, and is described
      with each request that will produce it.
    </p>
    <p>
      The server can also communicate to the clients by sending a
      notification. The purpose of these notifications is to provide
      information to clients as it becomes available rather than to
      require that clients poll for it. Unless explicitly stated, all
      notifications are designed to return the complete information
      available at the time the notification is sent; clients are not
      required to update previously communicated
      results. Consequently, the server can and should return partial
      results before all results are available. For example, the
      syntactic errors for a file can be returned as soon as the
      syntactic analysis is complete, and both syntactic and semantic
      errors can be returned together at a later time.
    </p>
    <p>
      Each notification has two fields. The first field is the ‘event’
      field, which identifies the kind of notification. The second
      field is the ‘params’ field, whose structure is dependent on the
      kind of notification being sent. The structure of this field is
      described with each notification.
    </p>
    <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>
      TBD
    </p>
    <h3>Domains</h3>
    <p>
      For convenience, the API is divided into domains. Each domain is
      specified in a separate section below:
    </p>
    <ul>
      <li><a href="#domain_server">Server</a></li>
      <li><a href="#domain_analysis">Analysis</a></li>
      <li><a href="#domain_completion">Code Completion</a></li>
      <li><a href="#domain_search">Search</a></li>
      <li><a href="#domain_edit">Edit</a></li>
      <li><a href="#domain_execution">Execution</a></li>
    </ul>
    <p>
      The specifications of the API’s refer to data structures beyond
      the standard JSON primitives. These data structures are
      documented in the section titled <a href="#types">Types</a>.
    </p>
    <p>
      To get an overview of the API, you can consult the <a href="#index">index</a>.
    </p>
    <h3>Command-line Arguments</h3>
    <p>
      The command-line arguments that can be passed to the server.
    </p>
    <h4>Options</h4>
    <blockquote>
    <dl>
      <dt>--no-error-notification</dt>
      <dd>
      Disable notifications about errors (see analysis.error). If this
      flag is not specified then notifications will be sent for all
      errors produced for all files in the actual analysis roots.
      </dd>
    </dl>
    <dl>
      <dt>--file-read-mode</dt>
      <dd>
      An enumeration of the ways files can be read from disk. Some clients
      normalize end of line characters which would make the file offset and
      range information incorrect. The default option is <tt>as-is</tt>, but
      can also be set to <tt>normalize-eol-always</tt>. The default option
      (<tt>as-is</tt>) reads files as they are on disk. The
      <tt>normalize-eol-always</tt> option does the following:
      <ul>
        <li>'\r\n' is converted to '\n';</li>
        <li>'\r' by itself is converted to '\n';</li>
        <li>this happens regardless of the OS editor is running on.</li>
      </ul>
      </dd>
    </dl>
    <dl>
      <dt>--no-index</dt>
      <dd>
      Disable the server from generating an index. If this flag is passed and an
      API is used that requires an index, then an error, <tt>NO_INDEX_GENERATED</tt>,
      will be thrown. The set of API calls that require an index include:
      refactoring calls, code completions and searching.
      <!-- TODO(jwren/scheglov): make sure that this of APIs that is complete. -->
      </dd>
    </dl>
    </blockquote>
    <domain name="server">
      <p>
        The server domain contains API’s related to the execution of
        the server.
      </p>
      <request method="getVersion">
        <p>Return the version number of the analysis server.</p>
        <result>
          <field name="version">
            <ref>String</ref>
            <p>The version number of the analysis server.</p>
          </field>
        </result>
      </request>
      <request method="shutdown">
        <p>
          Cleanly shutdown the analysis server. Requests that are
          received after this request will not be processed. Requests
          that were received before this request, but for which a
          response has not yet been sent, will not be responded to. No
          further responses or notifications will be sent after the
          response to this request has been sent.
        </p>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services. All previous subscriptions are
          replaced by the given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not
          valid services. If there is an error, then the current
          subscriptions will remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <list><ref>ServerService</ref></list>
            <p>A list of the services being subscribed to.</p>
          </field>
        </params>
      </request>
      <notification event="connected">
        <p>
          Reports that the server is running. This notification is
          issued once after the server has started running but before
          any requests are processed to let the client know that it
          started correctly.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
       <params>
          <field name="version">
            <ref>String</ref>
            <p>The version number of the analysis server.</p>
          </field>
        </params>
      </notification>
      <notification event="error">
        <p>
          Reports that an unexpected error has occurred while
          executing the server. This notification is not used for
          problems with specific requests (which are returned as part
          of the response) but is used for exceptions that occur while
          performing other tasks, such as analysis or preparing
          notifications.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
        <params>
          <field name="isFatal">
            <ref>bool</ref>
            <p>
              True if the error is a fatal error, meaning that the
              server will shutdown automatically after sending this
              notification.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              The error message indicating what kind of error was
              encountered.
            </p>
          </field>
          <field name="stackTrace">
            <ref>String</ref>
            <p>
              The stack trace associated with the generation of the
              error, used for debugging the server.
            </p>
          </field>
        </params>
      </notification>
      <notification event="status">
        <p>
          Reports the current status of the server. Parameters are
          omitted if there has been no change in the status
          represented by that parameter.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"STATUS"</tt> in
          the list of services passed in a server.setSubscriptions
          request.
        </p>
        <params>
          <field name="analysis" optional="true">
            <ref>AnalysisStatus</ref>
            <p>
              The current status of analysis, including whether
              analysis is being performed and if so what is being
              analyzed.
            </p>
          </field>
          <field name="pub" optional="true">
            <ref>PubStatus</ref>
            <p>
              The current status of pub execution, indicating whether we are
              currently running pub.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="analysis">
      <p>
        The analysis domain contains API’s related to the analysis of
        files.
      </p>
      <request method="getErrors">
        <p>
          Return the errors associated with the given file. If the
          errors for the given file have not yet been computed, or the
          most recently computed errors for the given file are out of
          date, then the response for this request will be delayed
          until they have been computed. If some or all of the errors
          for the file cannot be computed, then the subset of the
          errors that can be computed will be returned and the
          response will contain an error to indicate why the errors
          could not be computed. If the content of the file changes after this
          request was received but before a response could be sent, then an
          error of type <tt>CONTENT_MODIFIED</tt> will be generated.
        </p>
        <p>
          This request is intended to be used by clients that cannot
          asynchronously apply updated error information. Clients that
          <b>can</b> apply error information as it becomes available
          should use the information provided by the 'analysis.errors'
          notification.
        </p>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file for which errors are being requested.
            </p>
          </field>
        </params>
        <result>
          <field name="errors">
            <list><ref>AnalysisError</ref></list>
            <p>
              The errors associated with the file.
            </p>
          </field>
        </result>
      </request>
      <request method="getHover">
        <p>
          Return the hover information associate with the given
          location. If some or all of the hover information is not
          available at the time this request is processed the
          information will be omitted from the response.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which hover information is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset for which hover information is being requested.
            </p>
          </field>
        </params>
        <result>
          <field name="hovers">
            <list><ref>HoverInformation</ref></list>
            <p>
              The hover information associated with the
              location. The list will be empty if no information
              could be determined for the location. The list can
              contain multiple items if the file is being analyzed
              in multiple contexts in conflicting ways (such as a
              part that is included in multiple libraries).
            </p>
          </field>
        </result>
      </request>
      <request method="getReachableSources">
        <p>
          Return the transitive closure of reachable sources for a given file.
        </p>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>GET_REACHABLE_SOURCES_INVALID_FILE</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file for which reachable source information is being requested.
            </p>
          </field>
        </params>
        <result>
          <field name="sources">
            <map>
              <key><ref>String</ref></key>
              <value><list>><ref>String</ref></list></value>
            </map>
            <p>
              A mapping from source URIs to directly reachable source URIs. For example,
              a file "foo.dart" that imports "bar.dart" would have the corresponding mapping
              { "file:///foo.dart" : ["file:///bar.dart"] }.  If "bar.dart" has further imports
              (or exports) there will be a mapping from the URI "file:///bar.dart" to them.
              To check if a specific URI is reachable from a given file, clients can check
              for its presence in the resulting key set.
            </p>
          </field>
        </result>
      </request>
      <request method="getLibraryDependencies">
        <p>
          Return library dependency information for use in client-side indexing
          and package URI resolution.
        </p>
        <p>
        Clients that are only using the libraries field should consider using the
        analyzedFiles notification instead.
        </p>
        <result>
          <field name="libraries">
            <list><ref>FilePath</ref></list>
              <p>
                A list of the paths of library elements referenced by
                files in existing analysis roots.
              </p>
            </field>
            <field name="packageMap">
              <map>
                <key><ref>String</ref></key>
                <value>
                  <map>
                    <key><ref>String</ref></key>
                    <value><list><ref>FilePath</ref></list></value>
                  </map>
                </value>
              </map>
              <p>
                A mapping from context source roots to package maps which map
                package names to source directories for use in client-side
                package URI resolution.
              </p>
            </field>
        </result>
      </request>
      <request method="getNavigation">
        <p>
          Return the navigation information associated with the given region of
          the given file. If the navigation information for the given file has
          not yet been computed, or the most recently computed navigation
          information for the given file is out of date, then the response for
          this request will be delayed until it has been computed. If the
          content of the file changes after this request was received but before
          a response could be sent, then an error of type
          <tt>CONTENT_MODIFIED</tt> will be generated.
        </p>
        <p>
          If a navigation region overlaps (but extends either before or after)
          the given region of the file it will be included in the result. This
          means that it is theoretically possible to get the same navigation
          region in response to multiple requests. Clients can avoid this by
          always choosing a region that starts at the beginning of a line and
          ends at the end of a (possibly different) line in the file.
        </p>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>GET_NAVIGATION_INVALID_FILE</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which navigation information is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region for which navigation information is being
              requested.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region for which navigation information is being
              requested.
            </p>
          </field>
        </params>
        <result>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the paths of files that are referenced by the navigation
              targets.
            </p>
          </field>
          <field name="targets">
            <list><ref>NavigationTarget</ref></list>
            <p>
              A list of the navigation targets that are referenced by the
              navigation regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>NavigationRegion</ref></list>
            <p>
              A list of the navigation regions within the requested region of
              the file.
            </p>
          </field>
        </result>
      </request>
      <request method="reanalyze">
        <p>
          Force the re-analysis of everything contained in the specified
          analysis roots. This will cause all previously computed analysis
          results to be discarded and recomputed, and will cause all subscribed
          notifications to be re-sent.
        </p>
        <p>
          If no analysis roots are provided, then all current analysis roots
          will be re-analyzed. If an empty list of analysis roots is provided,
          then nothing will be re-analyzed. If the list contains one or more
          paths that are not currently analysis roots, then an error of type
          <tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
        </p>
        <params>
          <field name="roots" optional="true">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the analysis roots that are to be re-analyzed.
            </p>
          </field>
        </params>
      </request>
      <request method="setAnalysisRoots">
        <p>
          Sets the root paths used to determine which files to analyze. The set
          of files to be analyzed are all of the files in one of the root paths
          that are not either explicitly or implicitly excluded. A file is
          explicitly excluded if it is in one of the excluded paths. A file is
          implicitly excluded if it is in a subdirectory of one of the root
          paths where the name of the subdirectory starts with a period (that
          is, a hidden directory).
        </p>
        <p>
          Note that this request determines the set of requested
          analysis roots. The actual set of analysis roots at any
          given time is the intersection of this set with the set of
          files and directories actually present on the
          filesystem. When the filesystem changes, the actual set of
          analysis roots is automatically updated, but the set of
          requested analysis roots is unchanged. This means that if
          the client sets an analysis root before the root becomes
          visible to server in the filesystem, there is no error; once
          the server sees the root in the filesystem it will start
          analyzing it. Similarly, server will stop analyzing files
          that are removed from the file system but they will remain
          in the set of requested roots.
        </p>
        <p>
          If an included path represents a file, then server will look
          in the directory containing the file for a pubspec.yaml
          file. If none is found, then the parents of the directory
          will be searched until such a file is found or the root of
          the file system is reached. If such a file is found, it will
          be used to resolve package: URI’s within the file.
        </p>
        <params>
          <field name="included">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the files and directories that should be
              analyzed.
            </p>
          </field>
          <field name="excluded">
            <list><ref>FilePath</ref></list>
            <p>
              A list of the files and directories within the
              included directories that should not be analyzed.
            </p>
          </field>
          <field name="packageRoots" optional="true">
            <map>
              <key><ref>FilePath</ref></key>
              <value><ref>FilePath</ref></value>
            </map>
            <p>
              A mapping from source directories to package roots
              that should override the normal package: URI resolution
              mechanism.
            </p>
            <p>
              If a package root is a directory, then
              the analyzer will behave as though the associated
              source directory in the map contains a special
              pubspec.yaml file which resolves any package: URI to the
              corresponding path within that package root directory.  The
              effect is the same as specifying the package root directory as
              a "--package_root" parameter to the Dart VM when
              executing any Dart file inside the source directory.
            </p>
            <p>
              If a package root is a file, then the analyzer
              will behave as though that file is a ".packages" file in the
              source directory. The effect is the same as specifying the file
              as a "--packages" parameter to the Dart VM when
              executing any Dart file inside the source directory.
            </p>
            <p>
              Files in any directories that are not overridden by this
              mapping have their package: URI's resolved using the
              normal pubspec.yaml mechanism.  If this field is absent,
              or the empty map is specified, that indicates that the
              normal pubspec.yaml mechanism should always be used.
            </p>
          </field>
        </params>
      </request>
     <request method="setGeneralSubscriptions">
        <p>
          Subscribe for general services (that is, services that are not
          specific to individual files). All previous subscriptions are replaced
          by the given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not valid
          services. If there is an error, then the current subscriptions will
          remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <list><ref>GeneralAnalysisService</ref></list>
            <p>A list of the services being subscribed to.</p>
          </field>
        </params>
      </request>
      <request method="setPriorityFiles">
        <p>
          Set the priority files to the files in the given list. A
          priority file is a file that is given priority when
          scheduling which analysis work to do first. The list
          typically contains those files that are visible to the user
          and those for which analysis results will have the biggest
          impact on the user experience. The order of the files within
          the list is significant: the first file will be given higher
          priority than the second, the second higher priority than
          the third, and so on.
        </p>
        <p>
          Note that this request determines the set of requested
          priority files. The actual set of priority files is the
          intersection of the requested set of priority files with the
          set of files currently subject to analysis. (See
          analysis.setSubscriptions for a description of files that
          are subject to analysis.)
        </p>
        <p>
          If a requested priority file is a directory it is ignored,
          but remains in the set of requested priority files so that
          if it later becomes a file it can be included in the set of
          actual priority files.
        </p>
        <params>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files that are to be a priority for analysis.
            </p>
          </field>
        </params>
      </request>
      <request method="setSubscriptions">
        <p>
          Subscribe for services that are specific to individual files.
          All previous subscriptions are replaced by the current set of
          subscriptions. If a given service is not included as a key in the map
          then no files will be subscribed to the service, exactly as if the
          service had been included in the map with an explicit empty list of
          files.
        </p>
        <p>
          Note that this request determines the set of requested
          subscriptions. The actual set of subscriptions at any given
          time is the intersection of this set with the set of files
          currently subject to analysis. The files currently subject
          to analysis are the set of files contained within an actual
          analysis root but not excluded, plus all of the files
          transitively reachable from those files via import, export
          and part directives. (See analysis.setAnalysisRoots for an
          explanation of how the actual analysis roots are
          determined.) When the actual analysis roots change, the
          actual set of subscriptions is automatically updated, but
          the set of requested subscriptions is unchanged.
        </p>
        <p>
          If a requested subscription is a directory it is ignored,
          but remains in the set of requested subscriptions so that if
          it later becomes a file it can be included in the set of
          actual subscriptions.
        </p>
        <p>
          It is an error if any of the keys in the map are not valid
          services. If there is an error, then the existing
          subscriptions will remain unchanged.
        </p>
        <params>
          <field name="subscriptions">
            <map>
              <key><ref>AnalysisService</ref></key>
              <value>
                <list><ref>FilePath</ref></list>
              </value>
            </map>
            <p>
              A table mapping services to a list of the files being
              subscribed to the service.
            </p>
          </field>
        </params>
      </request>
      <request method="updateContent">
        <p>
          Update the content of one or more files. Files that were
          previously updated but not included in this update remain
          unchanged. This effectively represents an overlay of the
          filesystem. The files whose content is overridden are
          therefore seen by server as being files with the given
          content, even if the files do not exist on the filesystem or
          if the file path represents the path to a directory on the
          filesystem.
        </p>
        <params>
          <field name="files">
            <map>
              <key><ref>FilePath</ref></key>
              <value>
                <union field="type">
                  <ref>AddContentOverlay</ref>
                  <ref>ChangeContentOverlay</ref>
                  <ref>RemoveContentOverlay</ref>
                </union>
              </value>
            </map>
            <p>
              A table mapping the files whose content has changed to a
              description of the content change.
            </p>
          </field>
        </params>
        <result>
        </result>
      </request>
      <request method="updateOptions">
        <p>
          Update the options controlling analysis based on the given
          set of options. Any options that are not included in the
          analysis options will not be changed. If there are options
          in the analysis options that are not valid, they will be
          silently ignored.
        </p>
        <params>
          <field name="options">
            <ref>AnalysisOptions</ref>
            <p>
              The options that are to be used to control analysis.
            </p>
          </field>
        </params>
      </request>
      <notification event="analyzedFiles">
        <p>
          Reports the paths of the files that are being analyzed.
        </p>
        <p>
          This notification is not subscribed to by default. Clients can
          subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the list
          of services passed in an analysis.setGeneralSubscriptions request.
        </p>
        <params>
          <field name="directories">
            <list><ref>FilePath</ref></list>
              <p>
                A list of the paths of the files that are being analyzed.
              </p>
            </field>
        </params>
      </notification>
      <notification event="errors">
        <p>
          Reports the errors associated with a given file. The set of
          errors included in the notification is always a complete
          list that supersedes any previously reported errors.
        </p>
        <p>
          It is only possible to unsubscribe from this notification by
          using the command-line flag --no-error-notification.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the errors.
            </p>
          </field>
          <field name="errors">
            <list><ref>AnalysisError</ref></list>
            <p>
              The errors contained in the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="flushResults">
        <p>
          Reports that any analysis results that were previously
          associated with the given files should be considered to be
          invalid because those files are no longer being analyzed,
          either because the analysis root that contained it is no
          longer being analyzed or because the file no longer exists.
        </p>
        <p>
          If a file is included in this notification and at some later
          time a notification with results for the file is received,
          clients should assume that the file is once again being
          analyzed and the information should be processed.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
        <params>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files that are no longer being analyzed.
            </p>
          </field>
        </params>
      </notification>
      <notification event="folding">
        <p>
          Reports the folding regions associated with a given
          file. Folding regions can be nested, but will not be
          overlapping. Nesting occurs when a foldable element, such as
          a method, is nested inside another foldable element such as
          a class.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"FOLDING"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the folding regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>FoldingRegion</ref></list>
            <p>
              The folding regions contained in the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="highlights">
        <p>
          Reports the highlight regions associated with a given file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"HIGHLIGHTS"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the highlight regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>HighlightRegion</ref></list>
            <p>
              The highlight regions contained in the file. Each
              highlight region represents a particular syntactic or
              semantic meaning associated with some range. Note that
              the highlight regions that are returned can overlap
              other highlight regions if there is more than one
              meaning associated with a particular region.
            </p>
          </field>
        </params>
      </notification>
      <notification event="implemented">
        <p>
          Reports the classes that are implemented or extended and
          class members that are implemented or overridden in a file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file with which the implementations are associated.
            </p>
          </field>
          <field name="classes">
            <list><ref>ImplementedClass</ref></list>
            <p>
              The classes defined in the file that are implemented or extended.
            </p>
          </field>
          <field name="members">
            <list><ref>ImplementedMember</ref></list>
            <p>
              The member defined in the file that are implemented or overridden.
            </p>
          </field>
        </params>
      </notification>
      <notification event="invalidate">
        <p>
          Reports that the navigation information associated with a region of a
          single file has become invalid and should be re-requested.
        </p>
        <p>
          This notification is not subscribed to by default. Clients can
          subscribe by including the value <tt>"INVALIDATE"</tt> in the list of
          services passed in an analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file whose information has been invalidated.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the invalidated region.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the invalidated region.
            </p>
          </field>
          <field name="delta">
            <ref>int</ref>
            <p>
              The delta to be applied to the offsets in information that follows
              the invalidated region in order to update it so that it doesn't
              need to be re-requested.
            </p>
          </field>
        </params>
      </notification>
      <notification event="navigation">
        <p>
          Reports the navigation targets associated with a given file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"NAVIGATION"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the navigation regions.
            </p>
          </field>
          <field name="regions">
            <list><ref>NavigationRegion</ref></list>
            <p>
              The navigation regions contained in the file.
              The regions are sorted by their offsets.
              Each navigation region represents a list of targets
              associated with some range. The lists will usually
              contain a single target, but can contain more in the
              case of a part that is included in multiple libraries
              or in Dart code that is compiled against multiple
              versions of a package. Note that the navigation
              regions that are returned do not overlap other
              navigation regions.
            </p>
          </field>
          <field name="targets">
            <list><ref>NavigationTarget</ref></list>
            <p>
              The navigation targets referenced in the file.
              They are referenced by <tt>NavigationRegion</tt>s by their
              index in this array.
            </p>
          </field>
          <field name="files">
            <list><ref>FilePath</ref></list>
            <p>
              The files containing navigation targets referenced in the file.
              They are referenced by <tt>NavigationTarget</tt>s by their
              index in this array.
            </p>
          </field>
        </params>
      </notification>
      <notification event="occurrences">
        <p>
          Reports the occurrences of references to elements within a
          single file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OCCURRENCES"</tt>
          in the list of services passed in an
          analysis.setSubscriptions request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file in which the references occur.
            </p>
          </field>
          <field name="occurrences">
            <list><ref>Occurrences</ref></list>
            <p>
              The occurrences of references to elements within the
              file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="outline">
        <p>
          Reports the outline associated with a single file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OUTLINE"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file with which the outline is associated.
            </p>
          </field>
          <field name="kind">
            <ref>FileKind</ref>
            <p>
              The kind of the file.
            </p>
          </field>
          <field name="libraryName" optional="true">
            <ref>String</ref>
            <p>
              The name of the library defined by the file using a "library"
              directive, or referenced by a "part of" directive. If both
              "library" and "part of" directives are present, then the
              "library" directive takes precedence.
              This field will be omitted if the file has neither "library"
              nor "part of" directives.
            </p>
          </field>
          <field name="outline">
            <ref>Outline</ref>
            <p>
              The outline associated with the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="overrides">
        <p>
          Reports the overriding members in a file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OVERRIDES"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file with which the overrides are associated.
            </p>
          </field>
          <field name="overrides">
            <list><ref>Override</ref></list>
            <p>
              The overrides associated with the file.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="completion">
      <p>
        The code completion domain contains commands related to
        getting code completion suggestions.
      </p>
      <request method="getSuggestions">
        <p>
          Request that completion suggestions for the given offset in
          the given file be returned.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the point at which suggestions are
              to be made.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset within the file at which suggestions are to
              be made.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>CompletionId</ref>
            <p>
              The identifier used to associate results with this
              completion request.
            </p>
          </field>
        </result>
      </request>
      <notification event="results">
        <p>
          Reports the completion suggestions that should be presented
          to the user. The set of suggestions included in the
          notification is always a complete list that supersedes any
          previously reported suggestions.
        </p>
        <params>
          <field name="id">
            <ref>CompletionId</ref>
            <p>
              The id associated with the completion.
            </p>
          </field>
          <field name="replacementOffset">
            <ref>int</ref>
            <p>
              The offset of the start of the text to be
              replaced. This will be different than the offset used
              to request the completion suggestions if there was a
              portion of an identifier before the original
              offset. In particular, the replacementOffset will be
              the offset of the beginning of said identifier.
            </p>
          </field>
          <field name="replacementLength">
            <ref>int</ref>
            <p>
              The length of the text to be replaced if the remainder
              of the identifier containing the cursor is to be
              replaced when the suggestion is applied (that is, the
              number of characters in the existing identifier).
            </p>
          </field>
          <field name="results">
            <list><ref>CompletionSuggestion</ref></list>
            <p>
              The completion suggestions being reported.  The
              notification contains all possible completions at the
              requested cursor position, even those that do not match
              the characters the user has already typed.  This allows
              the client to respond to further keystrokes from the
              user without having to make additional requests.
            </p>
          </field>
          <field name="isLast">
            <ref>bool</ref>
            <p>
              True if this is that last set of results that will be
              returned for the indicated completion.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="search">
      <p>
        The search domain contains commands related to searches that
        can be performed against the code base.
      </p>
      <request method="findElementReferences">
        <p>
          Perform a search for references to the element defined or
          referenced at the given offset in the given file.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the declaration of or reference to
              the element used to define the search.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset within the file of the declaration of or
              reference to the element.
            </p>
          </field>
          <field name="includePotential">
            <ref>bool</ref>
            <p>
              True if potential matches are to be included in the
              results.
            </p>
          </field>
        </params>
        <result>
          <field name="id" optional="true">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
            <p>
              If no element was found at the given location, this
              field will be absent, and no results will be reported
              via the search.results notification.
            </p>
          </field>
          <field name="element" optional="true">
            <ref>Element</ref>
            <p>
              The element referenced or defined at the given offset
              and whose references will be returned in the search
              results.
            </p>
            <p>
              If no element was found at the given location, this
              field will be absent.
            </p>
          </field>
        </result>
      </request>
      <request method="findMemberDeclarations">
        <p>
          Perform a search for declarations of members whose name is
          equal to the given name.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the declarations to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="findMemberReferences">
        <p>
          Perform a search for references to members whose name is
          equal to the given name. This search does not check to see
          that there is a member defined with the given name, so it is
          able to find references to undefined members as well.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the references to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="findTopLevelDeclarations">
        <p>
          Perform a search for declarations of top-level elements
          (classes, typedefs, getters, setters, functions and fields)
          whose name matches the given pattern.
        </p>
        <p>
          An identifier is returned immediately, and individual
          results will be returned via the search.results notification
          as they become available.
        </p>
        <params>
          <field name="pattern">
            <ref>String</ref>
            <p>
              The regular expression used to match the names of the
              declarations to be found.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </field>
        </result>
      </request>
      <request method="getTypeHierarchy">
        <p>
          Return the type hierarchy of the class declared or
          referenced at the given location.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the declaration or reference to the
              type for which a hierarchy is being requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the name of the type within the file.
            </p>
          </field>
          <field name="superOnly" optional="true">
            <ref>bool</ref>
            <p>
              True if the client is only requesting superclasses and
              interfaces hierarchy.
            </p>
          </field>
        </params>
        <result>
          <field name="hierarchyItems" optional="true">
            <list><ref>TypeHierarchyItem</ref></list>
            <p>
              A list of the types in the requested hierarchy. The
              first element of the list is the item representing the
              type for which the hierarchy was requested. The index of
              other elements of the list is unspecified, but
              correspond to the integers used to reference supertype
              and subtype items within the items.
            </p>
            <p>
              This field will be absent if the code at the given file
              and offset does not represent a type, or if the file has
              not been sufficiently analyzed to allow a type hierarchy
              to be produced.
            </p>
          </field>
        </result>
      </request>
      <notification event="results">
        <p>
          Reports some or all of the results of performing a requested
          search. Unlike other notifications, this notification
          contains search results that should be added to any
          previously received search results associated with the same
          search id.
        </p>
        <params>
          <field name="id">
            <ref>SearchId</ref>
            <p>
              The id associated with the search.
            </p>
          </field>
          <field name="results">
            <list><ref>SearchResult</ref></list>
            <p>
              The search results being reported.
            </p>
          </field>
          <field name="isLast">
            <ref>bool</ref>
            <p>
              True if this is that last set of results that will be
              returned for the indicated search.
            </p>
          </field>
        </params>
      </notification>
    </domain>
    <domain name="edit">
      <p>
        The edit domain contains commands related to edits that can be
        applied to the code.
      </p>
      <request method="format">
        <p>
          Format the contents of a single file. The currently selected region of
          text is passed in so that the selection can be preserved across the
          formatting operation. The updated selection will be as close to
          matching the original as possible, but whitespace at the beginning or
          end of the selected region will be ignored. If preserving selection
          information is not required, zero (0) can be specified for both the
          selection offset and selection length.
        </p>
        <p>
          If a request is made for a file which does not exist, or which is not
          currently subject to analysis (e.g. because it is not associated with
          any analysis root specified to analysis.setAnalysisRoots), an error of
          type <tt>FORMAT_INVALID_FILE</tt> will be generated. If the source
          contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
          will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code to be formatted.
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset of the current selection in the file.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The length of the current selection in the file.
            </p>
          </field>
          <!--
          <field name="selectionOnly" optional="true">
            <ref>bool</ref>
            <p>
              True if the code to be formatted should be limited to the selected
              text (or the smallest portion of text that encloses the selected
              text that can be formatted).
            </p>
          </field>
          -->
          <field name="lineLength" optional="true">
            <ref>int</ref>
            <p>
              The line length to be used by the formatter.
            </p>
          </field>
        </params>
        <result>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              The edit(s) to be applied in order to format the code. The list
              will be empty if the code was already formatted (there are no
              changes).
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset of the selection after formatting the code.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The length of the selection after formatting the code.
            </p>
          </field>
        </result>
      </request>
      <request method="getAssists">
        <p>
          Return the set of assists that are available at the given
          location. An assist is distinguished from a refactoring
          primarily by the fact that it affects a single file and does
          not require user input in order to be performed.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code for which assists are being
              requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the code for which assists are being
              requested.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the code for which assists are being
              requested.
            </p>
          </field>
        </params>
        <result>
          <field name="assists">
            <list><ref>SourceChange</ref></list>
            <p>
              The assists that are available at the given location.
            </p>
          </field>
        </result>
      </request>
      <request method="getAvailableRefactorings">
        <p>
          Get a list of the kinds of refactorings that are valid for
          the given selection in the given file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code on which the refactoring
              would be based.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the code on which the refactoring would be
              based.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the code on which the refactoring would be
              based.
            </p>
          </field>
        </params>
        <result>
          <field name="kinds">
            <list><ref>RefactoringKind</ref></list>
            <p>
              The kinds of refactorings that are valid for the given
              selection.
            </p>
          </field>
        </result>
      </request>
      <request method="getFixes">
        <p>
          Return the set of fixes that are available for the errors at
          a given offset in a given file.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the errors for which fixes are being
              requested.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset used to select the errors for which fixes
              will be returned.
            </p>
          </field>
        </params>
        <result>
          <field name="fixes">
            <list><ref>AnalysisErrorFixes</ref></list>
            <p>
              The fixes that are available for the errors at the given offset.
            </p>
          </field>
        </result>
      </request>
      <request method="getRefactoring">
        <p>
          Get the changes required to perform a refactoring.
        </p>
        <p>
          If another refactoring request is received during the processing
          of this one, an error of type <tt>REFACTORING_REQUEST_CANCELLED</tt>
          will be generated.
        </p>
        <params>
          <field name="kind">
            <ref>RefactoringKind</ref>
            <p>
              The kind of refactoring to be performed.
            </p>
          </field>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code involved in the
              refactoring.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region involved in the refactoring.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region involved in the refactoring.
            </p>
          </field>
          <field name="validateOnly">
            <ref>bool</ref>
            <p>
              True if the client is only requesting that the values of
              the options be validated and no change be generated.
            </p>
          </field>
          <field name="options" optional="true">
            <ref>RefactoringOptions</ref>
            <p>
              Data used to provide values provided by the user. The
              structure of the data is dependent on the kind of
              refactoring being performed. The data that is expected is
              documented in the section titled <a
              href="#refactorings">Refactorings</a>, labeled as
              “Options”. This field can be omitted if the refactoring
              does not require any options or if the values of those
              options are not known.
            </p>
          </field>
        </params>
        <result>
          <field name="initialProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The initial status of the refactoring, i.e. problems related to
              the context in which the refactoring is requested.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="optionsProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The options validation status, i.e. problems in the given options,
              such as light-weight validation of a new name, flags
              compatibility, etc.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="finalProblems">
            <list><ref>RefactoringProblem</ref></list>
            <p>
              The final status of the refactoring, i.e. problems identified in
              the result of a full, potentially expensive validation and / or
              change creation.
              The array will be empty if there are no known problems.
            </p>
          </field>
          <field name="feedback" optional="true">
            <ref>RefactoringFeedback</ref>
            <p>
              Data used to provide feedback to the user. The structure
              of the data is dependent on the kind of refactoring
              being created. The data that is returned is documented
              in the section titled <a
              href="#refactorings">Refactorings</a>, labeled as
              “Feedback”.
            </p>
          </field>
          <field name="change" optional="true">
            <ref>SourceChange</ref>
            <p>
              The changes that are to be applied to affect the
              refactoring. This field will be omitted if there are
              problems that prevent a set of changes from being
              computed, such as having no options specified for a
              refactoring that requires them, or if only validation
              was requested.
            </p>
          </field>
          <field name="potentialEdits" optional="true">
            <list><ref>String</ref></list>
            <p>
              The ids of source edits that are not known to be valid. An edit is
              not known to be valid if there was insufficient type information
              for the server to be able to determine whether or not the code
              needs to be modified, such as when a member is being renamed and
              there is a reference to a member from an unknown type. This field
              will be omitted if the change field is omitted or if there are no
              potential edits for the refactoring.
            </p>
          </field>
        </result>
      </request>
      <request method="sortMembers">
        <p>
          Sort all of the directives, unit and class members
          of the given Dart file.
        </p>
        <p>
          If a request is made for a file that does not exist, does not belong
          to an analysis root or is not a Dart file,
          <tt>SORT_MEMBERS_INVALID_FILE</tt> will be generated.
        </p>
        <p>
          If the Dart file has scan or parse errors,
          <tt>SORT_MEMBERS_PARSE_ERRORS</tt> will be generated.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The Dart file to sort.
            </p>
          </field>
        </params>
        <result>
          <field name="edit">
            <ref>SourceFileEdit</ref>
            <p>
              The file edit that is to be applied to the given file to effect
              the sorting.
            </p>
          </field>
        </result>
      </request>
      <request method="organizeDirectives">
        <p>
          Organizes all of the directives - removes unused imports and sorts
          directives of the given Dart file according to the
          <a href="https://www.dartlang.org/articles/style-guide/">Dart Style Guide</a>.
        </p>
        <p>
          If a request is made for a file that does not exist, does not belong
          to an analysis root or is not a Dart file,
          <tt>FILE_NOT_ANALYZED</tt> will be generated.
        </p>
        <p>
          If directives of the Dart file cannot be organized, for example
          because it has scan or parse errors, or by other reasons,
          <tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
          will provide details about the reason.
        </p>
        <params>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The Dart file to organize directives in.
            </p>
          </field>
        </params>
        <result>
          <field name="edit">
            <ref>SourceFileEdit</ref>
            <p>
              The file edit that is to be applied to the given file to effect
              the organizing.
            </p>
          </field>
        </result>
      </request>
    </domain>
    <domain name="execution">
      <p>
        The execution domain contains commands related to providing an execution
        or debugging experience.
      </p>
      <request method="createContext">
        <p>
          Create an execution context for the executable file with the given
          path. The context that is created will persist until
          execution.deleteContext is used to delete it. Clients, therefore, are
          responsible for managing the lifetime of execution contexts.
        </p>
        <params>
          <field name="contextRoot">
            <ref>FilePath</ref>
            <p>
              The path of the Dart or HTML file that will be launched, or the
              path of the directory containing the file.
            </p>
          </field>
        </params>
        <result>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier used to refer to the execution context that was
              created.
            </p>
          </field>
        </result>
      </request>
      <request method="deleteContext">
        <p>
          Delete the execution context with the given identifier. The context id
          is no longer valid after this command. The server is allowed to re-use
          ids when they are no longer valid.
        </p>
        <params>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier of the execution context that is to be deleted.
            </p>
          </field>
        </params>
      </request>
      <request method="mapUri">
        <p>
          Map a URI from the execution context to the file that it corresponds
          to, or map a file to the URI that it corresponds to in the execution
          context.
        </p>
        <p>
          Exactly one of the file and uri fields must be provided. If both
          fields are provided, then an error of type <tt>INVALID_PARAMETER</tt>
          will be generated. Similarly, if neither field is provided, then an
          error of type <tt>INVALID_PARAMETER</tt> will be generated.
        </p>
        <p>
          If the file field is provided and the value is not the path of a file
          (either the file does not exist or the path references something other
          than a file), then an error of type <tt>INVALID_PARAMETER</tt> will
          be generated.
        </p>
        <p>
          If the uri field is provided and the value is not a valid URI or if
          the URI references something that is not a file (either a file that
          does not exist or something other than a file), then an error of type
          <tt>INVALID_PARAMETER</tt> will be generated.
        </p>
        <p>
          If the contextRoot used to create the execution context does not
          exist, then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt> will
          be generated.
        </p>
        <params>
          <field name="id">
            <ref>ExecutionContextId</ref>
            <p>
              The identifier of the execution context in which the URI is to be
              mapped.
            </p>
          </field>
          <field name="file" optional="true">
            <ref>FilePath</ref>
            <p>
              The path of the file to be mapped into a URI.
            </p>
          </field>
          <field name="uri" optional="true">
            <ref>String</ref>
            <p>
              The URI to be mapped into a file path.
            </p>
          </field>
        </params>
        <result>
          <field name="file" optional="true">
            <ref>FilePath</ref>
            <p>
              The file to which the URI was mapped. This field is omitted if the
              uri field was not given in the request.
            </p>
          </field>
          <field name="uri" optional="true">
            <ref>String</ref>
            <p>
              The URI to which the file path was mapped. This field is omitted
              if the file field was not given in the request.
            </p>
          </field>
        </result>
      </request>
      <request method="setSubscriptions">
        <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>
    </domain>
    <types>
      <h2 class="domain"><a name="types">Types</a></h2>
      <p>
        This section contains descriptions of the data types referenced
        in the API’s of the various domains.
      </p>
      <type name="AddContentOverlay">
        <p>
          A directive to begin overlaying the contents of a file.  The
          supplied content will be used for analysis in place of the
          file contents in the filesystem.
        </p>
        <p>
          If this directive is used on a file that already has a file
          content overlay, the old overlay is discarded and replaced
          with the new one.
        </p>
        <object>
          <field name="type" value="add"><ref>String</ref></field>
          <field name="content">
            <ref>String</ref>
            <p>
              The new content of the file.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisError">
        <p>
          An indication of an error, warning, or hint that was produced
          by the analysis.
        </p>
        <object>
          <field name="severity">
            <ref>AnalysisErrorSeverity</ref>
            <p>
              The severity of the error.
            </p>
          </field>
          <field name="type">
            <ref>AnalysisErrorType</ref>
            <p>
              The type of the error.
            </p>
          </field>
          <field name="location">
            <ref>Location</ref>
            <p>
              The location associated with the error.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              The message to be displayed for this error. The message
              should indicate what is wrong with the code and why it is
              wrong.
            </p>
          </field>
          <field name="correction" optional="true">
            <ref>String</ref>
            <p>
              The correction message to be displayed for this error. The
              correction message should indicate how the user can fix
              the error. The field is omitted if there is no correction
              message associated with the error code.
            </p>
          </field>
          <field name="hasFix" optional="true">
            <ref>bool</ref>
            <p>
              A hint to indicate to interested clients that this error has
              an associated fix (or fixes).  The absence of this field implies
              there are not known to be fixes.  Note that since the operation
              to calculate whether fixes apply needs to be performant it is
              possible that complicated tests will be skipped and a false
              negative returned.  For this reason, this attribute should be
              treated as a "hint".  Despite the possibility of false negatives,
              no false positives should be returned.  If a client sees this
              flag set they can proceed with the confidence that there are in
              fact associated fixes.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisErrorFixes">
        <p>
          A list of fixes associated with a specific error
        </p>
        <object>
          <field name="error">
            <ref>AnalysisError</ref>
            <p>
              The error with which the fixes are associated.
            </p>
          </field>
          <field name="fixes">
            <list><ref>SourceChange</ref></list>
            <p>
              The fixes associated with the error.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisErrorSeverity">
        <p>
          An enumeration of the possible severities of analysis
          errors.
        </p>
        <enum>
          <value><code>INFO</code></value>
          <value><code>WARNING</code></value>
          <value><code>ERROR</code></value>
        </enum>
      </type>
      <type name="AnalysisErrorType">
        <p>
          An enumeration of the possible types of analysis errors.
        </p>
        <enum>
          <value><code>CHECKED_MODE_COMPILE_TIME_ERROR</code></value>
          <value><code>COMPILE_TIME_ERROR</code></value>
          <value><code>HINT</code></value>
          <value><code>LINT</code></value>
          <value><code>STATIC_TYPE_WARNING</code></value>
          <value><code>STATIC_WARNING</code></value>
          <value><code>SYNTACTIC_ERROR</code></value>
          <value><code>TODO</code></value>
        </enum>
      </type>
      <type name="AnalysisOptions">
        <p>
          A set of options controlling what kind of analysis is to be
          performed. If the value of a field is omitted the value of the
          option will not be changed.
        </p>
        <object>
          <field name="enableAsync" optional="true">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b>: 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">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></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">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></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">
            <ref>bool</ref>
            <p><b><i>Deprecated</i></b>: this feature is always enabled.</p>
            <p>
              True if the client wants to enable support for the
              proposed "null aware operators" feature.
            </p>
          </field>
          <field name="enableSuperMixins" optional="true">
            <ref>bool</ref>
            <p>
              True if the client wants to enable support for the
              proposed "less restricted mixins" proposal (DEP 34).
            </p>
          </field>
          <field name="generateDart2jsHints" optional="true">
            <ref>bool</ref>
            <p>
              True if hints that are specific to dart2js should be
              generated. This option is ignored if generateHints is false.
            </p>
          </field>
          <field name="generateHints" optional="true">
            <ref>bool</ref>
            <p>
              True if hints should be generated as part of generating
              errors and warnings.
            </p>
          </field>
          <field name="generateLints" optional="true">
            <ref>bool</ref>
            <p>
              True if lints should be generated as part of generating
              errors and warnings.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisService">
        <p>
          An enumeration of the services provided by the analysis domain that
          are related to a specific list of files.
        </p>
        <enum>
          <value><code>FOLDING</code></value>
          <value><code>HIGHLIGHTS</code></value>
          <value><code>IMPLEMENTED</code></value>
          <value>
            <code>INVALIDATE</code>
            <p>
              This service is not currently implemented and will become a
              GeneralAnalysisService in a future release.
            </p>
          </value>
          <value><code>NAVIGATION</code></value>
          <value><code>OCCURRENCES</code></value>
          <value><code>OUTLINE</code></value>
          <value><code>OVERRIDES</code></value>
        </enum>
      </type>
      <type name="AnalysisStatus">
        <p>
          An indication of the current state of analysis.
        </p>
        <object>
          <field name="isAnalyzing">
            <ref>bool</ref>
            <p>True if analysis is currently being performed.</p>
          </field>
          <field name="analysisTarget" optional="true">
            <ref>String</ref>
            <p>
              The name of the current target of analysis. This field is
              omitted if analyzing is false.
            </p>
          </field>
        </object>
      </type>
      <type name="ChangeContentOverlay">
        <p>
          A directive to modify an existing file content overlay. One or more
          ranges of text are deleted from the old file content overlay and
          replaced with new text.
        </p>
        <p>
        The edits are applied in the order in which they occur in the list.
        This means that the offset of each edit must be correct under the
        assumption that all previous edits have been applied.
        </p>
        <p>
          It is an error to use this overlay on a file that does not yet have
          a file content overlay or that has had its overlay removed via
          <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
        </p>
        <p>
          If any of the edits cannot be applied due to its offset or
          length being out of range, an INVALID_OVERLAY_CHANGE error
          will be reported.
        </p>
        <object>
          <field name="type" value="change"><ref>String</ref></field>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              The edits to be applied to the file.
            </p>
          </field>
        </object>
      </type>
      <type name="CompletionId">
        <ref>String</ref>
        <p>
          An identifier used to associate completion results with a
          completion request.
        </p>
      </type>
      <type name="CompletionSuggestion">
        <p>
          A suggestion for how to complete partially entered text. Many
          of the fields are optional, depending on the kind of element
          being suggested.
        </p>
        <object>
          <field name="kind">
            <ref>CompletionSuggestionKind</ref>
            <p>
              The kind of element being suggested.
            </p>
          </field>
          <field name="relevance">
            <ref>int</ref>
            <p>
              The relevance of this completion suggestion
              where a higher number indicates a higher relevance.
            </p>
          </field>
          <field name="completion">
            <ref>String</ref>
            <p>
              The identifier to be inserted if the suggestion is
              selected. If the suggestion is for a method or function,
              the client might want to additionally insert a template
              for the parameters. The information required in order to
              do so is contained in other fields.
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset, relative to the beginning of the completion,
              of where the selection should be placed after insertion.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The number of characters that should be selected after
              insertion.
            </p>
          </field>
          <field name="isDeprecated">
            <ref>bool</ref>
            <p>
              True if the suggested element is deprecated.
            </p>
          </field>
          <field name="isPotential">
            <ref>bool</ref>
            <p>
              True if the element is not known to be valid for the
              target. This happens if the type of the target is dynamic.
            </p>
          </field>
          <field name="docSummary" optional="true">
            <ref>String</ref>
            <p>
              An abbreviated version of the Dartdoc associated with the
              element being suggested, This field is omitted if there is
              no Dartdoc associated with the element.
            </p>
          </field>
          <field name="docComplete" optional="true">
            <ref>String</ref>
            <p>
              The Dartdoc associated with the element being suggested,
              This field is omitted if there is no Dartdoc associated
              with the element.
            </p>
          </field>
          <field name="declaringType" optional="true">
            <ref>String</ref>
            <p>
              The class that declares the element being suggested. This
              field is omitted if the suggested element is not a member
              of a class.
            </p>
          </field>
          <field name="element" optional="true">
            <ref>Element</ref>
            <p>
              Information about the element reference being suggested.
            </p>
          </field>
          <field name="returnType" optional="true">
            <ref>String</ref>
            <p>
              The return type of the getter, function or method
              or the type of the field being suggested.
              This field is omitted if the suggested element
              is not a getter, function or method.
            </p>
          </field>
          <field name="parameterNames" optional="true">
            <list><ref>String</ref></list>
            <p>
              The names of the parameters of the function or method
              being suggested. This field is omitted if the suggested
              element is not a setter, function or method.
            </p>
          </field>
          <field name="parameterTypes" optional="true">
            <list><ref>String</ref></list>
            <p>
              The types of the parameters of the function or method
              being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="requiredParameterCount" optional="true">
            <ref>int</ref>
            <p>
              The number of required parameters for the function or
              method being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="hasNamedParameters" optional="true">
            <ref>bool</ref>
            <p>
              True if the function or method being suggested has at
              least one named parameter. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="parameterName" optional="true">
            <ref>String</ref>
            <p>
              The name of the optional parameter being suggested. This
              field is omitted if the suggestion is not the addition of
              an optional argument within an argument list.
            </p>
          </field>
          <field name="parameterType" optional="true">
            <ref>String</ref>
            <p>
              The type of the options parameter being suggested. This
              field is omitted if the parameterName field is omitted.
            </p>
          </field>
          <field name="importUri" optional="true">
            <ref>String</ref>
            <p>
              The import to be added if the suggestion is out of scope
              and needs an import to be added to be in scope.
            </p>
          </field>
        </object>
      </type>
      <type name="CompletionSuggestionKind">
        <p>
          An enumeration of the kinds of elements that can be included
          in a completion suggestion.
        </p>
        <enum>
          <value>
          <code>ARGUMENT_LIST</code>
            <p>
              A list of arguments for the method or function that is being invoked.
              For this suggestion kind, the completion field is a textual representation
              of the invocation and the parameterNames, parameterTypes, and requiredParameterCount
              attributes are defined.
            </p>
          </value>
          <value><code>IMPORT</code></value>
          <value>
            <code>IDENTIFIER</code>
            <p>
              The element identifier should be inserted at the completion location.
              For example "someMethod" in import 'myLib.dart' show someMethod; .
              For suggestions of this kind, the element attribute is defined
              and the completion field is the element's identifier.
            </p>
          </value>
          <value>
            <code>INVOCATION</code>
            <p>
              The element is being invoked at the completion location.
              For example, "someMethod" in x.someMethod(); .
              For suggestions of this kind, the element attribute is defined
              and the completion field is the element's identifier.
            </p>
          </value>
          <value>
            <code>KEYWORD</code>
            <p>
              A keyword is being suggested.
              For suggestions of this kind, the completion is the keyword.
            </p>
          </value>
          <value>
            <code>NAMED_ARGUMENT</code>
            <p>
              A named argument for the current callsite is being suggested.
              For suggestions of this kind, the completion is
              the named argument identifier including a trailing ':' and space.
            </p>
          </value>
          <value><code>OPTIONAL_ARGUMENT</code></value>
          <value><code>PARAMETER</code></value>
        </enum>
      </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="Element">
        <p>
          Information about an element (something that can be declared
          in code).
        </p>
        <object>
          <field name="kind">
            <ref>ElementKind</ref>
            <p>
              The kind of the element.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the element. This is typically used as the
              label in the outline.
            </p>
          </field>
          <field name="location" optional="true">
            <ref>Location</ref>
            <p>
              The location of the name in the declaration of the
              element.
            </p>
          </field>
          <field name="flags">
            <ref>int</ref>
            <p>
              A bit-map containing the following flags:
            </p>
            <ul>
              <li>0x01 - set if the element is explicitly or implicitly abstract</li>
              <li>0x02 - set if the element was declared to be ‘const’</li>
              <li>0x04 - set if the element was declared to be ‘final’</li>
              <li>0x08 - set if the element is a static member of a class or is a top-level function or field</li>
              <li>0x10 - set if the element is private</li>
              <li>0x20 - set if the element is deprecated</li>
            </ul>
          </field>
          <field name="parameters" optional="true">
            <ref>String</ref>
            <p>
              The parameter list for the element. If the element is not
              a method or function this field will not be defined. If
              the element doesn't have parameters (e.g. getter), this field
              will not be defined. If the element has zero parameters, this
              field will have a value of "()".
            </p>
          </field>
          <field name="returnType" optional="true">
            <ref>String</ref>
            <p>
              The return type of the element. If the element is not a
              method or function this field will not be defined. If the
              element does not have a declared return type, this field
              will contain an empty string.
            </p>
          </field>
          <field name="typeParameters" optional="true">
            <ref>String</ref>
            <p>
              The type parameter list for the element. If the element doesn't
              have type parameters, this field will not be defined.
            </p>
          </field>
        </object>
      </type>
      <type name="ElementKind">
        <p>
          An enumeration of the kinds of elements.
        </p>
        <enum>
          <value><code>CLASS</code></value>
          <value><code>CLASS_TYPE_ALIAS</code></value>
          <value><code>COMPILATION_UNIT</code></value>
          <value><code>CONSTRUCTOR</code></value>
          <value><code>ENUM</code></value>
          <value><code>ENUM_CONSTANT</code></value>
          <value><code>FIELD</code></value>
          <value><code>FILE</code></value>
          <value><code>FUNCTION</code></value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value><code>GETTER</code></value>
          <value><code>LABEL</code></value>
          <value><code>LIBRARY</code></value>
          <value><code>LOCAL_VARIABLE</code></value>
          <value><code>METHOD</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>PREFIX</code></value>
          <value><code>SETTER</code></value>
          <value><code>TOP_LEVEL_VARIABLE</code></value>
          <value><code>TYPE_PARAMETER</code></value>
          <value>
            <code>UNIT_TEST_GROUP</code>
            <p><b><i>Deprecated</i></b>: support for tests was removed.</p>
          </value>
          <value>
            <code>UNIT_TEST_TEST</code>
            <p><b><i>Deprecated</i></b>: support for tests was removed.</p>
          </value>
          <value><code>UNKNOWN</code></value>
        </enum>
      </type>
      <type name="ExecutableFile">
        <p>
          A description of an executable file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The path of the executable file.
            </p>
          </field>
          <field name="kind">
            <ref>ExecutableKind</ref>
            <p>
              The kind of the executable file.
            </p>
          </field>
        </object>
      </type>
      <type name="ExecutableKind">
        <p>
          An enumeration of the kinds of executable files.
        </p>
        <enum>
          <value><code>CLIENT</code></value>
          <value><code>EITHER</code></value>
          <value><code>NOT_EXECUTABLE</code></value>
          <value><code>SERVER</code></value>
        </enum>
      </type>
      <type name="ExecutionContextId">
        <ref>String</ref>
        <p>
          The identifier for a execution context.
        </p>
      </type>
      <type name="ExecutionService">
        <p>
          An enumeration of the services provided by the execution
          domain.
        </p>
        <enum>
          <value><code>LAUNCH_DATA</code></value>
        </enum>
      </type>
      <type name="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="FilePath">
        <ref>String</ref>
        <p>
          The absolute, normalized path of a file.
        </p>
        <p>
          If the format of a file path in a request is not valid, e.g. the
          path is not absolute or is not normalized, then an error of type
          <tt>INVALID_FILE_PATH_FORMAT</tt> will be generated.
        </p>
      </type>
      <type name="FoldingKind">
        <p>
          An enumeration of the kinds of folding regions.
        </p>
        <enum>
          <value><code>COMMENT</code></value>
          <value><code>CLASS_MEMBER</code></value>
          <value><code>DIRECTIVES</code></value>
          <value><code>DOCUMENTATION_COMMENT</code></value>
          <value><code>TOP_LEVEL_DECLARATION</code></value>
        </enum>
      </type>
      <type name="FoldingRegion">
        <p>
          A description of a region that can be folded.
        </p>
        <object>
          <field name="kind">
            <ref>FoldingKind</ref>
            <p>
              The kind of the region.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be folded.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be folded.
            </p>
          </field>
        </object>
      </type>
      <type name="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="HighlightRegion">
        <p>
          A description of a region that could have special highlighting
          associated with it.
        </p>
        <object>
          <field name="type">
            <ref>HighlightRegionType</ref>
            <p>
              The type of highlight associated with the region.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be highlighted.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be highlighted.
            </p>
          </field>
        </object>
      </type>
      <type name="HighlightRegionType">
        <p>
          An enumeration of the kinds of highlighting that can be
          applied to files.
        </p>
        <enum>
          <value><code>ANNOTATION</code></value>
          <value><code>BUILT_IN</code></value>
          <value><code>CLASS</code></value>
          <value><code>COMMENT_BLOCK</code></value>
          <value><code>COMMENT_DOCUMENTATION</code></value>
          <value><code>COMMENT_END_OF_LINE</code></value>
          <value><code>CONSTRUCTOR</code></value>
          <value><code>DIRECTIVE</code></value>
          <value>
            <code>DYNAMIC_TYPE</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>DYNAMIC_LOCAL_VARIABLE_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>DYNAMIC_LOCAL_VARIABLE_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>DYNAMIC_PARAMETER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>DYNAMIC_PARAMETER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value><code>ENUM</code></value>
          <value><code>ENUM_CONSTANT</code></value>
          <value>
            <code>FIELD</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>FIELD_STATIC</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>FUNCTION</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>FUNCTION_DECLARATION</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value>
            <code>GETTER_DECLARATION</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value><code>IDENTIFIER_DEFAULT</code></value>
          <value><code>IMPORT_PREFIX</code></value>
          <value>
            <code>INSTANCE_FIELD_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INSTANCE_FIELD_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INSTANCE_GETTER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INSTANCE_GETTER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INSTANCE_METHOD_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INSTANCE_METHOD_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INSTANCE_SETTER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INSTANCE_SETTER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>INVALID_STRING_ESCAPE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value><code>KEYWORD</code></value>
          <value><code>LABEL</code></value>
          <value>
            <code>LIBRARY_NAME</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value><code>LITERAL_BOOLEAN</code></value>
          <value><code>LITERAL_DOUBLE</code></value>
          <value><code>LITERAL_INTEGER</code></value>
          <value><code>LITERAL_LIST</code></value>
          <value><code>LITERAL_MAP</code></value>
          <value><code>LITERAL_STRING</code></value>
          <value>
            <code>LOCAL_FUNCTION_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>LOCAL_FUNCTION_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>LOCAL_VARIABLE</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value><code>LOCAL_VARIABLE_DECLARATION</code></value>
          <value>
            <code>LOCAL_VARIABLE_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>METHOD</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>METHOD_DECLARATION</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>METHOD_DECLARATION_STATIC</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>METHOD_STATIC</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>PARAMETER</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>SETTER_DECLARATION</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_VARIABLE</code>
            <p>Only for version 1 of highlight.</p>
          </value>
          <value>
            <code>PARAMETER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>PARAMETER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>STATIC_FIELD_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>STATIC_GETTER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>STATIC_GETTER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>STATIC_METHOD_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>STATIC_METHOD_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>STATIC_SETTER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>STATIC_SETTER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_FUNCTION_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_FUNCTION_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_GETTER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_GETTER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_SETTER_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_SETTER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>TOP_LEVEL_VARIABLE_DECLARATION</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value><code>TYPE_NAME_DYNAMIC</code></value>
          <value><code>TYPE_PARAMETER</code></value>
          <value>
            <code>UNRESOLVED_INSTANCE_MEMBER_REFERENCE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
          <value>
            <code>VALID_STRING_ESCAPE</code>
            <p>Only for version 2 of highlight.</p>
          </value>
        </enum>
      </type>
      <type name="HoverInformation">
        <p>
          The hover information associated with a specific location.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the range of characters that encompasses the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the range of characters that encompasses the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </field>
          <field name="containingLibraryPath" optional="true">
            <ref>String</ref>
            <p>
              The path to the defining compilation unit of the library
              in which the referenced element is declared. This data is
              omitted if there is no referenced element, or if the
              element is declared inside an HTML file.
            </p>
          </field>
          <field name="containingLibraryName" optional="true">
            <ref>String</ref>
            <p>
              The name of the library in which the referenced element is
              declared. This data is omitted if there is no referenced
              element, or if the element is declared inside an HTML
              file.
            </p>
          </field>
          <field name="containingClassDescription" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the class declaring the element
              being referenced. This data is omitted if there is no referenced
              element, or if the element is not a class member.
            </p>
          </field>
          <field name="dartdoc" optional="true">
            <ref>String</ref>
            <p>
              The dartdoc associated with the referenced element. Other
              than the removal of the comment delimiters, including
              leading asterisks in the case of a block comment, the
              dartdoc is unprocessed markdown. This data is omitted if
              there is no referenced element, or if the element has no
              dartdoc.
            </p>
          </field>
          <field name="elementDescription" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the element being
              referenced. This data is omitted if there is no referenced
              element.
            </p>
          </field>
          <field name="elementKind" optional="true">
            <ref>String</ref>
            <p>
              A human-readable description of the kind of element being
              referenced (such as “class” or “function type
              alias”). This data is omitted if there is no referenced
              element.
            </p>
          </field>
          <field name="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="LinkedEditGroup">
        <p>
          A collection of positions that should be linked (edited
          simultaneously) for the purposes of updating code after a
          source change. For example, if a set of edits introduced a
          new variable name, the group would contain all of the
          positions of the variable name so that if the client wanted
          to let the user edit the variable name after the operation,
          all occurrences of the name could be edited simultaneously.
        </p>
        <object>
          <field name="positions">
            <list><ref>Position</ref></list>
            <p>
              The positions of the regions that should be edited
              simultaneously.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the regions that should be edited
              simultaneously.
            </p>
          </field>
          <field name="suggestions">
            <list><ref>LinkedEditSuggestion</ref></list>
            <p>
              Pre-computed suggestions for what every region might
              want to be changed to.
            </p>
          </field>
        </object>
      </type>
      <type name="LinkedEditSuggestion">
        <p>
          A suggestion of a value that could be used to replace all of
          the linked edit regions in a LinkedEditGroup.
        </p>
        <object>
          <field name="value">
            <ref>String</ref>
            <p>
              The value that could be used to replace all of the linked
              edit regions.
            </p>
          </field>
          <field name="kind">
            <ref>LinkedEditSuggestionKind</ref>
            <p>
              The kind of value being proposed.
            </p>
          </field>
        </object>
      </type>
      <type name="LinkedEditSuggestionKind">
        <p>
          An enumeration of the kind of values that can be suggested
          for a linked edit.
        </p>
        <enum>
          <value><code>METHOD</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>TYPE</code></value>
          <value><code>VARIABLE</code></value>
        </enum>
      </type>
      <type name="Location">
        <p>
          A location (character range) within a file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the range.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the range.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the range.
            </p>
          </field>
          <field name="startLine">
            <ref>int</ref>
            <p>
              The one-based index of the line containing the first
              character of the range.
            </p>
          </field>
          <field name="startColumn">
            <ref>int</ref>
            <p>
              The one-based index of the column containing the first
              character of the range.
            </p>
          </field>
        </object>
      </type>
      <type name="NavigationRegion">
        <p>
          A description of a region from which the user can navigate to
          the declaration of an element.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region from which the user can navigate.
            </p>
          </field>
          <field name="targets">
            <list><ref>int</ref></list>
            <p>
              The indexes of the targets (in the enclosing navigation response)
              to which the given region is bound. By opening the target, clients
              can implement one form of navigation. This list cannot be empty.
            </p>
          </field>
        </object>
      </type>
      <type name="NavigationTarget">
        <p>
          A description of a target to which the user can navigate.
        </p>
        <object>
          <field name="kind">
            <ref>ElementKind</ref>
            <p>
              The kind of the element.
            </p>
          </field>
          <field name="fileIndex">
            <ref>int</ref>
            <p>
              The index of the file (in the enclosing navigation response) to
              navigate to.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region from which the user can navigate.
            </p>
          </field>
          <field name="startLine">
            <ref>int</ref>
            <p>
              The one-based index of the line containing the first
              character of the region.
            </p>
          </field>
          <field name="startColumn">
            <ref>int</ref>
            <p>
              The one-based index of the column containing the first
              character of the region.
            </p>
          </field>
        </object>
      </type>
      <type name="Occurrences">
        <p>
          A description of the references to a single element within a
          single file.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              The element that was referenced.
            </p>
          </field>
          <field name="offsets">
            <list><ref>int</ref></list>
            <p>
              The offsets of the name of the referenced element within
              the file.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name of the referenced element.
            </p>
          </field>
        </object>
      </type>
      <type name="Outline">
        <p>
          An node in the outline structure of a file.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              A description of the element represented by this node.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the first character of the element. This is
              different than the offset in the Element, which if the
              offset of the name of the element. It can be used, for
              example, to map locations in the file back to an outline.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the element.
            </p>
          </field>
          <field name="children" optional="true">
            <list><ref>Outline</ref></list>
            <p>
              The children of the node. The field will be omitted if the
              node has no children.
            </p>
          </field>
        </object>
      </type>
      <type name="Override">
        <p>
          A description of a member that overrides an inherited member.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the name of the overriding member.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name of the overriding member.
            </p>
          </field>
          <field name="superclassMember" optional="true">
            <ref>OverriddenMember</ref>
            <p>
              The member inherited from a superclass that is overridden
              by the overriding member. The field is omitted if there is
              no superclass member, in which case there must be at least
              one interface member.
            </p>
          </field>
          <field name="interfaceMembers" optional="true">
            <list><ref>OverriddenMember</ref></list>
            <p>
              The members inherited from interfaces that are overridden
              by the overriding member. The field is omitted if there
              are no interface members, in which case there must be a
              superclass member.
            </p>
          </field>
        </object>
      </type>
      <type name="OverriddenMember">
        <p>
          A description of a member that is being overridden.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              The element that is being overridden.
            </p>
          </field>
          <field name="className">
            <ref>String</ref>
            <p>
              The name of the class in which the member is defined.
            </p>
          </field>
        </object>
      </type>
      <type name="Position">
        <p>
          A position within a file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the position.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the position.
            </p>
          </field>
        </object>
      </type>
      <type name="PubStatus">
        <p>
          An indication of the current state of pub execution.
        </p>
        <object>
          <field name="isListingPackageDirs">
            <ref>bool</ref>
            <p>
              True if the server is currently running pub to produce a list of
              package directories.
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringKind">
        <p>
          An enumeration of the kinds of refactorings that can be
          created.
        </p>
        <enum>
          <value><code>CONVERT_GETTER_TO_METHOD</code></value>
          <value><code>CONVERT_METHOD_TO_GETTER</code></value>
          <value><code>EXTRACT_LOCAL_VARIABLE</code></value>
          <value><code>EXTRACT_METHOD</code></value>
          <value><code>INLINE_LOCAL_VARIABLE</code></value>
          <value><code>INLINE_METHOD</code></value>
          <value><code>MOVE_FILE</code></value>
          <value><code>RENAME</code></value>
          <value><code>SORT_MEMBERS</code></value>
        </enum>
      </type>
      <type name="RefactoringMethodParameter">
        <p>
          A description of a parameter in a method refactoring.
        </p>
        <object>
          <field name="id" optional="true">
            <ref>String</ref>
            <p>
              The unique identifier of the parameter.
              Clients may omit this field for the parameters they want to add.
            </p>
          </field>
          <field name="kind">
            <ref>RefactoringMethodParameterKind</ref>
            <p>
              The kind of the parameter.
            </p>
          </field>
          <field name="type">
            <ref>String</ref>
            <p>
              The type that should be given to the parameter, or the return type
              of the parameter's function type.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that should be given to the parameter.
            </p>
          </field>
          <field name="parameters" optional="true">
            <ref>String</ref>
            <p>
              The parameter list of the parameter's function type.
              If the parameter is not of a function type, this field will
              not be defined. If the function type has zero parameters, this
              field will have a value of "()".
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringFeedback">
        <p>
          An abstract superclass of all refactoring feedbacks.
        </p>
        <object>
        </object>
      </type>
      <type name="RefactoringOptions">
        <p>
          An abstract superclass of all refactoring options.
        </p>
        <object>
        </object>
      </type>
      <type name="RefactoringMethodParameterKind">
        <p>
          An enumeration of the kinds of parameters.
        </p>
        <enum>
          <value><code>REQUIRED</code></value>
          <value><code>POSITIONAL</code></value>
          <value><code>NAMED</code></value>
        </enum>
      </type>
      <type name="RefactoringProblem">
        <p>
          A description of a problem related to a refactoring.
        </p>
        <object>
          <field name="severity">
            <ref>RefactoringProblemSeverity</ref>
            <p>
              The severity of the problem being represented.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              A human-readable description of the problem being
              represented.
            </p>
          </field>
          <field name="location" optional="true">
            <ref>Location</ref>
            <p>
              The location of the problem being represented.
              This field is omitted unless there is a specific location
              associated with the problem (such as a location where an element
              being renamed will be shadowed).
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringProblemSeverity">
        <p>
          An enumeration of the severities of problems that can be
          returned by the refactoring requests.
        </p>
        <enum>
          <value><code>INFO</code></value>
          <value><code>WARNING</code></value>
          <value><code>ERROR</code></value>
          <value><code>FATAL</code></value>
        </enum>
      </type>
      <type name="RemoveContentOverlay">
        <p>
          A directive to remove an existing file content overlay.
          After processing this directive, the file contents will once
          again be read from the file system.
        </p>
        <p>
          If this directive is used on a file that doesn't currently
          have a content overlay, it has no effect.
        </p>
        <object>
          <field name="type" value="remove"><ref>String</ref></field>
        </object>
      </type>
      <type name="RequestError">
        <p>
          An indication of a problem with the execution of the server,
          typically in response to a request.
        </p>
        <object>
          <field name="code">
            <ref>RequestErrorCode</ref>
            <p>
              A code that uniquely identifies the error that occurred.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              A short description of the error.
            </p>
          </field>
          <field name="stackTrace" optional="true">
            <ref>String</ref>
            <p>
              The stack trace associated with processing the request,
              used for debugging the server.
            </p>
          </field>
        </object>
      </type>
      <type name="RequestErrorCode">
        <p>
          An enumeration of the types of errors that can occur in the
          execution of the server.
        </p>
        <enum>
          <value>
            <code>CONTENT_MODIFIED</code>
            <p>
              An "analysis.getErrors" or "analysis.getNavigation" request could
              not be satisfied because the content of the file changed before
              the requested results could be computed.
            </p>
          </value>
          <value>
            <code>FILE_NOT_ANALYZED</code>
            <p>
              A request specified a FilePath which does not match a file in
              an analysis root, or the requested operation is not available
              for the file.
            </p>
          </value>
          <value>
            <code>FORMAT_INVALID_FILE</code>
            <p>
              An "edit.format" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </value>
          <value>
            <code>FORMAT_WITH_ERRORS</code>
            <p>
              An "edit.format" request specified a file that contains syntax
              errors.
            </p>
          </value>
          <value>
            <code>GET_ERRORS_INVALID_FILE</code>
            <p>
              An "analysis.getErrors" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </value>
          <value>
            <code>GET_NAVIGATION_INVALID_FILE</code>
            <p>
              An "analysis.getNavigation" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </value>
          <value>
            <code>GET_REACHABLE_SOURCES_INVALID_FILE</code>
            <p>
              An "analysis.getReachableSources" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </value>
          <value>
            <code>INVALID_ANALYSIS_ROOT</code>
            <p>
              A path passed as an argument to a request (such as
              analysis.reanalyze) is required to be an analysis root, but isn't.
            </p>
          </value>
          <value>
            <code>INVALID_EXECUTION_CONTEXT</code>
            <p>
              The context root used to create an execution context does not
              exist.
            </p>
          </value>
          <value>
            <code>INVALID_FILE_PATH_FORMAT</code>
            <p>
              The format of the given file path is invalid, e.g. is not
              absolute and normalized.
            </p>
          </value>
          <value>
            <code>INVALID_OVERLAY_CHANGE</code>
            <p>
              An "analysis.updateContent" request contained a
              ChangeContentOverlay object which can't be applied, due
              to an edit having an offset or length that is out of
              range.
            </p>
          </value>
          <value>
            <code>INVALID_PARAMETER</code>
            <p>
              One of the method parameters was invalid.
            </p>
          </value>
          <value>
            <code>INVALID_REQUEST</code>
            <p>
              A malformed request was received.
            </p>
          </value>
          <value>
            <code>NO_INDEX_GENERATED</code>
            <p>
              The "--no-index" flag was passed when the analysis server created,
              but this API call requires an index to have been generated.
            </p>
          </value>
          <value>
            <code>ORGANIZE_DIRECTIVES_ERROR</code>
            <p>
              An "edit.organizeDirectives" request specified a Dart file that
              cannot be analyzed. The reason is described in the message.
            </p>
          </value>
          <value>
            <code>REFACTORING_REQUEST_CANCELLED</code>
            <p>
              Another refactoring request was received during processing of
              this one.
            </p>
          </value>
          <value>
            <code>SERVER_ALREADY_STARTED</code>
            <p>
              The analysis server has already been started (and hence
              won't accept new connections).
            </p>
            <p>
              This error is included for future expansion; at present
              the analysis server can only speak to one client at a
              time so this error will never occur.
            </p>
          </value>
          <value>
            <code>SERVER_ERROR</code>
            <p>
              An internal error occurred in the analysis server.
              Also see the server.error notification.
            </p>
          </value>
          <value>
            <code>SORT_MEMBERS_INVALID_FILE</code>
            <p>
              An "edit.sortMembers" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </value>
          <value>
            <code>SORT_MEMBERS_PARSE_ERRORS</code>
            <p>
              An "edit.sortMembers" request specified a Dart file that has
              scan or parse errors.
            </p>
          </value>
          <value>
            <code>UNANALYZED_PRIORITY_FILES</code>
            <p>
              An "analysis.setPriorityFiles" request includes one or
              more files that are not being analyzed.
            </p>
            <p>
              This is a legacy error; it will be removed before the
              API reaches version 1.0.
            </p>
            <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
          </value>
          <value>
            <code>UNKNOWN_REQUEST</code>
            <p>
              A request was received which the analysis server does
              not recognize, or cannot handle in its current
              configuration.
            </p>
          </value>
          <value>
            <code>UNKNOWN_SOURCE</code>
            <p>
              The analysis server was requested to perform an action
              on a source that does not exist.
            </p>
          </value>
          <value>
            <code>UNSUPPORTED_FEATURE</code>
            <p>
              The analysis server was requested to perform an action
              which is not supported.
            </p>
            <p>
              This is a legacy error; it will be removed before the
              API reaches version 1.0.
            </p>
            <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
          </value>
        </enum>
      </type>
      <type name="SearchId">
        <ref>String</ref>
        <p>
          An identifier used to associate search results with a search
          request.
        </p>
      </type>
      <type name="SearchResult">
        <p>
          A single result from a search request.
        </p>
        <object>
          <field name="location">
            <ref>Location</ref>
            <p>
              The location of the code that matched the search criteria.
            </p>
          </field>
          <field name="kind">
            <ref>SearchResultKind</ref>
            <p>
              The kind of element that was found or the kind of
              reference that was found.
            </p>
          </field>
          <field name="isPotential">
            <ref>bool</ref>
            <p>
              True if the result is a potential match but cannot be
              confirmed to be a match. For example, if all references to
              a method m defined in some class were requested, and a
              reference to a method m from an unknown class were found,
              it would be marked as being a potential match.
            </p>
          </field>
          <field name="path">
            <list><ref>Element</ref></list>
            <p>
              The elements that contain the result, starting with the
              most immediately enclosing ancestor and ending with the
              library.
            </p>
          </field>
        </object>
      </type>
      <type name="SearchResultKind">
        <p>
          An enumeration of the kinds of search results returned by the
          search domain.
        </p>
        <enum>
          <value>
            <code>DECLARATION</code>
            <p>
              The declaration of an element.
            </p>
          </value>
          <value>
            <code>INVOCATION</code>
            <p>
              The invocation of a function or method.
            </p>
          </value>
          <value>
            <code>READ</code>
            <p>
              A reference to a field, parameter or variable where it is being read.
            </p>
          </value>
          <value>
            <code>READ_WRITE</code>
            <p>
              A reference to a field, parameter or variable where it is being read and written.
            </p>
          </value>
          <value>
            <code>REFERENCE</code>
            <p>
              A reference to an element.
            </p>
          </value>
          <value>
            <code>UNKNOWN</code>
            <p>
              Some other kind of search result.
            </p>
          </value>
          <value>
            <code>WRITE</code>
            <p>
              A reference to a field, parameter or variable where it is being written.
            </p>
          </value>
        </enum>
      </type>
      <type name="ServerService">
        <p>
          An enumeration of the services provided by the server domain.
        </p>
        <enum>
          <value><code>STATUS</code></value>
        </enum>
      </type>
      <type name="SourceChange">
        <p>
          A description of a set of edits that implement a single
          conceptual change.
        </p>
        <object>
          <field name="message">
            <ref>String</ref>
            <p>
              A human-readable description of the change to be applied.
            </p>
          </field>
          <field name="edits">
            <list><ref>SourceFileEdit</ref></list>
            <p>
              A list of the edits used to effect the change, grouped by
              file.
            </p>
          </field>
          <field name="linkedEditGroups">
            <list><ref>LinkedEditGroup</ref></list>
            <p>
              A list of the linked editing groups used to customize
              the changes that were made.
            </p>
          </field>
          <field name="selection" optional="true">
            <ref>Position</ref>
            <p>
              The position that should be selected after the edits
              have been applied.
            </p>
          </field>
        </object>
      </type>
      <type name="SourceEdit">
        <p>
          A description of a single change to a single file.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be modified.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be modified.
            </p>
          </field>
          <field name="replacement">
            <ref>String</ref>
            <p>
              The code that is to replace the specified region in the
              original code.
            </p>
          </field>
          <field name="id" optional="true">
            <ref>String</ref>
            <p>
              An identifier that uniquely identifies this source edit from other
              edits in the same response. This field is omitted unless a
              containing structure needs to be able to identify the edit for
              some reason.
            </p>
            <p>
              For example, some refactoring operations can produce edits that
              might not be appropriate (referred to as potential edits). Such
              edits will have an id so that they can be referenced. Edits in
              the same response that do not need to be referenced will not have
              an id.
            </p>
          </field>
        </object>
      </type>
      <type name="SourceFileEdit">
        <p>
          A description of a set of changes to a single file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code to be modified.
            </p>
          </field>
          <field name="fileStamp">
            <ref>long</ref>
            <p>
              The modification stamp of the file at the moment when the change
              was created, in milliseconds since the "Unix epoch". Will be -1 if
              the file did not exist and should be created. The client may use
              this field to make sure that the file was not changed since then,
              so it is safe to apply the change.
            </p>
          </field>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              A list of the edits used to effect the change.
            </p>
          </field>
        </object>
      </type>
      <type name="TypeHierarchyItem">
        <p>
          A representation of a class in a type hierarchy.
        </p>
        <object>
          <field name="classElement">
            <ref>Element</ref>
            <p>
              The class element represented by this item.
            </p>
          </field>
          <field name="displayName" optional="true">
            <ref>String</ref>
            <p>
              The name to be displayed for the class. This field will be
              omitted if the display name is the same as the name of the
              element. The display name is different if there is
              additional type information to be displayed, such as type
              arguments.
            </p>
          </field>
          <field name="memberElement" optional="true">
            <ref>Element</ref>
            <p>
              The member in the class corresponding to the member on
              which the hierarchy was requested. This field will be
              omitted if the hierarchy was not requested for a member or
              if the class does not have a corresponding member.
            </p>
          </field>
          <field name="superclass" optional="true">
            <ref>int</ref>
            <p>
              The index of the item representing the superclass of
              this class. This field will be omitted if this item
              represents the class Object.
            </p>
          </field>
          <field name="interfaces">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the interfaces
              implemented by this class. The list will be empty if
              there are no implemented interfaces.
            </p>
          </field>
          <field name="mixins">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the mixins
              referenced by this class. The list will be empty if
              there are no classes mixed in to this class.
            </p>
          </field>
          <field name="subclasses">
            <list><ref>int</ref></list>
            <p>
              The indexes of the items representing the subtypes of
              this class. The list will be empty if there are no
              subtypes or if this item represents a supertype of the
              pivot type.
            </p>
          </field>
        </object>
      </type>
    </types>
    <refactorings>
      <h2><a name="refactorings">Refactorings</a></h2>
      <p>
        This section contains additional information for each kind of
        refactoring. In addition to a brief description of the
        refactoring, there is a specification of the feedback that is
        provided when a refactoring is requested using the
        edit.getRefactoring request (designed to improve the UX)
        and the options that may be provided to edit.getRefactoring.
      </p>
      <refactoring kind="CONVERT_GETTER_TO_METHOD">
        <p>
          Convert a getter into a method by removing the keyword get
          and adding an empty parameter list.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single getter.
        </p>
      </refactoring>
      <refactoring kind="CONVERT_METHOD_TO_GETTER">
        <p>
          Convert a method into a getter by adding the keyword get and
          removing the parameter list.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single method or if the method has
          a non-empty parameter list.
        </p>
      </refactoring>
      <refactoring kind="EXTRACT_LOCAL_VARIABLE">
        <p>
          Create a local variable initialized by 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 offsets[i], then the
              length of that expression is lengths[i].
            </p>
          </field>
        </feedback>
        <options>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that the local variable should be given.
            </p>
          </field>
          <field name="extractAll">
            <ref>bool</ref>
            <p>
              True if all occurrences of the expression within the
              scope in which the variable will be defined should be
              replaced by a reference to the local variable. The
              expression used to initiate the refactoring will always
              be replaced.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="EXTRACT_METHOD">
        <p>
          Create a method whose body is the specified expression or
          list of statements, possibly augmented with a return
          statement.
        </p>
        <p>
          It is an error if the range contains anything other than a
          complete expression (no partial expressions are allowed) or
          a complete sequence of statements.
        </p>
        <feedback>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset to the beginning of the expression or
              statements that will be extracted.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the expression or statements that will be
              extracted.
            </p>
          </field>
          <field name="returnType">
            <ref>String</ref>
            <p>
              The proposed return type for the method.
              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 offsets[i], then the length of that
              expression is lengths[i].
            </p>
          </field>
        </feedback>
        <options>
          <field name="returnType">
            <ref>String</ref>
            <p>
              The return type that should be defined for the method.
            </p>
          </field>
          <field name="createGetter">
            <ref>bool</ref>
            <p>
              True if a getter should be created rather than a
              method. It is an error if this field is true and the
              list of parameters is non-empty.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that the method should be given.
            </p>
          </field>
          <field name="parameters">
            <list><ref>RefactoringMethodParameter</ref></list>
            <p>
              The parameters that should be defined for the method.
            </p>
            <p>
              It is an error if a REQUIRED or NAMED parameter follows a
              POSITIONAL parameter.
              It is an error if a REQUIRED or POSITIONAL parameter follows a
              NAMED parameter.
            </p>
            <ul>
              <li>
                To change the order and/or update proposed parameters, add
                parameters with the same identifiers as proposed.
              </li>
              <li>To add new parameters, omit their identifier.</li>
              <li>To remove some parameters, omit them in this list.</li>
            </ul>
          </field>
          <field name="extractAll">
            <ref>bool</ref>
            <p>
              True if all occurrences of the expression or statements
              should be replaced by an invocation of the method. The
              expression or statements used to initiate the
              refactoring will always be replaced.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="INLINE_LOCAL_VARIABLE">
        <p>
          Inline the initializer expression of a local variable in
          place of any references to that variable.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single local variable.
        </p>
        <feedback>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the variable being inlined.
            </p>
          </field>
          <field name="occurrences">
            <ref>int</ref>
            <p>
              The number of times the variable occurs.
            </p>
          </field>
        </feedback>
      </refactoring>
      <refactoring kind="INLINE_METHOD">
        <p>
          Inline a method in place of one or all references to that
          method.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single method.
        </p>
        <feedback>
          <field name="className" optional="true">
            <ref>String</ref>
            <p>
              The name of the class enclosing the method being inlined.
              If not a class member is being inlined, this field will be absent.
            </p>
          </field>
          <field name="methodName">
            <ref>String</ref>
            <p>
              The name of the method (or function) being inlined.
            </p>
          </field>
          <field name="isDeclaration">
            <ref>bool</ref>
            <p>
              True if the declaration of the method is selected.
              So all references should be inlined.
            </p>
          </field>
        </feedback>
        <options>
          <field name="deleteSource">
            <ref>bool</ref>
            <p>
              True if the method being inlined should be removed.
              It is an error if this field is true and inlineAll is false.
            </p>
          </field>
          <field name="inlineAll">
            <ref>bool</ref>
            <p>
              True if all invocations of the method should be inlined,
              or false if only the invocation site used to create this
              refactoring should be inlined.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="MOVE_FILE">
        <p>
          Move the given file and update all of the references to that file
          and from it. The move operation is supported in general case - for
          renaming a file in the same folder, moving it to a different folder
          or both.
        </p>
        <p>
          The refactoring must be activated before an actual file moving
          operation is performed.
        </p>
        <p>
          The "offset" and "length" fields from the request are ignored, but the
          file specified in the request specifies the file to be moved.
        </p>
        <options>
          <field name="newFile">
            <ref>FilePath</ref>
            <p>
              The new file path to which the given file is being moved.
            </p>
          </field>
        </options>
      </refactoring>
      <refactoring kind="RENAME">
        <p>
          Rename a given element and all of the references to that
          element.
        </p>
        <p>
          It is an error if the range contains anything other than all
          or part of the name of a single function (including methods,
          getters and setters), variable (including fields, parameters
          and local variables), class or function type.
        </p>
        <feedback>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset to the beginning of the name selected to be
              renamed.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name selected to be renamed.
            </p>
          </field>
          <field name="elementKindName">
            <ref>String</ref>
            <p>
              The human-readable description of the kind of element being
              renamed (such as “class” or “function type
              alias”).
            </p>
          </field>
          <field name="oldName">
            <ref>String</ref>
            <p>
              The old name of the element before the refactoring.
            </p>
          </field>
        </feedback>
        <options>
          <field name="newName">
            <ref>String</ref>
            <p>
              The name that the element should have after the
              refactoring.
            </p>
          </field>
        </options>
      </refactoring>
    </refactorings>
    <h2>Errors</h2>
    <p>
      This section contains a list of all of the errors that are
      produced by the server and the data that is returned with each.
    </p>
    <p>
      TBD
    </p>
    <h2 class="domain"><a name="index">Index</a></h2>
    <index></index>
  </body>
</html>
