<!DOCTYPE html><html><head>
    <meta charset="UTF-8">
    <title>Analysis Server API Specification</title>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro|Roboto:500,400italic,300,400" type="text/css"><style>body {
  font-family: 'Roboto', sans-serif;
  max-width: 800px;
  margin: 0 auto;
  padding: 0 16px;
  font-size: 16px;
  line-height: 1.5;
  color: #111;
  background-color: #fdfdfd;
  font-weight: 300;
  -webkit-font-smoothing: auto;
}

h2, h3, h4, h5 {
  margin-bottom: 0;
}

h2.domain {
  border-bottom: 1px solid rgb(200, 200, 200);
  margin-bottom: 0.5em;
}

h4 {
  font-size: 18px;
}

h5 {
  font-size: 16px;
}

p {
  margin-top: 0;
}

pre {
  margin: 0;
  font-family: 'Source Code Pro', monospace;
  font-size: 15px;
}

div.box {
  background-color: rgb(240, 245, 240);
  border-radius: 4px;
  padding: 4px 12px;
  margin: 16px 0;
}

div.hangingIndent {
  padding-left: 3em;
  text-indent: -3em;
}

dl dt {
  font-weight: bold;
}

dl dd {
  margin-left: 16px;
}

dt {
  margin-top: 1em;
}

dt.notification {
  font-weight: bold;
}

dt.refactoring {
  font-weight: bold;
}

dt.request {
  font-weight: bold;
}

dt.typeDefinition {
  font-weight: bold;
}

a {
  text-decoration: none;
}

a:focus, a:hover {
  text-decoration: underline;
}

.deprecated {
  text-decoration: line-through;
}

/* Styles for index */

.subindex ul {
  padding-left: 0;
  margin-left: 0;

  -webkit-margin-before: 0;
  -webkit-margin-start: 0;
  -webkit-padding-start: 0;

  list-style-type: none;
}
</style></head>
  <body>
    <h1>Analysis Server API Specification</h1>
    <h1 style="color:#999999">Version 1.18.1</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/">semver.org</a>).
    </p>
    <h2>Overview</h2>
    <p>
      The analysis server API is a bi-directional client-server
      API. The API is independent of the transport mechanism used, but
      is heavily influenced by a model in which sockets or character
      streams are used to transport JSON-RPC encoded information.
    </p>
    <h3>Transport Mechanism</h3>
    <p>
      The characters passed to the server are expected to be encoded
      using UTF-8.
    </p>
    <p>
      When character streams are used as the transport, messages are
      delineated by newlines. This means, in particular, that the JSON
      encoding process must not introduce newlines within a
      message. Note however that newlines are used in this document
      for readability.
    </p>
    <p>
      It is the client's responsibility to read output from the server to
      avoid its blocking.
    </p>
    <p>
      To ease interoperability with Lisp-based clients (which may not
      be able to easily distinguish between empty lists, empty maps,
      and null), client-to-server communication is allowed to replace
      any instance of "<tt>{}</tt>" or "<tt>[]</tt>" with null. The
      server will always properly represent empty lists as
      "<tt>[]</tt>" and empty maps as "<tt>{}</tt>".
    </p>
    <h3>Communication Structure</h3>
    <p>
      Clients can make a request of the server and the server will
      provide a response for each request that it receives. While many
      of the requests that can be made by a client are informational
      in nature, we have chosen to always return a response so that
      clients can know whether the request was received and was
      correct.
    </p>
    <p>
      There is no guarantee concerning the order in which responses
      will be returned, but there is a guarantee that the server will
      process requests in the order in which they are sent as long as
      the transport mechanism also makes this guarantee. Responses can
      be returned in an order that is different from the order in
      which the requests were received because some requests take
      longer to process than others.
    </p>
    <p>
      Every request is required to have two fields and may have two
      additional optional fields. The first required field is the ‘id’
      field, which is only used by the server to associate a response
      with the request that generated the response. The second
      required field is the ‘method’ field, which is used to determine
      what the server is being requested to do. One optional field is
      the ‘params’ field, whose structure is dependent on the method
      being requested. The structure of this field is described with
      each request for which it is required. The other optional field
      is the 'clientRequestTime' field, which is a number indicating
      the time at which the client made the request (milliseconds
      since epoch). Providing clientRequestTime helps us track
      how responsive analysis server is to client requests
      and better address any issues that occur.
    </p>
    <p>
      Every response has up to three fields. The first field is the
      ‘id’ field, which is always present and whose value is the
      identifier that was passed to the request that generated the
      response. The second field is the ‘error’ field, which is only
      present if an error was encountered while processing the
      request. The third field is the ‘result’ field, whose structure
      is dependent on the method being responded to, and is described
      with each request that will produce it.
    </p>
    <p>
      The server can also communicate to the clients by sending a
      notification. The purpose of these notifications is to provide
      information to clients as it becomes available rather than to
      require that clients poll for it. Unless explicitly stated, all
      notifications are designed to return the complete information
      available at the time the notification is sent; clients are not
      required to update previously communicated
      results. Consequently, the server can and should return partial
      results before all results are available. For example, the
      syntactic errors for a file can be returned as soon as the
      syntactic analysis is complete, and both syntactic and semantic
      errors can be returned together at a later time.
    </p>
    <p>
      Each notification has two fields. The first field is the ‘event’
      field, which identifies the kind of notification. The second
      field is the ‘params’ field, whose structure is dependent on the
      kind of notification being sent. The structure of this field is
      described with each notification.
    </p>
    <p>
      In order to be backward compatible, clients should ignore fields that were
      not specified in the version of the API on which they were based. Clients
      should also use the server.getVersion request to test that the version of
      the server supports an API before using it.
    </p>
    <h3>Eventual Consistency</h3>
    <p>
      The analysis server satisfies requests under the principle of
      <a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventual consistency</a>.
      That is, in some cases it may return responses with the currently available
      results while it's catching up with unprocessed changes.
    </p>
    <h3>Domains</h3>
    <p>
      For convenience, the API is divided into domains. Each domain is specified
      in a separate section below. The specifications of the API’s refer to data
      structures beyond the standard JSON primitives. These data structures are
      documented in the section titled <a href="#types">Types</a>.
    </p>
    
<p><a href="#domain_server">Server</a></p><ul><li><a href="#request_server.getVersion">server.getVersion</a></li>
<li><a href="#request_server.shutdown">server.shutdown</a></li>
<li><a href="#request_server.setSubscriptions">server.setSubscriptions</a></li>
</ul>

<p><a href="#domain_analysis">Analysis</a></p><ul><li><a href="#request_analysis.getErrors">analysis.getErrors</a></li>
<li><a href="#request_analysis.getHover">analysis.getHover</a></li>
<li><a href="#request_analysis.getReachableSources">analysis.getReachableSources</a></li>
<li><a href="#request_analysis.getLibraryDependencies">analysis.getLibraryDependencies</a></li>
<li><a href="#request_analysis.getNavigation">analysis.getNavigation</a></li>
<li><a href="#request_analysis.reanalyze">analysis.reanalyze</a></li>
<li><a href="#request_analysis.setAnalysisRoots">analysis.setAnalysisRoots</a></li>
<li><a href="#request_analysis.setGeneralSubscriptions">analysis.setGeneralSubscriptions</a></li>
<li><a href="#request_analysis.setPriorityFiles">analysis.setPriorityFiles</a></li>
<li><a href="#request_analysis.setSubscriptions">analysis.setSubscriptions</a></li>
<li><a href="#request_analysis.updateContent">analysis.updateContent</a></li>
<li><a class="deprecated" href="#request_analysis.updateOptions">analysis.updateOptions</a></li>
</ul>

<p><a href="#domain_completion">Completion</a></p><ul><li><a href="#request_completion.getSuggestions">completion.getSuggestions</a></li>
</ul>

<p><a href="#domain_search">Search</a></p><ul><li><a href="#request_search.findElementReferences">search.findElementReferences</a></li>
<li><a href="#request_search.findMemberDeclarations">search.findMemberDeclarations</a></li>
<li><a href="#request_search.findMemberReferences">search.findMemberReferences</a></li>
<li><a href="#request_search.findTopLevelDeclarations">search.findTopLevelDeclarations</a></li>
<li><a href="#request_search.getTypeHierarchy">search.getTypeHierarchy</a></li>
</ul>

<p><a href="#domain_edit">Edit</a></p><ul><li><a href="#request_edit.format">edit.format</a></li>
<li><a href="#request_edit.getAssists">edit.getAssists</a></li>
<li><a href="#request_edit.getAvailableRefactorings">edit.getAvailableRefactorings</a></li>
<li><a href="#request_edit.getFixes">edit.getFixes</a></li>
<li><a href="#request_edit.getRefactoring">edit.getRefactoring</a></li>
<li><a href="#request_edit.getStatementCompletion">edit.getStatementCompletion</a></li>
<li><a href="#request_edit.sortMembers">edit.sortMembers</a></li>
<li><a href="#request_edit.organizeDirectives">edit.organizeDirectives</a></li>
</ul>

<p><a href="#domain_execution">Execution</a></p><ul><li><a href="#request_execution.createContext">execution.createContext</a></li>
<li><a href="#request_execution.deleteContext">execution.deleteContext</a></li>
<li><a href="#request_execution.mapUri">execution.mapUri</a></li>
<li><a class="deprecated" href="#request_execution.setSubscriptions">execution.setSubscriptions</a></li>
</ul>

<p><a href="#domain_diagnostic">Diagnostic</a></p><ul><li><a href="#request_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></li>
<li><a href="#request_diagnostic.getServerPort">diagnostic.getServerPort</a></li>
</ul>

    <h3>Command-line Arguments</h3>
    <p>
      The command-line arguments that can be passed to the server.
    </p>
    <h4>Options</h4>
    <blockquote>
    <dl>
      <dt>--client-id</dt>
      <dd>
      <p>
      Specifies an identifier associated with the client. Used when
      generating error reports.
      </p>
      <p>
      Clients are strongly encouraged to provide this information in
      order to improve the quality of information that can be provided
      to them.
      </p>
      </dd>
    </dl>
    <dl>
      <dt>--client-version</dt>
      <dd>
      <p>
      Specifies the version of the client that is communicating with
      the server. Used when generating error reports.
      </p>
      <p>
        Clients are strongly encouraged to provide this information in
        order to improve the quality of information that can be provided
        to them.
      </p>
      </dd>
    </dl>
    <dl>
      <dt class="deprecated">--no-error-notification</dt>
      <dd>
        <p><b>Deprecated:</b> clients should no longer pass this option in</p>
        Disable notifications about errors (see analysis.error). If this
        flag is not specified then notifications will be sent for all
        errors produced for all files in the actual analysis roots.
      </dd>
    </dl>
    <dl>
      <dt>--no-index</dt>
      <dd>
      Disable the server from generating an index. If this flag is passed and an
      API is used that requires an index, then an error, <tt>NO_INDEX_GENERATED</tt>,
      will be thrown. The set of API calls that require an index include:
      refactoring calls, code completions and searching.
      
      </dd>
    </dl>
    <dl>
      <dt class="deprecated">--file-read-mode</dt>
      <dd>
        <p><b>Deprecated:</b> clients should no longer pass this option in</p>
        An enumeration of the ways files can be read from disk. Some clients
        normalize end of line characters which would make the file offset and
        range information incorrect. The default option is <tt>as-is</tt>, but
        can also be set to <tt>normalize-eol-always</tt>. The default option
        (<tt>as-is</tt>) reads files as they are on disk. The
        <tt>normalize-eol-always</tt> option does the following:
        <ul>
          <li>'\r\n' is converted to '\n';</li>
          <li>'\r' by itself is converted to '\n';</li>
          <li>this happens regardless of the OS editor is running on.</li>
        </ul>
      </dd>
    </dl>
    </blockquote>
    <h1>Domains</h1>
    <h2 class="domain"><a name="domain_server">server domain</a></h2>
      <p>
        The server domain contains API’s related to the execution of
        the server.
      </p>
      
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request"><a name="request_server.getVersion">server.getVersion</a></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>version: String</b></dt><dd>
            
            <p>The version number of the analysis server.</p>
          </dd></dl></dd><dt class="request"><a name="request_server.shutdown">server.shutdown</a></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"><a name="request_server.setSubscriptions">server.setSubscriptions</a></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>subscriptions: List&lt;<a href="#type_ServerService">ServerService</a>&gt;</b></dt><dd>
            
            <p>A list of the services being subscribed to.</p>
          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_server.connected">server.connected</a></dt><dd><div class="box"><pre>notification: {
  "event": "server.connected"
  "params": {
    "<b>version</b>": String
    "<b>pid</b>": int
    "<b>sessionId</b>": <span style="color:#999999">optional</span> String
  }
}</pre></div>
        <p>
          Reports that the server is running. This notification is
          issued once after the server has started running but before
          any requests are processed to let the client know that it
          started correctly.
        </p>
        <p>
          It is not possible to subscribe to or unsubscribe from this
          notification.
        </p>
       
      <h4>parameters:</h4><dl><dt class="field"><b>version: String</b></dt><dd>
            
            <p>The version number of the analysis server.</p>
          </dd><dt class="field"><b>pid: int</b></dt><dd>
           
           <p>The process id of the analysis server process.</p>
         </dd><dt class="field"><b>sessionId: String<span style="color:#999999"> (optional)</span></b></dt><dd>
           
           <p>The session id for this session.</p>
         </dd></dl></dd><dt class="notification"><a name="notification_server.error">server.error</a></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>isFatal: bool</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>message: String</b></dt><dd>
            
            <p>
              The error message indicating what kind of error was
              encountered.
            </p>
          </dd><dt class="field"><b>stackTrace: String</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"><a name="notification_server.status">server.status</a></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>analysis: <a href="#type_AnalysisStatus">AnalysisStatus</a><span style="color:#999999"> (optional)</span></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>pub: <a href="#type_PubStatus">PubStatus</a><span style="color:#999999"> (optional)</span></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">analysis domain</a></h2>
      <p>
        The analysis domain contains API’s related to the analysis of
        files.
      </p>
      
      
      
      
      
      
      
     
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request"><a name="request_analysis.getErrors">analysis.getErrors</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file for which errors are being requested.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>errors: List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;</b></dt><dd>
            
            <p>
              The errors associated with the file.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_analysis.getHover">analysis.getHover</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file in which hover information is being requested.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset for which hover information is being requested.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>hovers: List&lt;<a href="#type_HoverInformation">HoverInformation</a>&gt;</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"><a name="request_analysis.getReachableSources">analysis.getReachableSources</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.getReachableSources"
  "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>sources</b>": Map&lt;String, List&lt;String&gt;&gt;
  }
}</pre></div>
        <p>
          Return the transitive closure of reachable sources for a given file.
        </p>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>GET_REACHABLE_SOURCES_INVALID_FILE</tt> will be generated.
        </p>
        
        
      <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file for which reachable source information is being requested.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>sources: Map&lt;String, List&lt;String&gt;&gt;</b></dt><dd>
            
            <p>
              A mapping from source URIs to directly reachable source URIs. For example,
              a file "foo.dart" that imports "bar.dart" would have the corresponding mapping
              { "file:///foo.dart" : ["file:///bar.dart"] }.  If "bar.dart" has further imports
              (or exports) there will be a mapping from the URI "file:///bar.dart" to them.
              To check if a specific URI is reachable from a given file, clients can check
              for its presence in the resulting key set.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_analysis.getLibraryDependencies">analysis.getLibraryDependencies</a></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>
        <p>
        Clients that are only using the libraries field should consider using the
        analyzedFiles notification instead.
        </p>
        
      <h4>returns:</h4><dl><dt class="field"><b>libraries: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</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>packageMap: Map&lt;String, Map&lt;String, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;&gt;</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"><a name="request_analysis.getNavigation">analysis.getNavigation</a></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>
        <p>
          If a request is made for a file which does not exist, or
          which is not currently subject to analysis (e.g. because it
          is not associated with any analysis root specified to
          analysis.setAnalysisRoots), an error of type
          <tt>GET_NAVIGATION_INVALID_FILE</tt> will be generated.
        </p>
        
        
      <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file in which navigation information is being requested.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the region for which navigation information is being
              requested.
            </p>
          </dd><dt class="field"><b>length: int</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>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
            
            <p>
              A list of the paths of files that are referenced by the navigation
              targets.
            </p>
          </dd><dt class="field"><b>targets: List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;</b></dt><dd>
            
            <p>
              A list of the navigation targets that are referenced by the
              navigation regions.
            </p>
          </dd><dt class="field"><b>regions: List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;</b></dt><dd>
            
            <p>
              A list of the navigation regions within the requested region of
              the file.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_analysis.reanalyze">analysis.reanalyze</a></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>roots: List&lt;<a href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              A list of the analysis roots that are to be re-analyzed.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_analysis.setAnalysisRoots">analysis.setAnalysisRoots</a></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>included: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
            
            <p>
              A list of the files and directories that should be
              analyzed.
            </p>
          </dd><dt class="field"><b>excluded: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</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>packageRoots: Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              A mapping from source directories to package roots
              that should override the normal package: URI resolution
              mechanism.
            </p>
            <p>
              If a package root is a directory, then
              the analyzer will behave as though the associated
              source directory in the map contains a special
              pubspec.yaml file which resolves any package: URI to the
              corresponding path within that package root directory.  The
              effect is the same as specifying the package root directory as
              a "--package_root" parameter to the Dart VM when
              executing any Dart file inside the source directory.
            </p>
            <p>
              If a package root is a file, then the analyzer
              will behave as though that file is a ".packages" file in the
              source directory. The effect is the same as specifying the file
              as a "--packages" parameter to the Dart VM when
              executing any Dart file inside the source directory.
            </p>
            <p>
              Files in any directories that are not overridden by this
              mapping have their package: URI's resolved using the
              normal pubspec.yaml mechanism.  If this field is absent,
              or the empty map is specified, that indicates that the
              normal pubspec.yaml mechanism should always be used.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_analysis.setGeneralSubscriptions">analysis.setGeneralSubscriptions</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.setGeneralSubscriptions"
  "params": {
    "<b>subscriptions</b>": List&lt;<a href="#type_GeneralAnalysisService">GeneralAnalysisService</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 general services (that is, services that are not
          specific to individual files). All previous subscriptions are replaced
          by the given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not valid
          services. If there is an error, then the current subscriptions will
          remain unchanged.
        </p>
        
      <h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a href="#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt;</b></dt><dd>
            
            <p>A list of the services being subscribed to.</p>
          </dd></dl></dd><dt class="request"><a name="request_analysis.setPriorityFiles">analysis.setPriorityFiles</a></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>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
            
            <p>
              The files that are to be a priority for analysis.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_analysis.setSubscriptions">analysis.setSubscriptions</a></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 that are specific to individual files.
          All previous subscriptions are replaced by the current set of
          subscriptions. If a given service is not included as a key in the map
          then no files will be subscribed to the service, exactly as if the
          service had been included in the map with an explicit empty list of
          files.
        </p>
        <p>
          Note that this request determines the set of requested
          subscriptions. The actual set of subscriptions at any given
          time is the intersection of this set with the set of files
          currently subject to analysis. The files currently subject
          to analysis are the set of files contained within an actual
          analysis root but not excluded, plus all of the files
          transitively reachable from those files via import, export
          and part directives. (See analysis.setAnalysisRoots for an
          explanation of how the actual analysis roots are
          determined.) When the actual analysis roots change, the
          actual set of subscriptions is automatically updated, but
          the set of requested subscriptions is unchanged.
        </p>
        <p>
          If a requested subscription is a directory it is ignored,
          but remains in the set of requested subscriptions so that if
          it later becomes a file it can be included in the set of
          actual subscriptions.
        </p>
        <p>
          It is an error if any of the keys in the map are not valid
          services. If there is an error, then the existing
          subscriptions will remain unchanged.
        </p>
        
      <h4>parameters:</h4><dl><dt class="field"><b>subscriptions: Map&lt;<a href="#type_AnalysisService">AnalysisService</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;</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"><a name="request_analysis.updateContent">analysis.updateContent</a></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>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;</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 deprecated"><a name="request_analysis.updateOptions">analysis.updateOptions</a></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><b>Deprecated:</b> all of the options can be set by users in
          an analysis options file.</p>
        <p>
          Update the options controlling analysis based on the given
          set of options. Any options that are not included in the
          analysis options will not be changed. If there are options
          in the analysis options that are not valid, they will be
          silently ignored.
        </p>
        
      <h4>parameters:</h4><dl><dt class="field"><b>options: <a href="#type_AnalysisOptions">AnalysisOptions</a></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"><a name="notification_analysis.analyzedFiles">analysis.analyzedFiles</a></dt><dd><div class="box"><pre>notification: {
  "event": "analysis.analyzedFiles"
  "params": {
    "<b>directories</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
  }
}</pre></div>
        <p>
          Reports the paths of the files that are being analyzed.
        </p>
        <p>
          This notification is not subscribed to by default. Clients can
          subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the list
          of services passed in an analysis.setGeneralSubscriptions request.
        </p>
        
      <h4>parameters:</h4><dl><dt class="field"><b>directories: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
            
              <p>
                A list of the paths of the files that are being analyzed.
              </p>
            </dd></dl></dd><dt class="notification"><a name="notification_analysis.errors">analysis.errors</a></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>
        
      <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the errors.
            </p>
          </dd><dt class="field"><b>errors: List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;</b></dt><dd>
            
            <p>
              The errors contained in the file.
            </p>
          </dd></dl></dd><dt class="notification"><a name="notification_analysis.flushResults">analysis.flushResults</a></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>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
            
            <p>
              The files that are no longer being analyzed.
            </p>
          </dd></dl></dd><dt class="notification"><a name="notification_analysis.folding">analysis.folding</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the folding regions.
            </p>
          </dd><dt class="field"><b>regions: List&lt;<a href="#type_FoldingRegion">FoldingRegion</a>&gt;</b></dt><dd>
            
            <p>
              The folding regions contained in the file.
            </p>
          </dd></dl></dd><dt class="notification"><a name="notification_analysis.highlights">analysis.highlights</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the highlight regions.
            </p>
          </dd><dt class="field"><b>regions: List&lt;<a href="#type_HighlightRegion">HighlightRegion</a>&gt;</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"><a name="notification_analysis.implemented">analysis.implemented</a></dt><dd><div class="box"><pre>notification: {
  "event": "analysis.implemented"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>classes</b>": List&lt;<a href="#type_ImplementedClass">ImplementedClass</a>&gt;
    "<b>members</b>": List&lt;<a href="#type_ImplementedMember">ImplementedMember</a>&gt;
  }
}</pre></div>
        <p>
          Reports the classes that are implemented or extended and
          class members that are implemented or overridden in a file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        
      <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file with which the implementations are associated.
            </p>
          </dd><dt class="field"><b>classes: List&lt;<a href="#type_ImplementedClass">ImplementedClass</a>&gt;</b></dt><dd>
            
            <p>
              The classes defined in the file that are implemented or extended.
            </p>
          </dd><dt class="field"><b>members: List&lt;<a href="#type_ImplementedMember">ImplementedMember</a>&gt;</b></dt><dd>
            
            <p>
              The member defined in the file that are implemented or overridden.
            </p>
          </dd></dl></dd><dt class="notification"><a name="notification_analysis.invalidate">analysis.invalidate</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file whose information has been invalidated.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the invalidated region.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the invalidated region.
            </p>
          </dd><dt class="field"><b>delta: int</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"><a name="notification_analysis.navigation">analysis.navigation</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the navigation regions.
            </p>
          </dd><dt class="field"><b>regions: List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;</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>targets: List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;</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>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</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"><a name="notification_analysis.occurrences">analysis.occurrences</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file in which the references occur.
            </p>
          </dd><dt class="field"><b>occurrences: List&lt;<a href="#type_Occurrences">Occurrences</a>&gt;</b></dt><dd>
            
            <p>
              The occurrences of references to elements within the
              file.
            </p>
          </dd></dl></dd><dt class="notification"><a name="notification_analysis.outline">analysis.outline</a></dt><dd><div class="box"><pre>notification: {
  "event": "analysis.outline"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>kind</b>": <a href="#type_FileKind">FileKind</a>
    "<b>libraryName</b>": <span style="color:#999999">optional</span> String
    "<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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file with which the outline is associated.
            </p>
          </dd><dt class="field"><b>kind: <a href="#type_FileKind">FileKind</a></b></dt><dd>
            
            <p>
              The kind of the file.
            </p>
          </dd><dt class="field"><b>libraryName: String<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The name of the library defined by the file using a "library"
              directive, or referenced by a "part of" directive. If both
              "library" and "part of" directives are present, then the
              "library" directive takes precedence.
              This field will be omitted if the file has neither "library"
              nor "part of" directives.
            </p>
          </dd><dt class="field"><b>outline: <a href="#type_Outline">Outline</a></b></dt><dd>
            
            <p>
              The outline associated with the file.
            </p>
          </dd></dl></dd><dt class="notification"><a name="notification_analysis.overrides">analysis.overrides</a></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 overriding members in a file.
        </p>
        <p>
          This notification is not subscribed to by default. Clients
          can subscribe by including the value <tt>"OVERRIDES"</tt> in
          the list of services passed in an analysis.setSubscriptions
          request.
        </p>
        
      <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file with which the overrides are associated.
            </p>
          </dd><dt class="field"><b>overrides: List&lt;<a href="#type_Override">Override</a>&gt;</b></dt><dd>
            
            <p>
              The overrides associated with the file.
            </p>
          </dd></dl></dd></dl>
    <h2 class="domain"><a name="domain_completion">completion domain</a></h2>
      <p>
        The code completion domain contains commands related to
        getting code completion suggestions.
      </p>
      
      
    <h3>Requests</h3><dl><dt class="request"><a name="request_completion.getSuggestions">completion.getSuggestions</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the point at which suggestions are
              to be made.
            </p>
          </dd><dt class="field"><b>offset: int</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>id: <a href="#type_CompletionId">CompletionId</a></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"><a name="notification_completion.results">completion.results</a></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>id: <a href="#type_CompletionId">CompletionId</a></b></dt><dd>
            
            <p>
              The id associated with the completion.
            </p>
          </dd><dt class="field"><b>replacementOffset: int</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>replacementLength: int</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>results: List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;</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>isLast: bool</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">search domain</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"><a name="request_search.findElementReferences">search.findElementReferences</a></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>file: <a href="#type_FilePath">FilePath</a></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>offset: int</b></dt><dd>
            
            <p>
              The offset within the file of the declaration of or
              reference to the element.
            </p>
          </dd><dt class="field"><b>includePotential: bool</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>id: <a href="#type_SearchId">SearchId</a><span style="color:#999999"> (optional)</span></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>element: <a href="#type_Element">Element</a><span style="color:#999999"> (optional)</span></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"><a name="request_search.findMemberDeclarations">search.findMemberDeclarations</a></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>name: String</b></dt><dd>
            
            <p>
              The name of the declarations to be found.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
            
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_search.findMemberReferences">search.findMemberReferences</a></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>name: String</b></dt><dd>
            
            <p>
              The name of the references to be found.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
            
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_search.findTopLevelDeclarations">search.findTopLevelDeclarations</a></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>pattern: String</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>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
            
            <p>
              The identifier used to associate results with this
              search request.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_search.getTypeHierarchy">search.getTypeHierarchy</a></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
    "<b>superOnly</b>": <span style="color:#999999">optional</span> bool
  }
}</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>file: <a href="#type_FilePath">FilePath</a></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>offset: int</b></dt><dd>
            
            <p>
              The offset of the name of the type within the file.
            </p>
          </dd><dt class="field"><b>superOnly: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              True if the client is only requesting superclasses and
              interfaces hierarchy.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>hierarchyItems: List&lt;<a href="#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;<span style="color:#999999"> (optional)</span></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"><a name="notification_search.results">search.results</a></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>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
            
            <p>
              The id associated with the search.
            </p>
          </dd><dt class="field"><b>results: List&lt;<a href="#type_SearchResult">SearchResult</a>&gt;</b></dt><dd>
            
            <p>
              The search results being reported.
            </p>
          </dd><dt class="field"><b>isLast: bool</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">edit domain</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"><a name="request_edit.format">edit.format</a></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
    "<b>lineLength</b>": <span style="color:#999999">optional</span> 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. If the source
          contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
          will be generated.
        </p>
        
        
      <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the code to be formatted.
            </p>
          </dd><dt class="field"><b>selectionOffset: int</b></dt><dd>
            
            <p>
              The offset of the current selection in the file.
            </p>
          </dd><dt class="field"><b>selectionLength: int</b></dt><dd>
            
            <p>
              The length of the current selection in the file.
            </p>
          </dd><dt class="field"><b>lineLength: int<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The line length to be used by the formatter.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>edits: List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt;</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>selectionOffset: int</b></dt><dd>
            
            <p>
              The offset of the selection after formatting the code.
            </p>
          </dd><dt class="field"><b>selectionLength: int</b></dt><dd>
            
            <p>
              The length of the selection after formatting the code.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_edit.getAssists">edit.getAssists</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the code for which assists are being
              requested.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the code for which assists are being
              requested.
            </p>
          </dd><dt class="field"><b>length: int</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>assists: List&lt;<a href="#type_SourceChange">SourceChange</a>&gt;</b></dt><dd>
            
            <p>
              The assists that are available at the given location.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_edit.getAvailableRefactorings">edit.getAvailableRefactorings</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the code on which the refactoring
              would be based.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the code on which the refactoring would be
              based.
            </p>
          </dd><dt class="field"><b>length: int</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>kinds: List&lt;<a href="#type_RefactoringKind">RefactoringKind</a>&gt;</b></dt><dd>
            
            <p>
              The kinds of refactorings that are valid for the given
              selection.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_edit.getFixes">edit.getFixes</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the errors for which fixes are being
              requested.
            </p>
          </dd><dt class="field"><b>offset: int</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>fixes: List&lt;<a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt;</b></dt><dd>
            
            <p>
              The fixes that are available for the errors at the given offset.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_edit.getRefactoring">edit.getRefactoring</a></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>kind: <a href="#type_RefactoringKind">RefactoringKind</a></b></dt><dd>
            
            <p>
              The kind of refactoring to be performed.
            </p>
          </dd><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the code involved in the
              refactoring.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the region involved in the refactoring.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the region involved in the refactoring.
            </p>
          </dd><dt class="field"><b>validateOnly: bool</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>options: <a href="#type_RefactoringOptions">RefactoringOptions</a><span style="color:#999999"> (optional)</span></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>initialProblems: List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</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>optionsProblems: List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</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>finalProblems: List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</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>feedback: <a href="#type_RefactoringFeedback">RefactoringFeedback</a><span style="color:#999999"> (optional)</span></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>change: <a href="#type_SourceChange">SourceChange</a><span style="color:#999999"> (optional)</span></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>potentialEdits: List&lt;String&gt;<span style="color:#999999"> (optional)</span></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"><a name="request_edit.sortMembers">edit.sortMembers</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The Dart file to sort.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>edit: <a href="#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
            
            <p>
              The file edit that is to be applied to the given file to effect
              the sorting.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_edit.organizeDirectives">edit.organizeDirectives</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.organizeDirectives"
  "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>
          Organizes all of the directives - removes unused imports and sorts
          directives of the given Dart file according to the
          <a href="https://www.dartlang.org/articles/style-guide/">Dart Style Guide</a>.
        </p>
        <p>
          If a request is made for a file that does not exist, does not belong
          to an analysis root or is not a Dart file,
          <tt>FILE_NOT_ANALYZED</tt> will be generated.
        </p>
        <p>
          If directives of the Dart file cannot be organized, for example
          because it has scan or parse errors, or by other reasons,
          <tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
          will provide details about the reason.
        </p>
        
        
      <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The Dart file to organize directives in.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>edit: <a href="#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
            
            <p>
              The file edit that is to be applied to the given file to effect
              the organizing.
            </p>
          </dd></dl></dd></dl>
    <h2 class="domain"><a name="domain_execution">execution domain</a></h2>
      <p>
        The execution domain contains commands related to providing an execution
        or debugging experience.
      </p>
      
      
      
      
      
    <h3>Requests</h3><dl><dt class="request"><a name="request_execution.createContext">execution.createContext</a></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>contextRoot: <a href="#type_FilePath">FilePath</a></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>id: <a href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
            
            <p>
              The identifier used to refer to the execution context that was
              created.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_execution.deleteContext">execution.deleteContext</a></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>id: <a href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
            
            <p>
              The identifier of the execution context that is to be deleted.
            </p>
          </dd></dl></dd><dt class="request"><a name="request_execution.mapUri">execution.mapUri</a></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>id: <a href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
            
            <p>
              The identifier of the execution context in which the URI is to be
              mapped.
            </p>
          </dd><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a><span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The path of the file to be mapped into a URI.
            </p>
          </dd><dt class="field"><b>uri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The URI to be mapped into a file path.
            </p>
          </dd></dl><h4>returns:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a><span style="color:#999999"> (optional)</span></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>uri: String<span style="color:#999999"> (optional)</span></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 deprecated"><a name="request_execution.setSubscriptions">execution.setSubscriptions</a></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>
          <b>Deprecated:</b> the analysis server no longer fires
          <tt>LAUNCH_DATA</tt> events.
        </p>
        <p>
          Subscribe for services. All previous subscriptions are replaced by the
          given set of services.
        </p>
        <p>
          It is an error if any of the elements in the list are not valid
          services. If there is an error, then the current subscriptions will
          remain unchanged.
        </p>
        
      <h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a href="#type_ExecutionService">ExecutionService</a>&gt;</b></dt><dd>
            
            <p>
              A list of the services being subscribed to.
            </p>
          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_execution.launchData">execution.launchData</a></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>file: <a href="#type_FilePath">FilePath</a></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>kind: <a href="#type_ExecutableKind">ExecutableKind</a><span style="color:#999999"> (optional)</span></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>referencedFiles: List&lt;<a href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> (optional)</span></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="domain_diagnostic">diagnostic domain</a></h2>
      <p>
        The diagnostic domain contains server diagnostics APIs.
      </p>
      
      
    <h3>Requests</h3><dl><dt class="request"><a name="request_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "diagnostic.getDiagnostics"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>contexts</b>": List&lt;<a href="#type_ContextData">ContextData</a>&gt;
  }
}</pre></div>
        <p>Return server diagnostics.</p>
        
      <h4>returns:</h4><dl><dt class="field"><b>contexts: List&lt;<a href="#type_ContextData">ContextData</a>&gt;</b></dt><dd>
            
            <p>The list of analysis contexts.</p>
          </dd></dl></dd><dt class="request"><a name="request_diagnostic.getServerPort">diagnostic.getServerPort</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "diagnostic.getServerPort"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>port</b>": int
  }
}</pre></div>
        <p>
          Return the port of the diagnostic web server. If the server is not running
          this call will start the server. If unable to start the diagnostic web server,
          this call will return an error of <tt>DEBUG_PORT_COULD_NOT_BE_OPENED</tt>.
        </p>
        
      <h4>returns:</h4><dl><dt class="field"><b>port: int</b></dt><dd>
            
            <p>The diagnostic server port.</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>type = "add"</b></dt><dd></dd><dt class="field"><b>content: String</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>severity: <a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></b></dt><dd>
            
            <p>
              The severity of the error.
            </p>
          </dd><dt class="field"><b>type: <a href="#type_AnalysisErrorType">AnalysisErrorType</a></b></dt><dd>
            
            <p>
              The type of the error.
            </p>
          </dd><dt class="field"><b>location: <a href="#type_Location">Location</a></b></dt><dd>
            
            <p>
              The location associated with the error.
            </p>
          </dd><dt class="field"><b>message: String</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>correction: String<span style="color:#999999"> (optional)</span></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><dt class="field"><b>code: String</b></dt><dd>
            
            <p>
              The name, as a string, of the error code associated with this error.
            </p>
          </dd><dt class="field"><b>hasFix: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              A hint to indicate to interested clients that this error has
              an associated fix (or fixes).  The absence of this field implies
              there are not known to be fixes.  Note that since the operation
              to calculate whether fixes apply needs to be performant it is
              possible that complicated tests will be skipped and a false
              negative returned.  For this reason, this attribute should be
              treated as a "hint".  Despite the possibility of false negatives,
              no false positives should be returned.  If a client sees this
              flag set they can proceed with the confidence that there are in
              fact associated fixes.
            </p>
          </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>error: <a href="#type_AnalysisError">AnalysisError</a></b></dt><dd>
            
            <p>
              The error with which the fixes are associated.
            </p>
          </dd><dt class="field"><b>fixes: List&lt;<a href="#type_SourceChange">SourceChange</a>&gt;</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 deprecated"><a name="type_AnalysisOptions">AnalysisOptions: object</a></dt><dd>
        <p><b>Deprecated:</b> the only reference to this type has been
          deprecated.</p>
        <p>
          A set of options controlling what kind of analysis is to be
          performed. If the value of a field is omitted the value of the
          option will not be changed.
        </p>
        
      <dl><dt class="field"><b><span class="deprecated">enableAsync</span>: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p><b>Deprecated:</b> this feature is always enabled.</p>
            <p>
              True if the client wants to enable support for the
              proposed async feature.
            </p>
          </dd><dt class="field"><b><span class="deprecated">enableDeferredLoading</span>: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p><b>Deprecated:</b> this feature is always enabled.</p>
            <p>
              True if the client wants to enable support for the
              proposed deferred loading feature.
            </p>
          </dd><dt class="field"><b><span class="deprecated">enableEnums</span>: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p><b>Deprecated:</b> this feature is always enabled.</p>
            <p>
              True if the client wants to enable support for the
              proposed enum feature.
            </p>
          </dd><dt class="field"><b><span class="deprecated">enableNullAwareOperators</span>: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p><b>Deprecated:</b> this feature is always enabled.</p>
            <p>
              True if the client wants to enable support for the
              proposed "null aware operators" feature.
            </p>
          </dd><dt class="field"><b>enableSuperMixins: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              True if the client wants to enable support for the
              proposed "less restricted mixins" proposal (DEP 34).
            </p>
          </dd><dt class="field"><b>generateDart2jsHints: bool<span style="color:#999999"> (optional)</span></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>generateHints: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              True if hints should be generated as part of generating
              errors and warnings.
            </p>
          </dd><dt class="field"><b>generateLints: bool<span style="color:#999999"> (optional)</span></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 that
          are related to a specific list of files.
        </p>
        
      <dl><dt class="value">FOLDING</dt><dt class="value">HIGHLIGHTS</dt><dt class="value">IMPLEMENTED</dt><dt class="value">INVALIDATE</dt><dd>
            
            <p>
              This service is not currently implemented and will become a
              GeneralAnalysisService in a future release.
            </p>
          </dd><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>isAnalyzing: bool</b></dt><dd>
            
            <p>True if analysis is currently being performed.</p>
          </dd><dt class="field"><b>analysisTarget: String<span style="color:#999999"> (optional)</span></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>type = "change"</b></dt><dd></dd><dt class="field"><b>edits: List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt;</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>kind: <a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></b></dt><dd>
            
            <p>
              The kind of element being suggested.
            </p>
          </dd><dt class="field"><b>relevance: int</b></dt><dd>
            
            <p>
              The relevance of this completion suggestion
              where a higher number indicates a higher relevance.
            </p>
          </dd><dt class="field"><b>completion: String</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>selectionOffset: int</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>selectionLength: int</b></dt><dd>
            
            <p>
              The number of characters that should be selected after
              insertion.
            </p>
          </dd><dt class="field"><b>isDeprecated: bool</b></dt><dd>
            
            <p>
              True if the suggested element is deprecated.
            </p>
          </dd><dt class="field"><b>isPotential: bool</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>docSummary: String<span style="color:#999999"> (optional)</span></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>docComplete: String<span style="color:#999999"> (optional)</span></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>declaringType: String<span style="color:#999999"> (optional)</span></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>defaultArgumentListString: String<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              A default String for use in generating argument list
              source contents on the client side.
            </p>
          </dd><dt class="field"><b>defaultArgumentListTextRanges: List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              Pairs of offsets and lengths describing 'defaultArgumentListString'
              text ranges suitable for use by clients to set up linked edits of
              default argument source contents. For example, given an argument
              list string 'x, y', the corresponding text range [0, 1, 3, 1],
              indicates two text ranges of length 1, starting at offsets 0 and 3.
              Clients can use these ranges to treat the 'x' and 'y' values
              specially for linked edits.
            </p>
          </dd><dt class="field"><b>element: <a href="#type_Element">Element</a><span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              Information about the element reference being suggested.
            </p>
          </dd><dt class="field"><b>returnType: String<span style="color:#999999"> (optional)</span></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>parameterNames: List&lt;String&gt;<span style="color:#999999"> (optional)</span></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>parameterTypes: List&lt;String&gt;<span style="color:#999999"> (optional)</span></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>requiredParameterCount: int<span style="color:#999999"> (optional)</span></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>hasNamedParameters: bool<span style="color:#999999"> (optional)</span></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>parameterName: String<span style="color:#999999"> (optional)</span></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>parameterType: String<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The type of the options parameter being suggested. This
              field is omitted if the parameterName field is omitted.
            </p>
          </dd><dt class="field"><b>importUri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The import to be added if the suggestion is out of scope
              and needs an import to be added to be in scope.
            </p>
          </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><dd>
            
            <p>
              A named argument for the current callsite is being suggested.
              For suggestions of this kind, the completion is
              the named argument identifier including a trailing ':' and space.
            </p>
          </dd><dt class="value">OPTIONAL_ARGUMENT</dt><dt class="value">PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_ContextData">ContextData: object</a></dt><dd>
        <p>
          Information about an analysis context.
        </p>
        
      <dl><dt class="field"><b>name: String</b></dt><dd>
            
            <p>
              The name of the context.
            </p>
          </dd><dt class="field"><b>explicitFileCount: int</b></dt><dd>
            
            <p>
              Explicitly analyzed files.
            </p>
          </dd><dt class="field"><b>implicitFileCount: int</b></dt><dd>
            
            <p>
              Implicitly analyzed files.
            </p>
          </dd><dt class="field"><b>workItemQueueLength: int</b></dt><dd>
            
            <p>
              The number of work items in the queue.
            </p>
          </dd><dt class="field"><b>cacheEntryExceptions: List&lt;String&gt;</b></dt><dd>
            
            <p>
              Exceptions associated with cache entries.
            </p>
          </dd></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>kind: <a href="#type_ElementKind">ElementKind</a></b></dt><dd>
            
            <p>
              The kind of the element.
            </p>
          </dd><dt class="field"><b>name: String</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>location: <a href="#type_Location">Location</a><span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The location of the name in the declaration of the
              element.
            </p>
          </dd><dt class="field"><b>flags: int</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>parameters: String<span style="color:#999999"> (optional)</span></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>returnType: String<span style="color:#999999"> (optional)</span></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><dt class="field"><b>typeParameters: String<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The type parameter list for the element. If the element doesn't
              have type parameters, this field will not be defined.
            </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">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt class="value">FILE</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 deprecated">UNIT_TEST_GROUP</dt><dd>
            
            <p><b>Deprecated:</b> support for tests was removed.</p>
          </dd><dt class="value deprecated">UNIT_TEST_TEST</dt><dd>
            
            <p><b>Deprecated:</b> support for tests was removed.</p>
          </dd><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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The path of the executable file.
            </p>
          </dd><dt class="field"><b>kind: <a href="#type_ExecutableKind">ExecutableKind</a></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_FileKind">FileKind: String</a></dt><dd>
        <p>
          An enumeration of the kinds of files.
        </p>
        
      <dl><dt class="value">LIBRARY</dt><dt class="value">PART</dt></dl></dd><dt class="typeDefinition"><a name="type_FilePath">FilePath: String</a></dt><dd>
        
        <p>
          The absolute, normalized path of a file.
        </p>
        <p>
          If the format of a file path in a request is not valid, e.g. the
          path is not absolute or is not normalized, then an error of type
          <tt>INVALID_FILE_PATH_FORMAT</tt> will be generated.
        </p>
      </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>kind: <a href="#type_FoldingKind">FoldingKind</a></b></dt><dd>
            
            <p>
              The kind of the region.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the region to be folded.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the region to be folded.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_GeneralAnalysisService">GeneralAnalysisService: String</a></dt><dd>
        <p>
          An enumeration of the services provided by the analysis domain that are
          general in nature (that is, are not specific to some list of files).
        </p>
        
      <dl><dt class="value">ANALYZED_FILES</dt></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>type: <a href="#type_HighlightRegionType">HighlightRegionType</a></b></dt><dd>
            
            <p>
              The type of highlight associated with the region.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the region to be highlighted.
            </p>
          </dd><dt class="field"><b>length: int</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><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">DYNAMIC_LOCAL_VARIABLE_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">DYNAMIC_LOCAL_VARIABLE_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">DYNAMIC_PARAMETER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">DYNAMIC_PARAMETER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">FIELD_STATIC</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">FUNCTION</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">FUNCTION_DECLARATION</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER_DECLARATION</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">IDENTIFIER_DEFAULT</dt><dt class="value">IMPORT_PREFIX</dt><dt class="value">INSTANCE_FIELD_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INSTANCE_FIELD_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INSTANCE_GETTER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INSTANCE_GETTER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INSTANCE_METHOD_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INSTANCE_METHOD_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INSTANCE_SETTER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INSTANCE_SETTER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">INVALID_STRING_ESCAPE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">KEYWORD</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY_NAME</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><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_FUNCTION_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">LOCAL_FUNCTION_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">LOCAL_VARIABLE</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">LOCAL_VARIABLE_DECLARATION</dt><dt class="value">LOCAL_VARIABLE_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">METHOD</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">METHOD_DECLARATION</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">METHOD_DECLARATION_STATIC</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">METHOD_STATIC</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">PARAMETER</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">SETTER_DECLARATION</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_VARIABLE</dt><dd>
            
            <p>Only for version 1 of highlight.</p>
          </dd><dt class="value">PARAMETER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">PARAMETER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">STATIC_FIELD_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">STATIC_GETTER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">STATIC_GETTER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">STATIC_METHOD_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">STATIC_METHOD_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">STATIC_SETTER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">STATIC_SETTER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_FUNCTION_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_FUNCTION_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_GETTER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_GETTER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_SETTER_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_SETTER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TOP_LEVEL_VARIABLE_DECLARATION</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">TYPE_NAME_DYNAMIC</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNRESOLVED_INSTANCE_MEMBER_REFERENCE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd><dt class="value">VALID_STRING_ESCAPE</dt><dd>
            
            <p>Only for version 2 of highlight.</p>
          </dd></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>offset: int</b></dt><dd>
            
            <p>
              The offset of the range of characters that encompasses the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the range of characters that encompasses the
              cursor position and has the same hover information as the
              cursor position.
            </p>
          </dd><dt class="field"><b>containingLibraryPath: String<span style="color:#999999"> (optional)</span></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>containingLibraryName: String<span style="color:#999999"> (optional)</span></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>containingClassDescription: String<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              A human-readable description of the class declaring the element
              being referenced. This data is omitted if there is no referenced
              element, or if the element is not a class member.
            </p>
          </dd><dt class="field"><b>dartdoc: String<span style="color:#999999"> (optional)</span></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>elementDescription: String<span style="color:#999999"> (optional)</span></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>elementKind: String<span style="color:#999999"> (optional)</span></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>isDeprecated: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              True if the referenced element is deprecated.
            </p>
          </dd><dt class="field"><b>parameter: String<span style="color:#999999"> (optional)</span></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>propagatedType: String<span style="color:#999999"> (optional)</span></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>staticType: String<span style="color:#999999"> (optional)</span></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_ImplementedClass">ImplementedClass: object</a></dt><dd>
        <p>
          A description of a class that is implemented or extended.
        </p>
        
      <dl><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the name of the implemented class.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the name of the implemented class.
            </p>
          </dd></dl></dd><dt class="typeDefinition"><a name="type_ImplementedMember">ImplementedMember: object</a></dt><dd>
        <p>
          A description of a class member that is implemented or overridden.
        </p>
        
      <dl><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the name of the implemented member.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the name of the implemented member.
            </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>positions: List&lt;<a href="#type_Position">Position</a>&gt;</b></dt><dd>
            
            <p>
              The positions of the regions that should be edited
              simultaneously.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the regions that should be edited
              simultaneously.
            </p>
          </dd><dt class="field"><b>suggestions: List&lt;<a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a>&gt;</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>value: String</b></dt><dd>
            
            <p>
              The value that could be used to replace all of the linked
              edit regions.
            </p>
          </dd><dt class="field"><b>kind: <a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the range.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the range.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the range.
            </p>
          </dd><dt class="field"><b>startLine: int</b></dt><dd>
            
            <p>
              The one-based index of the line containing the first
              character of the range.
            </p>
          </dd><dt class="field"><b>startColumn: int</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>offset: int</b></dt><dd>
            
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the region from which the user can navigate.
            </p>
          </dd><dt class="field"><b>targets: List&lt;int&gt;</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. This list cannot be empty.
            </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>kind: <a href="#type_ElementKind">ElementKind</a></b></dt><dd>
            
            <p>
              The kind of the element.
            </p>
          </dd><dt class="field"><b>fileIndex: int</b></dt><dd>
            
            <p>
              The index of the file (in the enclosing navigation response) to
              navigate to.
            </p>
          </dd><dt class="field"><b>offset: int</b></dt><dd>
            
            <p>
              The offset of the region to which the user can navigate.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the region to which the user can navigate.
            </p>
          </dd><dt class="field"><b>startLine: int</b></dt><dd>
            
            <p>
              The one-based index of the line containing the first
              character of the region.
            </p>
          </dd><dt class="field"><b>startColumn: int</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>element: <a href="#type_Element">Element</a></b></dt><dd>
            
            <p>
              The element that was referenced.
            </p>
          </dd><dt class="field"><b>offsets: List&lt;int&gt;</b></dt><dd>
            
            <p>
              The offsets of the name of the referenced element within
              the file.
            </p>
          </dd><dt class="field"><b>length: int</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>element: <a href="#type_Element">Element</a></b></dt><dd>
            
            <p>
              A description of the element represented by this node.
            </p>
          </dd><dt class="field"><b>offset: int</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>length: int</b></dt><dd>
            
            <p>
              The length of the element.
            </p>
          </dd><dt class="field"><b>children: List&lt;<a href="#type_Outline">Outline</a>&gt;<span style="color:#999999"> (optional)</span></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>offset: int</b></dt><dd>
            
            <p>
              The offset of the name of the overriding member.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the name of the overriding member.
            </p>
          </dd><dt class="field"><b>superclassMember: <a href="#type_OverriddenMember">OverriddenMember</a><span style="color:#999999"> (optional)</span></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>interfaceMembers: List&lt;<a href="#type_OverriddenMember">OverriddenMember</a>&gt;<span style="color:#999999"> (optional)</span></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>element: <a href="#type_Element">Element</a></b></dt><dd>
            
            <p>
              The element that is being overridden.
            </p>
          </dd><dt class="field"><b>className: String</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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the position.
            </p>
          </dd><dt class="field"><b>offset: int</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>isListingPackageDirs: bool</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>id: String<span style="color:#999999"> (optional)</span></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>kind: <a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></b></dt><dd>
            
            <p>
              The kind of the parameter.
            </p>
          </dd><dt class="field"><b>type: String</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>name: String</b></dt><dd>
            
            <p>
              The name that should be given to the parameter.
            </p>
          </dd><dt class="field"><b>parameters: String<span style="color:#999999"> (optional)</span></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>severity: <a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></b></dt><dd>
            
            <p>
              The severity of the problem being represented.
            </p>
          </dd><dt class="field"><b>message: String</b></dt><dd>
            
            <p>
              A human-readable description of the problem being
              represented.
            </p>
          </dd><dt class="field"><b>location: <a href="#type_Location">Location</a><span style="color:#999999"> (optional)</span></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><dd>
            
            <p>A minor code problem. No example, because it is not used yet.
            </p>
          </dd><dt class="value">WARNING</dt><dd>
            
            <p>A minor code problem. For example names of local variables
              should be camel case and start with a lower case letter. Staring
              the name of a variable with an upper case is OK from the language
              point of view, but it is nice to warn the user.
            </p>
          </dd><dt class="value">ERROR</dt><dd>
            
            <p>The refactoring technically can be performed, but there is a
              logical problem. For example the name of a local variable being
              extracted conflicts with another name in the scope, or
              duplicate parameter names in the method being extracted, or
              a conflict between a parameter name and a local variable, etc.
              In some cases the location of the problem is also provided, so
              the IDE can show user the location and the problem, and let the
              user decide whether she wants to perform the refactoring. For
              example the name conflict might be expected, and the user wants
              to fix it afterwards.
            </p>
          </dd><dt class="value">FATAL</dt><dd>
            
            <p>A fatal error, which prevents performing the refactoring.
              For example the name of a local variable being extracted is not a
              valid identifier, or selection is not a valid expression.
            </p>
          </dd></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>type = "remove"</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>code: <a href="#type_RequestErrorCode">RequestErrorCode</a></b></dt><dd>
            
            <p>
              A code that uniquely identifies the error that occurred.
            </p>
          </dd><dt class="field"><b>message: String</b></dt><dd>
            
            <p>
              A short description of the error.
            </p>
          </dd><dt class="field"><b>stackTrace: String<span style="color:#999999"> (optional)</span></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">DEBUG_PORT_COULD_NOT_BE_OPENED</dt><dd>
            
            <p>
              The server was unable to open a port for the diagnostic server.
            </p>
          </dd><dt class="value">FILE_NOT_ANALYZED</dt><dd>
            
            <p>
              A request specified a FilePath which does not match a file in
              an analysis root, or the requested operation is not available
              for the file.
            </p>
          </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">FORMAT_WITH_ERRORS</dt><dd>
            
            <p>
              An "edit.format" request specified a file that contains syntax
              errors.
            </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">GET_NAVIGATION_INVALID_FILE</dt><dd>
            
            <p>
              An "analysis.getNavigation" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </dd><dt class="value">GET_REACHABLE_SOURCES_INVALID_FILE</dt><dd>
            
            <p>
              An "analysis.getReachableSources" request specified a FilePath
              which does not match a file currently subject to
              analysis.
            </p>
          </dd><dt class="value">INVALID_ANALYSIS_ROOT</dt><dd>
            
            <p>
              A path passed as an argument to a request (such as
              analysis.reanalyze) is required to be an analysis root, but isn't.
            </p>
          </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_FILE_PATH_FORMAT</dt><dd>
            
            <p>
              The format of the given file path is invalid, e.g. is not
              absolute and normalized.
            </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">NO_INDEX_GENERATED</dt><dd>
            
            <p>
              The "--no-index" flag was passed when the analysis server created,
              but this API call requires an index to have been generated.
            </p>
          </dd><dt class="value">ORGANIZE_DIRECTIVES_ERROR</dt><dd>
            
            <p>
              An "edit.organizeDirectives" request specified a Dart file that
              cannot be analyzed. The reason is described in the message.
            </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
              configuration.
            </p>
          </dd><dt class="value">UNKNOWN_SOURCE</dt><dd>
            
            <p>
              The analysis server was requested to perform an action
              on a source that does not exist.
            </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>location: <a href="#type_Location">Location</a></b></dt><dd>
            
            <p>
              The location of the code that matched the search criteria.
            </p>
          </dd><dt class="field"><b>kind: <a href="#type_SearchResultKind">SearchResultKind</a></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>isPotential: bool</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>path: List&lt;<a href="#type_Element">Element</a>&gt;</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>message: String</b></dt><dd>
            
            <p>
              A human-readable description of the change to be applied.
            </p>
          </dd><dt class="field"><b>edits: List&lt;<a href="#type_SourceFileEdit">SourceFileEdit</a>&gt;</b></dt><dd>
            
            <p>
              A list of the edits used to effect the change, grouped by
              file.
            </p>
          </dd><dt class="field"><b>linkedEditGroups: List&lt;<a href="#type_LinkedEditGroup">LinkedEditGroup</a>&gt;</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>selection: <a href="#type_Position">Position</a><span style="color:#999999"> (optional)</span></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>offset: int</b></dt><dd>
            
            <p>
              The offset of the region to be modified.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the region to be modified.
            </p>
          </dd><dt class="field"><b>replacement: String</b></dt><dd>
            
            <p>
              The code that is to replace the specified region in the
              original code.
            </p>
          </dd><dt class="field"><b>id: String<span style="color:#999999"> (optional)</span></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>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
            
            <p>
              The file containing the code to be modified.
            </p>
          </dd><dt class="field"><b>fileStamp: long</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>edits: List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt;</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>classElement: <a href="#type_Element">Element</a></b></dt><dd>
            
            <p>
              The class element represented by this item.
            </p>
          </dd><dt class="field"><b>displayName: String<span style="color:#999999"> (optional)</span></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>memberElement: <a href="#type_Element">Element</a><span style="color:#999999"> (optional)</span></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>superclass: int<span style="color:#999999"> (optional)</span></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>interfaces: List&lt;int&gt;</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>mixins: List&lt;int&gt;</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>subclasses: List&lt;int&gt;</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 the expression that covers
          the specified selection.
        </p>
        <p>
          It is an error if the selection range is not covered by a
          complete expression.
        </p>
        
        
      <h4>Feedback:</h4><dl><dt class="field"><b>coveringExpressionOffsets: List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The offsets of the expressions that cover the specified
              selection, from the down most to the up most.
            </p>
          </dd><dt class="field"><b>coveringExpressionLengths: List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
            
            <p>
              The lengths of the expressions that cover the specified
              selection, from the down most to the up most.
            </p>
          </dd><dt class="field"><b>names: List&lt;String&gt;</b></dt><dd>
            
            <p>
              The proposed names for the local variable.
            </p>
          </dd><dt class="field"><b>offsets: List&lt;int&gt;</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>lengths: List&lt;int&gt;</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>name: String</b></dt><dd>
            
            <p>
              The name that the local variable should be given.
            </p>
          </dd><dt class="field"><b>extractAll: bool</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>offset: int</b></dt><dd>
            
            <p>
              The offset to the beginning of the expression or
              statements that will be extracted.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the expression or statements that will be
              extracted.
            </p>
          </dd><dt class="field"><b>returnType: String</b></dt><dd>
            
            <p>
              The proposed return type for the method.
              If the returned element does not have a declared return type,
              this field will contain an empty string.
            </p>
          </dd><dt class="field"><b>names: List&lt;String&gt;</b></dt><dd>
            
            <p>
              The proposed names for the method.
            </p>
          </dd><dt class="field"><b>canCreateGetter: bool</b></dt><dd>
            
            <p>
              True if a getter could be created rather than a method.
            </p>
          </dd><dt class="field"><b>parameters: List&lt;<a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt;</b></dt><dd>
            
            <p>
              The proposed parameters for the method.
            </p>
          </dd><dt class="field"><b>offsets: List&lt;int&gt;</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>lengths: List&lt;int&gt;</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>returnType: String</b></dt><dd>
            
            <p>
              The return type that should be defined for the method.
            </p>
          </dd><dt class="field"><b>createGetter: bool</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>name: String</b></dt><dd>
            
            <p>
              The name that the method should be given.
            </p>
          </dd><dt class="field"><b>parameters: List&lt;<a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt;</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>extractAll: bool</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>name: String</b></dt><dd>
            
            <p>
              The name of the variable being inlined.
            </p>
          </dd><dt class="field"><b>occurrences: int</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>className: String<span style="color:#999999"> (optional)</span></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>methodName: String</b></dt><dd>
            
            <p>
              The name of the method (or function) being inlined.
            </p>
          </dd><dt class="field"><b>isDeclaration: bool</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>deleteSource: bool</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>inlineAll: bool</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>newFile: <a href="#type_FilePath">FilePath</a></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>offset: int</b></dt><dd>
            
            <p>
              The offset to the beginning of the name selected to be
              renamed.
            </p>
          </dd><dt class="field"><b>length: int</b></dt><dd>
            
            <p>
              The length of the name selected to be renamed.
            </p>
          </dd><dt class="field"><b>elementKindName: String</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>oldName: String</b></dt><dd>
            
            <p>
              The old name of the element before the refactoring.
            </p>
          </dd></dl><h4>Options:</h4><dl><dt class="field"><b>newName: String</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>
      TODO: TBD
    </p>
    <h2 class="domain"><a name="index">Index</a></h2>
    <h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_server.getVersion">getVersion</a></li><li><a href="#request_server.shutdown">shutdown</a></li><li><a href="#request_server.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_server.connected">connected</a></li><li><a href="#notification_server.error">error</a></li><li><a href="#notification_server.status">status</a></li></ul></div></div><h4>analysis (<a href="#domain_analysis">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_analysis.getErrors">getErrors</a></li><li><a href="#request_analysis.getHover">getHover</a></li><li><a href="#request_analysis.getReachableSources">getReachableSources</a></li><li><a href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.reanalyze">reanalyze</a></li><li><a href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a href="#request_analysis.updateContent">updateContent</a></li><li><a href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a href="#notification_analysis.errors">errors</a></li><li><a href="#notification_analysis.flushResults">flushResults</a></li><li><a href="#notification_analysis.folding">folding</a></li><li><a href="#notification_analysis.highlights">highlights</a></li><li><a href="#notification_analysis.implemented">implemented</a></li><li><a href="#notification_analysis.invalidate">invalidate</a></li><li><a href="#notification_analysis.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li><li><a href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li></ul></div></div><h4>search (<a href="#domain_search">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_search.findElementReferences">findElementReferences</a></li><li><a href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_search.results">results</a></li></ul></div></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.format">format</a></li><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href="#request_edit.getFixes">getFixes</a></li><li><a href="#request_edit.getRefactoring">getRefactoring</a></li><li><a href="#request_edit.sortMembers">sortMembers</a></li><li><a href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution (<a href="#domain_execution">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_execution.createContext">createContext</a></li><li><a href="#request_execution.deleteContext">deleteContext</a></li><li><a href="#request_execution.mapUri">mapUri</a></li><li><a href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_execution.launchData">launchData</a></li></ul></div></div><h4>diagnostic (<a href="#domain_diagnostic">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_diagnostic.getDiagnostics">getDiagnostics</a></li><li><a href="#request_diagnostic.getServerPort">getServerPort</a></li></ul></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_ContextData">ContextData</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_ExecutableFile">ExecutableFile</a></li><li><a href="#type_ExecutableKind">ExecutableKind</a></li><li><a href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a href="#type_ExecutionService">ExecutionService</a></li><li><a href="#type_FileKind">FileKind</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a href="#type_HoverInformation">HoverInformation</a></li><li><a href="#type_ImplementedClass">ImplementedClass</a></li><li><a href="#type_ImplementedMember">ImplementedMember</a></li><li><a href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a href="#type_Location">Location</a></li><li><a href="#type_NavigationRegion">NavigationRegion</a></li><li><a href="#type_NavigationTarget">NavigationTarget</a></li><li><a href="#type_Occurrences">Occurrences</a></li><li><a href="#type_Outline">Outline</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href="#type_RequestError">RequestError</a></li><li><a href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a href="#type_SearchId">SearchId</a></li><li><a href="#type_SearchResult">SearchResult</a></li><li><a href="#type_SearchResultKind">SearchResultKind</a></li><li><a href="#type_ServerService">ServerService</a></li><li><a href="#type_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
  

</body></html>