<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.2.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>
    <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"
}</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>
      </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>