<html><head>
    <meta charset="UTF-8">
    <title>Analysis Server API Specification</title>
  <style>body {
  font-family: sans-serif, serif;
  padding-left: 5%;
  padding-right: 5%;
}
h1 {
  text-align: center;
}
h2.domain {
  border-bottom: 3px solid rgb(160, 160, 160);
}
pre {
  margin: 0px;
}
div.box {
  border: 1px solid rgb(0, 0, 0);
  background-color: rgb(207, 226, 243);
  padding: 0.5em;
}
div.hangingIndent {
  padding-left: 3em;
  text-indent: -3em;
}
dt {
  margin-top: 1em;
  margin-bottom: 1em;
}
dt.notification {
  font-weight: bold;
}
dt.refactoring {
  font-weight: bold;
}
dt.request {
  font-weight: bold;
}
dt.typeDefinition {
  font-weight: bold;
}
</style></head>
  <body>
    <h1>Analysis Server API Specification</h1>
    <h1 style="color:#999999">Version 1.3.0</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>
    <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>
    </blockquote>
    <h2 class="domain"><a name="domain_server">Domain: server</a></h2>
      <p>
        The server domain contains API’s related to the execution of
        the server.
      </p>
      
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request">server.getVersion</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "server.getVersion"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>version</b>": String
  }
}</pre></div>
        <p>Return the version number of the analysis server.</p>
        
      <h4>Returns</h4><dl><dt class="field"><b><i>version ( String )</i></b></dt><dd>
            
            <p>The version number of the analysis server.</p>
          </dd></dl></dd><dt class="request">server.shutdown</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "server.shutdown"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
      </dd><dt class="request">server.setSubscriptions</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "server.setSubscriptions"
  "params": {
    "<b>subscriptions</b>": List&lt;<a href="#type_ServerService">ServerService</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>subscriptions ( List&lt;<a href="#type_ServerService">ServerService</a>&gt; )</i></b></dt><dd>
            
            <p>A list of the services being subscribed to.</p>
          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification">server.connected</dt><dd><div class="box"><pre>notification: {
  "event": "server.connected"
  "params": {
    "<b>version</b>": String
  }
}</pre></div>
        <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>
       
      <h4>Parameters</h4><dl><dt class="field"><b><i>version ( String )</i></b></dt><dd>
            
            <p>The version number of the analysis server.</p>
          </dd></dl></dd><dt class="notification">server.error</dt><dd><div class="box"><pre>notification: {
  "event": "server.error"
  "params": {
    "<b>isFatal</b>": bool
    "<b>message</b>": String
    "<b>stackTrace</b>": String
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>isFatal ( bool )</i></b></dt><dd>
            
            <p>
              True if the error is a fatal error, meaning that the
              server will shutdown automatically after sending this
              notification.
            </p>
          </dd><dt class="field"><b><i>message ( String )</i></b></dt><dd>
            
            <p>
              The error message indicating what kind of error was
              encountered.
            </p>
          </dd><dt class="field"><b><i>stackTrace ( String )</i></b></dt><dd>
            
            <p>
              The stack trace associated with the generation of the
              error, used for debugging the server.
            </p>
          </dd></dl></dd><dt class="notification">server.status</dt><dd><div class="box"><pre>notification: {
  "event": "server.status"
  "params": {
    "<b>analysis</b>": <span style="color:#999999">optional</span> <a href="#type_AnalysisStatus">AnalysisStatus</a>
    "<b>pub</b>": <span style="color:#999999">optional</span> <a href="#type_PubStatus">PubStatus</a>
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>analysis ( <span style="color:#999999">optional</span> <a href="#type_AnalysisStatus">AnalysisStatus</a> )</i></b></dt><dd>
            
            <p>
              The current status of analysis, including whether
              analysis is being performed and if so what is being
              analyzed.
            </p>
          </dd><dt class="field"><b><i>pub ( <span style="color:#999999">optional</span> <a href="#type_PubStatus">PubStatus</a> )</i></b></dt><dd>
            
            <p>
              The current status of pub execution, indicating whether we are
              currently running pub.
            </p>
          </dd></dl></dd></dl>
    <h2 class="domain"><a name="domain_analysis">Domain: analysis</a></h2>
      <p>
        The analysis domain contains API’s related to the analysis of
        files.
      </p>
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request">analysis.getErrors</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.getErrors"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>errors</b>": List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file for which errors are being requested.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>errors ( List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt; )</i></b></dt><dd>
            
            <p>
              The errors associated with the file.
            </p>
          </dd></dl></dd><dt class="request">analysis.getHover</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.getHover"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>hovers</b>": List&lt;<a href="#type_HoverInformation">HoverInformation</a>&gt;
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file in which hover information is being requested.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset for which hover information is being requested.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>hovers ( List&lt;<a href="#type_HoverInformation">HoverInformation</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="request">analysis.getLibraryDependencies</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.getLibraryDependencies"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>libraries</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
    "<b>packageMap</b>": Map&lt;String, Map&lt;String, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;&gt;
  }
}</pre></div>
        <p>
          Return library dependency information for use in client-side indexing
          and package URI resolution.
        </p>
        
      <h4>Returns</h4><dl><dt class="field"><b><i>libraries ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
              <p>
                A list of the paths of library elements referenced by
                files in existing analysis roots.
              </p>
            </dd><dt class="field"><b><i>packageMap ( Map&lt;String, Map&lt;String, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;&gt; )</i></b></dt><dd>
              
              <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>
            </dd></dl></dd><dt class="request">analysis.getNavigation</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.getNavigation"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
    "<b>length</b>": int
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
    "<b>targets</b>": List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;
    "<b>regions</b>": List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file in which navigation information is being requested.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the region for which navigation information is being
              requested.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the region for which navigation information is being
              requested.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>files ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the paths of files that are referenced by the navigation
              targets.
            </p>
          </dd><dt class="field"><b><i>targets ( List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the navigation targets that are referenced by the
              navigation regions.
            </p>
          </dd><dt class="field"><b><i>regions ( List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the navigation regions within the requested region of
              the file.
            </p>
          </dd></dl></dd><dt class="request">analysis.reanalyze</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.reanalyze"
  "params": {
    "<b>roots</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_FilePath">FilePath</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>roots ( <span style="color:#999999">optional</span> List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the analysis roots that are to be re-analyzed.
            </p>
          </dd></dl></dd><dt class="request">analysis.setAnalysisRoots</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.setAnalysisRoots"
  "params": {
    "<b>included</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
    "<b>excluded</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
    "<b>packageRoots</b>": <span style="color:#999999">optional</span> Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_FilePath">FilePath</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>included ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the files and directories that should be
              analyzed.
            </p>
          </dd><dt class="field"><b><i>excluded ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the files and directories within the
              included directories that should not be analyzed.
            </p>
          </dd><dt class="field"><b><i>packageRoots ( <span style="color:#999999">optional</span> Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="request">analysis.setPriorityFiles</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.setPriorityFiles"
  "params": {
    "<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>files ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <p>
              The files that are to be a priority for analysis.
            </p>
          </dd></dl></dd><dt class="request">analysis.setSubscriptions</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.setSubscriptions"
  "params": {
    "<b>subscriptions</b>": Map&lt;<a href="#type_AnalysisService">AnalysisService</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <p>
          Subscribe for services. 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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>subscriptions ( Map&lt;<a href="#type_AnalysisService">AnalysisService</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt; )</i></b></dt><dd>
            
            <p>
              A table mapping services to a list of the files being
              subscribed to the service.
            </p>
          </dd></dl></dd><dt class="request">analysis.updateContent</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.updateContent"
  "params": {
    "<b>files</b>": Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_AddContentOverlay">AddContentOverlay</a> | <a href="#type_ChangeContentOverlay">ChangeContentOverlay</a> | <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>files ( Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_AddContentOverlay">AddContentOverlay</a> | <a href="#type_ChangeContentOverlay">ChangeContentOverlay</a> | <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>&gt; )</i></b></dt><dd>
            
            <p>
              A table mapping the files whose content has changed to a
              description of the content change.
            </p>
          </dd></dl><h4>Returns</h4><dl></dl></dd><dt class="request">analysis.updateOptions</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.updateOptions"
  "params": {
    "<b>options</b>": <a href="#type_AnalysisOptions">AnalysisOptions</a>
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>options ( <a href="#type_AnalysisOptions">AnalysisOptions</a> )</i></b></dt><dd>
            
            <p>
              The options that are to be used to control analysis.
            </p>
          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification">analysis.errors</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.errors"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>errors</b>": List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the errors.
            </p>
          </dd><dt class="field"><b><i>errors ( List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt; )</i></b></dt><dd>
            
            <p>
              The errors contained in the file.
            </p>
          </dd></dl></dd><dt class="notification">analysis.flushResults</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.flushResults"
  "params": {
    "<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>files ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <p>
              The files that are no longer being analyzed.
            </p>
          </dd></dl></dd><dt class="notification">analysis.folding</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.folding"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>regions</b>": List&lt;<a href="#type_FoldingRegion">FoldingRegion</a>&gt;
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the folding regions.
            </p>
          </dd><dt class="field"><b><i>regions ( List&lt;<a href="#type_FoldingRegion">FoldingRegion</a>&gt; )</i></b></dt><dd>
            
            <p>
              The folding regions contained in the file.
            </p>
          </dd></dl></dd><dt class="notification">analysis.highlights</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.highlights"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>regions</b>": List&lt;<a href="#type_HighlightRegion">HighlightRegion</a>&gt;
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the highlight regions.
            </p>
          </dd><dt class="field"><b><i>regions ( List&lt;<a href="#type_HighlightRegion">HighlightRegion</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="notification">analysis.invalidate</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.invalidate"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
    "<b>length</b>": int
    "<b>delta</b>": int
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file whose information has been invalidated.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the invalidated region.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the invalidated region.
            </p>
          </dd><dt class="field"><b><i>delta ( int )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="notification">analysis.navigation</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.navigation"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>regions</b>": List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;
    "<b>targets</b>": List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;
    "<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the navigation regions.
            </p>
          </dd><dt class="field"><b><i>regions ( List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>targets ( List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt; )</i></b></dt><dd>
            
            <p>
              The navigation targets referenced in the file.
              They are referenced by <tt>NavigationRegion</tt>s by their
              index in this array.
            </p>
          </dd><dt class="field"><b><i>files ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="notification">analysis.occurrences</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.occurrences"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>occurrences</b>": List&lt;<a href="#type_Occurrences">Occurrences</a>&gt;
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file in which the references occur.
            </p>
          </dd><dt class="field"><b><i>occurrences ( List&lt;<a href="#type_Occurrences">Occurrences</a>&gt; )</i></b></dt><dd>
            
            <p>
              The occurrences of references to elements within the
              file.
            </p>
          </dd></dl></dd><dt class="notification">analysis.outline</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.outline"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>outline</b>": <a href="#type_Outline">Outline</a>
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file with which the outline is associated.
            </p>
          </dd><dt class="field"><b><i>outline ( <a href="#type_Outline">Outline</a> )</i></b></dt><dd>
            
            <p>
              The outline associated with the file.
            </p>
          </dd></dl></dd><dt class="notification">analysis.overrides</dt><dd><div class="box"><pre>notification: {
  "event": "analysis.overrides"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>overrides</b>": List&lt;<a href="#type_Override">Override</a>&gt;
  }
}</pre></div>
        <p>
          Reports the overridding 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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file with which the overrides are associated.
            </p>
          </dd><dt class="field"><b><i>overrides ( List&lt;<a href="#type_Override">Override</a>&gt; )</i></b></dt><dd>
            
            <p>
              The overrides associated with the file.
            </p>
          </dd></dl></dd></dl>
    <h2 class="domain"><a name="domain_completion">Domain: completion</a></h2>
      <p>
        The code completion domain contains commands related to
        getting code completion suggestions.
      </p>
      
      
    <h3>Requests</h3><dl><dt class="request">completion.getSuggestions</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "completion.getSuggestions"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
  }
}</pre><br><pre>response: {
  "<b>id</b>": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>id</b>": <a href="#type_CompletionId">CompletionId</a>
  }
}</pre></div>
        <p>
          Request that completion suggestions for the given offset in
          the given file be returned.
        </p>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the point at which suggestions are
              to be made.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset within the file at which suggestions are to
              be made.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <a href="#type_CompletionId">CompletionId</a> )</i></b></dt><dd>
            
            <p>
              The identifier used to associate results with this
              completion request.
            </p>
          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification">completion.results</dt><dd><div class="box"><pre>notification: {
  "event": "completion.results"
  "params": {
    "<b>id</b>": <a href="#type_CompletionId">CompletionId</a>
    "<b>replacementOffset</b>": int
    "<b>replacementLength</b>": int
    "<b>results</b>": List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;
    "<b>isLast</b>": bool
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_CompletionId">CompletionId</a> )</i></b></dt><dd>
            
            <p>
              The id associated with the completion.
            </p>
          </dd><dt class="field"><b><i>replacementOffset ( int )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>replacementLength ( int )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>results ( List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>isLast ( bool )</i></b></dt><dd>
            
            <p>
              True if this is that last set of results that will be
              returned for the indicated completion.
            </p>
          </dd></dl></dd></dl>
    <h2 class="domain"><a name="domain_search">Domain: search</a></h2>
      <p>
        The search domain contains commands related to searches that
        can be performed against the code base.
      </p>
      
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request">search.findElementReferences</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "search.findElementReferences"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
    "<b>includePotential</b>": bool
  }
}</pre><br><pre>response: {
  "<b>id</b>": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>id</b>": <span style="color:#999999">optional</span> <a href="#type_SearchId">SearchId</a>
    "<b>element</b>": <span style="color:#999999">optional</span> <a href="#type_Element">Element</a>
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the declaration of or reference to
              the element used to define the search.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset within the file of the declaration of or
              reference to the element.
            </p>
          </dd><dt class="field"><b><i>includePotential ( bool )</i></b></dt><dd>
            
            <p>
              True if potential matches are to be included in the
              results.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <span style="color:#999999">optional</span> <a href="#type_SearchId">SearchId</a> )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>element ( <span style="color:#999999">optional</span> <a href="#type_Element">Element</a> )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="request">search.findMemberDeclarations</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "search.findMemberDeclarations"
  "params": {
    "<b>name</b>": String
  }
}</pre><br><pre>response: {
  "<b>id</b>": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>id</b>": <a href="#type_SearchId">SearchId</a>
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>name ( String )</i></b></dt><dd>
            
            <p>
              The name of the declarations to be found.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <a href="#type_SearchId">SearchId</a> )</i></b></dt><dd>
            
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </dd></dl></dd><dt class="request">search.findMemberReferences</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "search.findMemberReferences"
  "params": {
    "<b>name</b>": String
  }
}</pre><br><pre>response: {
  "<b>id</b>": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>id</b>": <a href="#type_SearchId">SearchId</a>
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>name ( String )</i></b></dt><dd>
            
            <p>
              The name of the references to be found.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <a href="#type_SearchId">SearchId</a> )</i></b></dt><dd>
            
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </dd></dl></dd><dt class="request">search.findTopLevelDeclarations</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "search.findTopLevelDeclarations"
  "params": {
    "<b>pattern</b>": String
  }
}</pre><br><pre>response: {
  "<b>id</b>": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>id</b>": <a href="#type_SearchId">SearchId</a>
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>pattern ( String )</i></b></dt><dd>
            
            <p>
              The regular expression used to match the names of the
              declarations to be found.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <a href="#type_SearchId">SearchId</a> )</i></b></dt><dd>
            
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </dd></dl></dd><dt class="request">search.getTypeHierarchy</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "search.getTypeHierarchy"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>hierarchyItems</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;
  }
}</pre></div>
        <p>
          Return the type hierarchy of the class declared or
          referenced at the given location.
        </p>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the declaration or reference to the
              type for which a hierarchy is being requested.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the name of the type within the file.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>hierarchyItems ( <span style="color:#999999">optional</span> List&lt;<a href="#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification">search.results</dt><dd><div class="box"><pre>notification: {
  "event": "search.results"
  "params": {
    "<b>id</b>": <a href="#type_SearchId">SearchId</a>
    "<b>results</b>": List&lt;<a href="#type_SearchResult">SearchResult</a>&gt;
    "<b>isLast</b>": bool
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_SearchId">SearchId</a> )</i></b></dt><dd>
            
            <p>
              The id associated with the search.
            </p>
          </dd><dt class="field"><b><i>results ( List&lt;<a href="#type_SearchResult">SearchResult</a>&gt; )</i></b></dt><dd>
            
            <p>
              The search results being reported.
            </p>
          </dd><dt class="field"><b><i>isLast ( bool )</i></b></dt><dd>
            
            <p>
              True if this is that last set of results that will be
              returned for the indicated search.
            </p>
          </dd></dl></dd></dl>
    <h2 class="domain"><a name="domain_edit">Domain: edit</a></h2>
      <p>
        The edit domain contains commands related to edits that can be
        applied to the code.
      </p>
      
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request">edit.format</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.format"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>selectionOffset</b>": int
    "<b>selectionLength</b>": int
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>edits</b>": List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt;
    "<b>selectionOffset</b>": int
    "<b>selectionLength</b>": int
  }
}</pre></div>
        <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.
        </p>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the code to be formatted.
            </p>
          </dd><dt class="field"><b><i>selectionOffset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the current selection in the file.
            </p>
          </dd><dt class="field"><b><i>selectionLength ( int )</i></b></dt><dd>
            
            <p>
              The length of the current selection in the file.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>edits ( List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>selectionOffset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the selection after formatting the code.
            </p>
          </dd><dt class="field"><b><i>selectionLength ( int )</i></b></dt><dd>
            
            <p>
              The length of the selection after formatting the code.
            </p>
          </dd></dl></dd><dt class="request">edit.getAssists</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.getAssists"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
    "<b>length</b>": int
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>assists</b>": List&lt;<a href="#type_SourceChange">SourceChange</a>&gt;
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the code for which assists are being
              requested.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the code for which assists are being
              requested.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the code for which assists are being
              requested.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>assists ( List&lt;<a href="#type_SourceChange">SourceChange</a>&gt; )</i></b></dt><dd>
            
            <p>
              The assists that are available at the given location.
            </p>
          </dd></dl></dd><dt class="request">edit.getAvailableRefactorings</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.getAvailableRefactorings"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
    "<b>length</b>": int
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>kinds</b>": List&lt;<a href="#type_RefactoringKind">RefactoringKind</a>&gt;
  }
}</pre></div>
        <p>
          Get a list of the kinds of refactorings that are valid for
          the given selection in the given file.
        </p>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the code on which the refactoring
              would be based.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the code on which the refactoring would be
              based.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the code on which the refactoring would be
              based.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>kinds ( List&lt;<a href="#type_RefactoringKind">RefactoringKind</a>&gt; )</i></b></dt><dd>
            
            <p>
              The kinds of refactorings that are valid for the given
              selection.
            </p>
          </dd></dl></dd><dt class="request">edit.getFixes</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.getFixes"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>fixes</b>": List&lt;<a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt;
  }
}</pre></div>
        <p>
          Return the set of fixes that are available for the errors at
          a given offset in a given file.
        </p>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the errors for which fixes are being
              requested.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset used to select the errors for which fixes
              will be returned.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>fixes ( List&lt;<a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt; )</i></b></dt><dd>
            
            <p>
              The fixes that are available for the errors at the given offset.
            </p>
          </dd></dl></dd><dt class="request">edit.getRefactoring</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.getRefactoring"
  "params": {
    "<b>kind</b>": <a href="#type_RefactoringKind">RefactoringKind</a>
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>offset</b>": int
    "<b>length</b>": int
    "<b>validateOnly</b>": bool
    "<b>options</b>": <span style="color:#999999">optional</span> <a href="#type_RefactoringOptions">RefactoringOptions</a>
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>initialProblems</b>": List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
    "<b>optionsProblems</b>": List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
    "<b>finalProblems</b>": List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
    "<b>feedback</b>": <span style="color:#999999">optional</span> <a href="#type_RefactoringFeedback">RefactoringFeedback</a>
    "<b>change</b>": <span style="color:#999999">optional</span> <a href="#type_SourceChange">SourceChange</a>
    "<b>potentialEdits</b>": <span style="color:#999999">optional</span> List&lt;String&gt;
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>kind ( <a href="#type_RefactoringKind">RefactoringKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of refactoring to be performed.
            </p>
          </dd><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the code involved in the
              refactoring.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the region involved in the refactoring.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the region involved in the refactoring.
            </p>
          </dd><dt class="field"><b><i>validateOnly ( bool )</i></b></dt><dd>
            
            <p>
              True if the client is only requesting that the values of
              the options be validated and no change be generated.
            </p>
          </dd><dt class="field"><b><i>options ( <span style="color:#999999">optional</span> <a href="#type_RefactoringOptions">RefactoringOptions</a> )</i></b></dt><dd>
            
            <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>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>initialProblems ( List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>optionsProblems ( List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>finalProblems ( List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>feedback ( <span style="color:#999999">optional</span> <a href="#type_RefactoringFeedback">RefactoringFeedback</a> )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>change ( <span style="color:#999999">optional</span> <a href="#type_SourceChange">SourceChange</a> )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>potentialEdits ( <span style="color:#999999">optional</span> List&lt;String&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="request">edit.sortMembers</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.sortMembers"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>edit</b>": <a href="#type_SourceFileEdit">SourceFileEdit</a>
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The Dart file to sort.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>edit ( <a href="#type_SourceFileEdit">SourceFileEdit</a> )</i></b></dt><dd>
            
            <p>
              The file edit that is to be applied to the given file to effect
              the sorting.
            </p>
          </dd></dl></dd></dl>
    <h2 class="domain"><a name="domain_execution">Domain: execution</a></h2>
      <p>
        The execution domain contains commands related to providing an execution
        or debugging experience.
      </p>
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request">execution.createContext</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "execution.createContext"
  "params": {
    "<b>contextRoot</b>": <a href="#type_FilePath">FilePath</a>
  }
}</pre><br><pre>response: {
  "<b>id</b>": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>contextRoot ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The path of the Dart or HTML file that will be launched, or the
              path of the directory containing the file.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <a href="#type_ExecutionContextId">ExecutionContextId</a> )</i></b></dt><dd>
            
            <p>
              The identifier used to refer to the execution context that was
              created.
            </p>
          </dd></dl></dd><dt class="request">execution.deleteContext</dt><dd><div class="box"><pre>request: {
  "<b>id</b>": String
  "method": "execution.deleteContext"
  "params": {
    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_ExecutionContextId">ExecutionContextId</a> )</i></b></dt><dd>
            
            <p>
              The identifier of the execution context that is to be deleted.
            </p>
          </dd></dl></dd><dt class="request">execution.mapUri</dt><dd><div class="box"><pre>request: {
  "<b>id</b>": String
  "method": "execution.mapUri"
  "params": {
    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
    "<b>file</b>": <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a>
    "<b>uri</b>": <span style="color:#999999">optional</span> String
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>file</b>": <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a>
    "<b>uri</b>": <span style="color:#999999">optional</span> String
  }
}</pre></div>
        <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>
        
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_ExecutionContextId">ExecutionContextId</a> )</i></b></dt><dd>
            
            <p>
              The identifier of the execution context in which the URI is to be
              mapped.
            </p>
          </dd><dt class="field"><b><i>file ( <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The path of the file to be mapped into a URI.
            </p>
          </dd><dt class="field"><b><i>uri ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              The URI to be mapped into a file path.
            </p>
          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>file ( <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file to which the URI was mapped. This field is omitted if the
              uri field was not given in the request.
            </p>
          </dd><dt class="field"><b><i>uri ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="request">execution.setSubscriptions</dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "execution.setSubscriptions"
  "params": {
    "<b>subscriptions</b>": List&lt;<a href="#type_ExecutionService">ExecutionService</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>subscriptions ( List&lt;<a href="#type_ExecutionService">ExecutionService</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the services being subscribed to.
            </p>
          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification">execution.launchData</dt><dd><div class="box"><pre>notification: {
  "event": "execution.launchData"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>kind</b>": <span style="color:#999999">optional</span> <a href="#type_ExecutableKind">ExecutableKind</a>
    "<b>referencedFiles</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_FilePath">FilePath</a>&gt;
  }
}</pre></div>
        <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>
        
      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file for which launch data is being provided. This will either
              be a Dart library or an HTML file.
            </p>
          </dd><dt class="field"><b><i>kind ( <span style="color:#999999">optional</span> <a href="#type_ExecutableKind">ExecutableKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of the executable file. This field is omitted if the file
              is not a Dart file.
            </p>
          </dd><dt class="field"><b><i>referencedFiles ( <span style="color:#999999">optional</span> List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd></dl>
    
      <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>
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    <dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
        <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>
        
      <dl><dt class="field"><b><i>type = "add"</i></b></dt><dd></dd><dt class="field"><b><i>content ( String )</i></b></dt><dd>
            
            <p>
              The new content of the file.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisError">AnalysisError: object</a></dt><dd>
        <p>
          An indication of an error, warning, or hint that was produced
          by the analysis.
        </p>
        
      <dl><dt class="field"><b><i>severity ( <a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a> )</i></b></dt><dd>
            
            <p>
              The severity of the error.
            </p>
          </dd><dt class="field"><b><i>type ( <a href="#type_AnalysisErrorType">AnalysisErrorType</a> )</i></b></dt><dd>
            
            <p>
              The type of the error.
            </p>
          </dd><dt class="field"><b><i>location ( <a href="#type_Location">Location</a> )</i></b></dt><dd>
            
            <p>
              The location associated with the error.
            </p>
          </dd><dt class="field"><b><i>message ( String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>correction ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisErrorFixes">AnalysisErrorFixes: object</a></dt><dd>
        <p>
          A list of fixes associated with a specific error
        </p>
        
      <dl><dt class="field"><b><i>error ( <a href="#type_AnalysisError">AnalysisError</a> )</i></b></dt><dd>
            
            <p>
              The error with which the fixes are associated.
            </p>
          </dd><dt class="field"><b><i>fixes ( List&lt;<a href="#type_SourceChange">SourceChange</a>&gt; )</i></b></dt><dd>
            
            <p>
              The fixes associated with the error.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisErrorSeverity">AnalysisErrorSeverity: String</a></dt><dd>
        <p>
          An enumeration of the possible severities of analysis
          errors.
        </p>
        
      <dl><dt class="value">INFO</dt><dt class="value">WARNING</dt><dt class="value">ERROR</dt></dl></dd><dt class="typeDefinition"><a name="type_AnalysisErrorType">AnalysisErrorType: String</a></dt><dd>
        <p>
          An enumeration of the possible types of analysis errors.
        </p>
        
      <dl><dt class="value">CHECKED_MODE_COMPILE_TIME_ERROR</dt><dt class="value">COMPILE_TIME_ERROR</dt><dt class="value">HINT</dt><dt class="value">LINT</dt><dt class="value">STATIC_TYPE_WARNING</dt><dt class="value">STATIC_WARNING</dt><dt class="value">SYNTACTIC_ERROR</dt><dt class="value">TODO</dt></dl></dd><dt class="typeDefinition"><a name="type_AnalysisOptions">AnalysisOptions: object</a></dt><dd>
        <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>
        
      <dl><dt class="field"><b><i>enableAsync ( <span style="color:#999999">optional</span> bool )</i></b></dt><dd>
            
            <p><b><i>Deprecated</i></b>/</p><p>
            </p><p>
              True if the client wants to enable support for the
              proposed async feature.
            </p>
          </dd><dt class="field"><b><i>enableDeferredLoading ( <span style="color:#999999">optional</span> bool )</i></b></dt><dd>
            
            <p><b><i>Deprecated</i></b>/</p><p>
            </p><p>
              True if the client wants to enable support for the
              proposed deferred loading feature.
            </p>
          </dd><dt class="field"><b><i>enableEnums ( <span style="color:#999999">optional</span> bool )</i></b></dt><dd>
            
            <p><b><i>Deprecated</i></b>/</p><p>
            </p><p>
              True if the client wants to enable support for the
              proposed enum feature.
            </p>
          </dd><dt class="field"><b><i>generateDart2jsHints ( <span style="color:#999999">optional</span> bool )</i></b></dt><dd>
            
            <p>
              True if hints that are specific to dart2js should be
              generated. This option is ignored if generateHints is false.
            </p>
          </dd><dt class="field"><b><i>generateHints ( <span style="color:#999999">optional</span> bool )</i></b></dt><dd>
            
            <p>
              True if hints should be generated as part of generating
              errors and warnings.
            </p>
          </dd><dt class="field"><b><i>generateLints ( <span style="color:#999999">optional</span> bool )</i></b></dt><dd>
            
            <p>
              True if lints should be generated as part of generating
              errors and warnings.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisService">AnalysisService: String</a></dt><dd>
        <p>
          An enumeration of the services provided by the analysis
          domain.
        </p>
        
      <dl><dt class="value">FOLDING</dt><dt class="value">HIGHLIGHTS</dt><dt class="value">INVALIDATE</dt><dt class="value">NAVIGATION</dt><dt class="value">OCCURRENCES</dt><dt class="value">OUTLINE</dt><dt class="value">OVERRIDES</dt></dl></dd><dt class="typeDefinition"><a name="type_AnalysisStatus">AnalysisStatus: object</a></dt><dd>
        <p>
          An indication of the current state of analysis.
        </p>
        
      <dl><dt class="field"><b><i>isAnalyzing ( bool )</i></b></dt><dd>
            
            <p>True if analysis is currently being performed.</p>
          </dd><dt class="field"><b><i>analysisTarget ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              The name of the current target of analysis. This field is
              omitted if analyzing is false.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_ChangeContentOverlay">ChangeContentOverlay: object</a></dt><dd>
        <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>
        
      <dl><dt class="field"><b><i>type = "change"</i></b></dt><dd></dd><dt class="field"><b><i>edits ( List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt; )</i></b></dt><dd>
            
            <p>
              The edits to be applied to the file.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionId">CompletionId: String</a></dt><dd>
        
        <p>
          An identifier used to associate completion results with a
          completion request.
        </p>
      </dd><dt class="typeDefinition"><a name="type_CompletionSuggestion">CompletionSuggestion: object</a></dt><dd>
        <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>
        
      <dl><dt class="field"><b><i>kind ( <a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of element being suggested.
            </p>
          </dd><dt class="field"><b><i>relevance ( int )</i></b></dt><dd>
            
            <p>
              The relevance of this completion suggestion
              where a higher number indicates a higher relevance.
            </p>
          </dd><dt class="field"><b><i>completion ( String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>selectionOffset ( int )</i></b></dt><dd>
            
            <p>
              The offset, relative to the beginning of the completion,
              of where the selection should be placed after insertion.
            </p>
          </dd><dt class="field"><b><i>selectionLength ( int )</i></b></dt><dd>
            
            <p>
              The number of characters that should be selected after
              insertion.
            </p>
          </dd><dt class="field"><b><i>isDeprecated ( bool )</i></b></dt><dd>
            
            <p>
              True if the suggested element is deprecated.
            </p>
          </dd><dt class="field"><b><i>isPotential ( bool )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>docSummary ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>docComplete ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              The Dartdoc associated with the element being suggested,
              This field is omitted if there is no Dartdoc associated
              with the element.
            </p>
          </dd><dt class="field"><b><i>declaringType ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>element ( <span style="color:#999999">optional</span> <a href="#type_Element">Element</a> )</i></b></dt><dd>
            
            <p>
              Information about the element reference being suggested.
            </p>
          </dd><dt class="field"><b><i>returnType ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>parameterNames ( <span style="color:#999999">optional</span> List&lt;String&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>parameterTypes ( <span style="color:#999999">optional</span> List&lt;String&gt; )</i></b></dt><dd>
            
            <p>
              The types of the parameters of the function or method
              being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </dd><dt class="field"><b><i>requiredParameterCount ( <span style="color:#999999">optional</span> int )</i></b></dt><dd>
            
            <p>
              The number of required parameters for the function or
              method being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </dd><dt class="field"><b><i>hasNamedParameters ( <span style="color:#999999">optional</span> bool )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>parameterName ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>parameterType ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              The type of the options parameter being suggested. This
              field is omitted if the parameterName field is omitted.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionSuggestionKind">CompletionSuggestionKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of elements that can be included
          in a completion suggestion.
        </p>
        
      <dl><dt class="value">ARGUMENT_LIST</dt><dd>
          
            <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>
          </dd><dt class="value">IMPORT</dt><dt class="value">IDENTIFIER</dt><dd>
            
            <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>
          </dd><dt class="value">INVOCATION</dt><dd>
            
            <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>
          </dd><dt class="value">KEYWORD</dt><dd>
            
            <p>
              A keyword is being suggested.
              For suggestions of this kind, the completion is the keyword.
            </p>
          </dd><dt class="value">NAMED_ARGUMENT</dt><dt class="value">OPTIONAL_ARGUMENT</dt><dt class="value">PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_Element">Element: object</a></dt><dd>
        <p>
          Information about an element (something that can be declared
          in code).
        </p>
        
      <dl><dt class="field"><b><i>kind ( <a href="#type_ElementKind">ElementKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of the element.
            </p>
          </dd><dt class="field"><b><i>name ( String )</i></b></dt><dd>
            
            <p>
              The name of the element. This is typically used as the
              label in the outline.
            </p>
          </dd><dt class="field"><b><i>location ( <span style="color:#999999">optional</span> <a href="#type_Location">Location</a> )</i></b></dt><dd>
            
            <p>
              The location of the name in the declaration of the
              element.
            </p>
          </dd><dt class="field"><b><i>flags ( int )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>parameters ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>returnType ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_ElementKind">ElementKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of elements.
        </p>
        
      <dl><dt class="value">CLASS</dt><dt class="value">CLASS_TYPE_ALIAS</dt><dt class="value">COMPILATION_UNIT</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">FIELD</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt class="value">PARAMETER</dt><dt class="value">PREFIX</dt><dt class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNIT_TEST_GROUP</dt><dt class="value">UNIT_TEST_TEST</dt><dt class="value">UNKNOWN</dt></dl></dd><dt class="typeDefinition"><a name="type_ExecutableFile">ExecutableFile: object</a></dt><dd>
        <p>
          A description of an executable file.
        </p>
        
      <dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The path of the executable file.
            </p>
          </dd><dt class="field"><b><i>kind ( <a href="#type_ExecutableKind">ExecutableKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of the executable file.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_ExecutableKind">ExecutableKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of executable files.
        </p>
        
      <dl><dt class="value">CLIENT</dt><dt class="value">EITHER</dt><dt class="value">NOT_EXECUTABLE</dt><dt class="value">SERVER</dt></dl></dd><dt class="typeDefinition"><a name="type_ExecutionContextId">ExecutionContextId: String</a></dt><dd>
        
        <p>
          The identifier for a execution context.
        </p>
      </dd><dt class="typeDefinition"><a name="type_ExecutionService">ExecutionService: String</a></dt><dd>
        <p>
          An enumeration of the services provided by the execution
          domain.
        </p>
        
      <dl><dt class="value">LAUNCH_DATA</dt></dl></dd><dt class="typeDefinition"><a name="type_FilePath">FilePath: String</a></dt><dd>
        
        <p>
          The absolute path of a file.
        </p>
      </dd><dt class="typeDefinition"><a name="type_FoldingKind">FoldingKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of folding regions.
        </p>
        
      <dl><dt class="value">COMMENT</dt><dt class="value">CLASS_MEMBER</dt><dt class="value">DIRECTIVES</dt><dt class="value">DOCUMENTATION_COMMENT</dt><dt class="value">TOP_LEVEL_DECLARATION</dt></dl></dd><dt class="typeDefinition"><a name="type_FoldingRegion">FoldingRegion: object</a></dt><dd>
        <p>
          A description of a region that can be folded.
        </p>
        
      <dl><dt class="field"><b><i>kind ( <a href="#type_FoldingKind">FoldingKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of the region.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the region to be folded.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the region to be folded.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_HighlightRegion">HighlightRegion: object</a></dt><dd>
        <p>
          A description of a region that could have special highlighting
          associated with it.
        </p>
        
      <dl><dt class="field"><b><i>type ( <a href="#type_HighlightRegionType">HighlightRegionType</a> )</i></b></dt><dd>
            
            <p>
              The type of highlight associated with the region.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the region to be highlighted.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the region to be highlighted.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_HighlightRegionType">HighlightRegionType: String</a></dt><dd>
        <p>
          An enumeration of the kinds of highlighting that can be
          applied to files.
        </p>
        
      <dl><dt class="value">ANNOTATION</dt><dt class="value">BUILT_IN</dt><dt class="value">CLASS</dt><dt class="value">COMMENT_BLOCK</dt><dt class="value">COMMENT_DOCUMENTATION</dt><dt class="value">COMMENT_END_OF_LINE</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">DIRECTIVE</dt><dt class="value">DYNAMIC_TYPE</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt class="value">FIELD_STATIC</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_DECLARATION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER_DECLARATION</dt><dt class="value">IDENTIFIER_DEFAULT</dt><dt class="value">IMPORT_PREFIX</dt><dt class="value">KEYWORD</dt><dt class="value">LABEL</dt><dt class="value">LITERAL_BOOLEAN</dt><dt class="value">LITERAL_DOUBLE</dt><dt class="value">LITERAL_INTEGER</dt><dt class="value">LITERAL_LIST</dt><dt class="value">LITERAL_MAP</dt><dt class="value">LITERAL_STRING</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">LOCAL_VARIABLE_DECLARATION</dt><dt class="value">METHOD</dt><dt class="value">METHOD_DECLARATION</dt><dt class="value">METHOD_DECLARATION_STATIC</dt><dt class="value">METHOD_STATIC</dt><dt class="value">PARAMETER</dt><dt class="value">SETTER_DECLARATION</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_NAME_DYNAMIC</dt><dt class="value">TYPE_PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_HoverInformation">HoverInformation: object</a></dt><dd>
        <p>
          The hover information associated with a specific location.
        </p>
        
      <dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the range of characters that encompases the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the range of characters that encompases the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </dd><dt class="field"><b><i>containingLibraryPath ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>containingLibraryName ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>dartdoc ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>elementDescription ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              A human-readable description of the element being
              referenced. This data is omitted if there is no referenced
              element.
            </p>
          </dd><dt class="field"><b><i>elementKind ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>parameter ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>propagatedType ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>staticType ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              The name of the static type of the expression. This data
              is omitted if the location does not correspond to an
              expression.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_LinkedEditGroup">LinkedEditGroup: object</a></dt><dd>
        <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>
        
      <dl><dt class="field"><b><i>positions ( List&lt;<a href="#type_Position">Position</a>&gt; )</i></b></dt><dd>
            
            <p>
              The positions of the regions that should be edited
              simultaneously.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the regions that should be edited
              simultaneously.
            </p>
          </dd><dt class="field"><b><i>suggestions ( List&lt;<a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a>&gt; )</i></b></dt><dd>
            
            <p>
              Pre-computed suggestions for what every region might
              want to be changed to.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_LinkedEditSuggestion">LinkedEditSuggestion: object</a></dt><dd>
        <p>
          A suggestion of a value that could be used to replace all of
          the linked edit regions in a LinkedEditGroup.
        </p>
        
      <dl><dt class="field"><b><i>value ( String )</i></b></dt><dd>
            
            <p>
              The value that could be used to replace all of the linked
              edit regions.
            </p>
          </dd><dt class="field"><b><i>kind ( <a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of value being proposed.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_LinkedEditSuggestionKind">LinkedEditSuggestionKind: String</a></dt><dd>
        <p>
          An enumeration of the kind of values that can be suggested
          for a linked edit.
        </p>
        
      <dl><dt class="value">METHOD</dt><dt class="value">PARAMETER</dt><dt class="value">TYPE</dt><dt class="value">VARIABLE</dt></dl></dd><dt class="typeDefinition"><a name="type_Location">Location: object</a></dt><dd>
        <p>
          A location (character range) within a file.
        </p>
        
      <dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the range.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the range.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the range.
            </p>
          </dd><dt class="field"><b><i>startLine ( int )</i></b></dt><dd>
            
            <p>
              The one-based index of the line containing the first
              character of the range.
            </p>
          </dd><dt class="field"><b><i>startColumn ( int )</i></b></dt><dd>
            
            <p>
              The one-based index of the column containing the first
              character of the range.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_NavigationRegion">NavigationRegion: object</a></dt><dd>
        <p>
          A description of a region from which the user can navigate to
          the declaration of an element.
        </p>
        
      <dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the region from which the user can navigate.
            </p>
          </dd><dt class="field"><b><i>targets ( List&lt;int&gt; )</i></b></dt><dd>
            
            <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.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_NavigationTarget">NavigationTarget: object</a></dt><dd>
        <p>
          A description of a target to which the user can navigate.
        </p>
        
      <dl><dt class="field"><b><i>kind ( <a href="#type_ElementKind">ElementKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of the element.
            </p>
          </dd><dt class="field"><b><i>fileIndex ( int )</i></b></dt><dd>
            
            <p>
              The index of the file (in the enclosing navigation response) to
              navigate to.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the region from which the user can navigate.
            </p>
          </dd><dt class="field"><b><i>startLine ( int )</i></b></dt><dd>
            
            <p>
              The one-based index of the line containing the first
              character of the region.
            </p>
          </dd><dt class="field"><b><i>startColumn ( int )</i></b></dt><dd>
            
            <p>
              The one-based index of the column containing the first
              character of the region.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_Occurrences">Occurrences: object</a></dt><dd>
        <p>
          A description of the references to a single element within a
          single file.
        </p>
        
      <dl><dt class="field"><b><i>element ( <a href="#type_Element">Element</a> )</i></b></dt><dd>
            
            <p>
              The element that was referenced.
            </p>
          </dd><dt class="field"><b><i>offsets ( List&lt;int&gt; )</i></b></dt><dd>
            
            <p>
              The offsets of the name of the referenced element within
              the file.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the name of the referenced element.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_Outline">Outline: object</a></dt><dd>
        <p>
          An node in the outline structure of a file.
        </p>
        
      <dl><dt class="field"><b><i>element ( <a href="#type_Element">Element</a> )</i></b></dt><dd>
            
            <p>
              A description of the element represented by this node.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the element.
            </p>
          </dd><dt class="field"><b><i>children ( <span style="color:#999999">optional</span> List&lt;<a href="#type_Outline">Outline</a>&gt; )</i></b></dt><dd>
            
            <p>
              The children of the node. The field will be omitted if the
              node has no children.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_Override">Override: object</a></dt><dd>
        <p>
          A description of a member that overrides an inherited member.
        </p>
        
      <dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the name of the overriding member.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the name of the overriding member.
            </p>
          </dd><dt class="field"><b><i>superclassMember ( <span style="color:#999999">optional</span> <a href="#type_OverriddenMember">OverriddenMember</a> )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>interfaceMembers ( <span style="color:#999999">optional</span> List&lt;<a href="#type_OverriddenMember">OverriddenMember</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_OverriddenMember">OverriddenMember: object</a></dt><dd>
        <p>
          A description of a member that is being overridden.
        </p>
        
      <dl><dt class="field"><b><i>element ( <a href="#type_Element">Element</a> )</i></b></dt><dd>
            
            <p>
              The element that is being overridden.
            </p>
          </dd><dt class="field"><b><i>className ( String )</i></b></dt><dd>
            
            <p>
              The name of the class in which the member is defined.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_Position">Position: object</a></dt><dd>
        <p>
          A position within a file.
        </p>
        
      <dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the position.
            </p>
          </dd><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the position.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_PubStatus">PubStatus: object</a></dt><dd>
        <p>
          An indication of the current state of pub execution.
        </p>
        
      <dl><dt class="field"><b><i>isListingPackageDirs ( bool )</i></b></dt><dd>
            
            <p>
              True if the server is currently running pub to produce a list of
              package directories.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_RefactoringKind">RefactoringKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of refactorings that can be
          created.
        </p>
        
      <dl><dt class="value">CONVERT_GETTER_TO_METHOD</dt><dt class="value">CONVERT_METHOD_TO_GETTER</dt><dt class="value">EXTRACT_LOCAL_VARIABLE</dt><dt class="value">EXTRACT_METHOD</dt><dt class="value">INLINE_LOCAL_VARIABLE</dt><dt class="value">INLINE_METHOD</dt><dt class="value">MOVE_FILE</dt><dt class="value">RENAME</dt><dt class="value">SORT_MEMBERS</dt></dl></dd><dt class="typeDefinition"><a name="type_RefactoringMethodParameter">RefactoringMethodParameter: object</a></dt><dd>
        <p>
          A description of a parameter in a method refactoring.
        </p>
        
      <dl><dt class="field"><b><i>id ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              The unique identifier of the parameter.
              Clients may omit this field for the parameters they want to add.
            </p>
          </dd><dt class="field"><b><i>kind ( <a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of the parameter.
            </p>
          </dd><dt class="field"><b><i>type ( String )</i></b></dt><dd>
            
            <p>
              The type that should be given to the parameter, or the return type
              of the parameter's function type.
            </p>
          </dd><dt class="field"><b><i>name ( String )</i></b></dt><dd>
            
            <p>
              The name that should be given to the parameter.
            </p>
          </dd><dt class="field"><b><i>parameters ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_RefactoringFeedback">RefactoringFeedback: object</a></dt><dd>
        <p>
          An abstract superclass of all refactoring feedbacks.
        </p>
        
      <dl></dl></dd><dt class="typeDefinition"><a name="type_RefactoringOptions">RefactoringOptions: object</a></dt><dd>
        <p>
          An abstract superclass of all refactoring options.
        </p>
        
      <dl></dl></dd><dt class="typeDefinition"><a name="type_RefactoringMethodParameterKind">RefactoringMethodParameterKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of parameters.
        </p>
        
      <dl><dt class="value">REQUIRED</dt><dt class="value">POSITIONAL</dt><dt class="value">NAMED</dt></dl></dd><dt class="typeDefinition"><a name="type_RefactoringProblem">RefactoringProblem: object</a></dt><dd>
        <p>
          A description of a problem related to a refactoring.
        </p>
        
      <dl><dt class="field"><b><i>severity ( <a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a> )</i></b></dt><dd>
            
            <p>
              The severity of the problem being represented.
            </p>
          </dd><dt class="field"><b><i>message ( String )</i></b></dt><dd>
            
            <p>
              A human-readable description of the problem being
              represented.
            </p>
          </dd><dt class="field"><b><i>location ( <span style="color:#999999">optional</span> <a href="#type_Location">Location</a> )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_RefactoringProblemSeverity">RefactoringProblemSeverity: String</a></dt><dd>
        <p>
          An enumeration of the severities of problems that can be
          returned by the refactoring requests.
        </p>
        
      <dl><dt class="value">INFO</dt><dt class="value">WARNING</dt><dt class="value">ERROR</dt><dt class="value">FATAL</dt></dl></dd><dt class="typeDefinition"><a name="type_RemoveContentOverlay">RemoveContentOverlay: object</a></dt><dd>
        <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>
        
      <dl><dt class="field"><b><i>type = "remove"</i></b></dt><dd></dd></dl></dd><dt class="typeDefinition"><a name="type_RequestError">RequestError: object</a></dt><dd>
        <p>
          An indication of a problem with the execution of the server,
          typically in response to a request.
        </p>
        
      <dl><dt class="field"><b><i>code ( <a href="#type_RequestErrorCode">RequestErrorCode</a> )</i></b></dt><dd>
            
            <p>
              A code that uniquely identifies the error that occurred.
            </p>
          </dd><dt class="field"><b><i>message ( String )</i></b></dt><dd>
            
            <p>
              A short description of the error.
            </p>
          </dd><dt class="field"><b><i>stackTrace ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <p>
              The stack trace associated with processing the request,
              used for debugging the server.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_RequestErrorCode">RequestErrorCode: String</a></dt><dd>
        <p>
          An enumeration of the types of errors that can occur in the
          execution of the server.
        </p>
        
      <dl><dt class="value">CONTENT_MODIFIED</dt><dd>
            
            <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>
          </dd><dt class="value">FORMAT_INVALID_FILE</dt><dd>
            
            <p>
              An "edit.format" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </dd><dt class="value">GET_ERRORS_INVALID_FILE</dt><dd>
            
            <p>
              An "analysis.getErrors" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </dd><dt class="value">INVALID_EXECUTION_CONTEXT</dt><dd>
            
            <p>
              The context root used to create an execution context does not
              exist.
            </p>
          </dd><dt class="value">INVALID_OVERLAY_CHANGE</dt><dd>
            
            <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>
          </dd><dt class="value">INVALID_PARAMETER</dt><dd>
            
            <p>
              One of the method parameters was invalid.
            </p>
          </dd><dt class="value">INVALID_REQUEST</dt><dd>
            
            <p>
              A malformed request was received.
            </p>
          </dd><dt class="value">REFACTORING_REQUEST_CANCELLED</dt><dd>
            
            <p>
              Another refactoring request was received during processing of
              this one.
            </p>
          </dd><dt class="value">SERVER_ALREADY_STARTED</dt><dd>
            
            <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>
          </dd><dt class="value">SERVER_ERROR</dt><dd>
            
            <p>
              An internal error occurred in the analysis server.
              Also see the server.error notification.
            </p>
          </dd><dt class="value">SORT_MEMBERS_INVALID_FILE</dt><dd>
            
            <p>
              An "edit.sortMembers" request specified a FilePath
              which does not match a Dart file in an analysis root.
            </p>
          </dd><dt class="value">SORT_MEMBERS_PARSE_ERRORS</dt><dd>
            
            <p>
              An "edit.sortMembers" request specified a Dart file that has
              scan or parse errors.
            </p>
          </dd><dt class="value">UNANALYZED_PRIORITY_FILES</dt><dd>
            
            <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>
            
          </dd><dt class="value">UNKNOWN_REQUEST</dt><dd>
            
            <p>
              A request was received which the analysis server does
              not recognize, or cannot handle in its current
              configuation.
            </p>
          </dd><dt class="value">UNSUPPORTED_FEATURE</dt><dd>
            
            <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>
            
          </dd></dl></dd><dt class="typeDefinition"><a name="type_SearchId">SearchId: String</a></dt><dd>
        
        <p>
          An identifier used to associate search results with a search
          request.
        </p>
      </dd><dt class="typeDefinition"><a name="type_SearchResult">SearchResult: object</a></dt><dd>
        <p>
          A single result from a search request.
        </p>
        
      <dl><dt class="field"><b><i>location ( <a href="#type_Location">Location</a> )</i></b></dt><dd>
            
            <p>
              The location of the code that matched the search criteria.
            </p>
          </dd><dt class="field"><b><i>kind ( <a href="#type_SearchResultKind">SearchResultKind</a> )</i></b></dt><dd>
            
            <p>
              The kind of element that was found or the kind of
              reference that was found.
            </p>
          </dd><dt class="field"><b><i>isPotential ( bool )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>path ( List&lt;<a href="#type_Element">Element</a>&gt; )</i></b></dt><dd>
            
            <p>
              The elements that contain the result, starting with the
              most immediately enclosing ancestor and ending with the
              library.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_SearchResultKind">SearchResultKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of search results returned by the
          search domain.
        </p>
        
      <dl><dt class="value">DECLARATION</dt><dd>
            
            <p>
              The declaration of an element.
            </p>
          </dd><dt class="value">INVOCATION</dt><dd>
            
            <p>
              The invocation of a function or method.
            </p>
          </dd><dt class="value">READ</dt><dd>
            
            <p>
              A reference to a field, parameter or variable where it is being read.
            </p>
          </dd><dt class="value">READ_WRITE</dt><dd>
            
            <p>
              A reference to a field, parameter or variable where it is being read and written.
            </p>
          </dd><dt class="value">REFERENCE</dt><dd>
            
            <p>
              A reference to an element.
            </p>
          </dd><dt class="value">UNKNOWN</dt><dd>
            
            <p>
              Some other kind of search result.
            </p>
          </dd><dt class="value">WRITE</dt><dd>
            
            <p>
              A reference to a field, parameter or variable where it is being written.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_ServerService">ServerService: String</a></dt><dd>
        <p>
          An enumeration of the services provided by the server domain.
        </p>
        
      <dl><dt class="value">STATUS</dt></dl></dd><dt class="typeDefinition"><a name="type_SourceChange">SourceChange: object</a></dt><dd>
        <p>
          A description of a set of edits that implement a single
          conceptual change.
        </p>
        
      <dl><dt class="field"><b><i>message ( String )</i></b></dt><dd>
            
            <p>
              A human-readable description of the change to be applied.
            </p>
          </dd><dt class="field"><b><i>edits ( List&lt;<a href="#type_SourceFileEdit">SourceFileEdit</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the edits used to effect the change, grouped by
              file.
            </p>
          </dd><dt class="field"><b><i>linkedEditGroups ( List&lt;<a href="#type_LinkedEditGroup">LinkedEditGroup</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the linked editing groups used to customize
              the changes that were made.
            </p>
          </dd><dt class="field"><b><i>selection ( <span style="color:#999999">optional</span> <a href="#type_Position">Position</a> )</i></b></dt><dd>
            
            <p>
              The position that should be selected after the edits
              have been applied.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_SourceEdit">SourceEdit: object</a></dt><dd>
        <p>
          A description of a single change to a single file.
        </p>
        
      <dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset of the region to be modified.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the region to be modified.
            </p>
          </dd><dt class="field"><b><i>replacement ( String )</i></b></dt><dd>
            
            <p>
              The code that is to replace the specified region in the
              original code.
            </p>
          </dd><dt class="field"><b><i>id ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_SourceFileEdit">SourceFileEdit: object</a></dt><dd>
        <p>
          A description of a set of changes to a single file.
        </p>
        
      <dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The file containing the code to be modified.
            </p>
          </dd><dt class="field"><b><i>fileStamp ( long )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>edits ( List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt; )</i></b></dt><dd>
            
            <p>
              A list of the edits used to effect the change.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_TypeHierarchyItem">TypeHierarchyItem: object</a></dt><dd>
        <p>
          A representation of a class in a type hierarchy.
        </p>
        
      <dl><dt class="field"><b><i>classElement ( <a href="#type_Element">Element</a> )</i></b></dt><dd>
            
            <p>
              The class element represented by this item.
            </p>
          </dd><dt class="field"><b><i>displayName ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>memberElement ( <span style="color:#999999">optional</span> <a href="#type_Element">Element</a> )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>superclass ( <span style="color:#999999">optional</span> int )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>interfaces ( List&lt;int&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>mixins ( List&lt;int&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>subclasses ( List&lt;int&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd></dl>
    
      <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>
      
      
      
      
      
      
      
      
    <dl><dt class="refactoring">CONVERT_GETTER_TO_METHOD</dt><dd>
        <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>
      <h4>Feedback</h4><p>none</p><h4>Options</h4><p>none</p></dd><dt class="refactoring">CONVERT_METHOD_TO_GETTER</dt><dd>
        <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>
      <h4>Feedback</h4><p>none</p><h4>Options</h4><p>none</p></dd><dt class="refactoring">EXTRACT_LOCAL_VARIABLE</dt><dd>
        <p>
          Create a local variable initialized by a specified
          expression.
        </p>
        <p>
          It is an error if the range contains anything other than a
          complete expression (no partial expressions are allowed).
        </p>
        
        
      <h4>Feedback</h4><dl><dt class="field"><b><i>names ( List&lt;String&gt; )</i></b></dt><dd>
            
            <p>
              The proposed names for the local variable.
            </p>
          </dd><dt class="field"><b><i>offsets ( List&lt;int&gt; )</i></b></dt><dd>
            
            <p>
              The offsets of the expressions that would be replaced by
              a reference to the variable.
            </p>
          </dd><dt class="field"><b><i>lengths ( List&lt;int&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl><h4>Options</h4><dl><dt class="field"><b><i>name ( String )</i></b></dt><dd>
            
            <p>
              The name that the local variable should be given.
            </p>
          </dd><dt class="field"><b><i>extractAll ( bool )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="refactoring">EXTRACT_METHOD</dt><dd>
        <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>
        
        
      <h4>Feedback</h4><dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset to the beginning of the expression or
              statements that will be extracted.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the expression or statements that will be
              extracted.
            </p>
          </dd><dt class="field"><b><i>returnType ( String )</i></b></dt><dd>
            
            <p>
              The proposed return type for the method.
            </p>
          </dd><dt class="field"><b><i>names ( List&lt;String&gt; )</i></b></dt><dd>
            
            <p>
              The proposed names for the method.
            </p>
          </dd><dt class="field"><b><i>canCreateGetter ( bool )</i></b></dt><dd>
            
            <p>
              True if a getter could be created rather than a method.
            </p>
          </dd><dt class="field"><b><i>parameters ( List&lt;<a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt; )</i></b></dt><dd>
            
            <p>
              The proposed parameters for the method.
            </p>
          </dd><dt class="field"><b><i>offsets ( List&lt;int&gt; )</i></b></dt><dd>
            
            <p>
              The offsets of the expressions or statements that would
              be replaced by an invocation of the method.
            </p>
          </dd><dt class="field"><b><i>lengths ( List&lt;int&gt; )</i></b></dt><dd>
            
            <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>
          </dd></dl><h4>Options</h4><dl><dt class="field"><b><i>returnType ( String )</i></b></dt><dd>
            
            <p>
              The return type that should be defined for the method.
            </p>
          </dd><dt class="field"><b><i>createGetter ( bool )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>name ( String )</i></b></dt><dd>
            
            <p>
              The name that the method should be given.
            </p>
          </dd><dt class="field"><b><i>parameters ( List&lt;<a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt; )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>extractAll ( bool )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="refactoring">INLINE_LOCAL_VARIABLE</dt><dd>
        <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>
        
      <h4>Feedback</h4><dl><dt class="field"><b><i>name ( String )</i></b></dt><dd>
            
            <p>
              The name of the variable being inlined.
            </p>
          </dd><dt class="field"><b><i>occurrences ( int )</i></b></dt><dd>
            
            <p>
              The number of times the variable occurs.
            </p>
          </dd></dl><h4>Options</h4><p>none</p></dd><dt class="refactoring">INLINE_METHOD</dt><dd>
        <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>
        
        
      <h4>Feedback</h4><dl><dt class="field"><b><i>className ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
            
            <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>
          </dd><dt class="field"><b><i>methodName ( String )</i></b></dt><dd>
            
            <p>
              The name of the method (or function) being inlined.
            </p>
          </dd><dt class="field"><b><i>isDeclaration ( bool )</i></b></dt><dd>
            
            <p>
              True if the declaration of the method is selected.
              So all references should be inlined.
            </p>
          </dd></dl><h4>Options</h4><dl><dt class="field"><b><i>deleteSource ( bool )</i></b></dt><dd>
            
            <p>
              True if the method being inlined should be removed.
              It is an error if this field is true and inlineAll is false.
            </p>
          </dd><dt class="field"><b><i>inlineAll ( bool )</i></b></dt><dd>
            
            <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>
          </dd></dl></dd><dt class="refactoring">MOVE_FILE</dt><dd>
        <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>
        
      <h4>Feedback</h4><p>none</p><h4>Options</h4><dl><dt class="field"><b><i>newFile ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
            
            <p>
              The new file path to which the given file is being moved.
            </p>
          </dd></dl></dd><dt class="refactoring">RENAME</dt><dd>
        <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>
        
        
      <h4>Feedback</h4><dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
            
            <p>
              The offset to the beginning of the name selected to be
              renamed.
            </p>
          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
            
            <p>
              The length of the name selected to be renamed.
            </p>
          </dd><dt class="field"><b><i>elementKindName ( String )</i></b></dt><dd>
            
            <p>
              The human-readable description of the kind of element being
              renamed (such as “class” or “function type
              alias”).
            </p>
          </dd><dt class="field"><b><i>oldName ( String )</i></b></dt><dd>
            
            <p>
              The old name of the element before the refactoring.
            </p>
          </dd></dl><h4>Options</h4><dl><dt class="field"><b><i>newName ( String )</i></b></dt><dd>
            
            <p>
              The name that the element should have after the
              refactoring.
            </p>
          </dd></dl></dd></dl>
    <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>
  

</body></html>