<!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 target directories
              that should override the normal package: URI resolution
              mechanism.  The analyzer will behave as though each
              source directory in the map contains a special
              pubspec.yaml file which resolves any package: URI to the
              corresponding path within the target directory.  The
              effect is the same as specifying the target directory as
              a "--package_root" parameter to the Dart VM when
              executing any Dart file inside the source directory.
            </p>
            <p>
              Files in any directories that are not overridden by this
              mapping have their package: URI's resolved using the
              normal pubspec.yaml mechanism.  If this field is absent,
              or the empty map is specified, that indicates that the
              normal pubspec.yaml mechanism should always be used.
            </p>
          </field>
        </params>
      </request>
     <request method="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>
