<!DOCTYPE html><html><head>
  <meta charset="UTF-8">
  <title>Analysis Server API Specification</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@300;400;700&amp;family=Roboto:ital,wght@0,300;0,400;0,700;1,400&amp;display=swap" 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: 'Roboto Mono', 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.32.10
</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="https://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>Enumerations</h3>
<p>
  Responses from the server may include enumerations indicating the kind of a
  specific item. The enums may be extended with new values in future versions of
  the server so clients should ensure unknown values are handled gracefully, either
  ignoring the item or treating it with some default/fallback handling.
</p>
<h3>Changelog</h3>
<h4>1.32.10</h4>
<ul>
  <li>The <tt>MOVE_FILE</tt> refactor now supports moving/renaming folders.</li>
</ul>
<h4>1.32.8</h4>
<ul>
  <li>Added <tt>server.cancelRequest</tt> to allow clients to request cancellation
  of outstanding requests.</li>
</ul>
<h4>1.32.7</h4>
<ul>
  <li><tt>HoverInformation.elementDescription</tt> may now include linebreaks to
  improve formatting of functions and methods with many parameters. This is not
  an API change but may be useful as a signal for clients that previously did their
  own formatting.</li>
</ul>
<h4>1.32.6</h4>
<ul>
  <li>Added <tt>FoldingKind.PARAMETERS</tt> for folding regions for parameters
  that span multiple lines.</li>
</ul>
<h4>1.32.5</h4>
<ul>
  <li>Added optional <tt>replacementOffset</tt> and <tt>replacementLength</tt> on
  <tt>CompletionSuggestion</tt> to support different per-completion text replacement
  ranges (for example when inserting names for arguments, a different range may be
  supplied than for completions that are not name labels).</li>
</ul>
<h4>1.32.4</h4>
<ul>
  <li>Added <tt>ElementKind.TYPE_ALIAS</tt> and <tt>HighlightRegionType.TYPE_ALIAS</tt>
    for non-function type aliases.</li>
</ul>
<h4>1.32.3</h4>
<ul>
  <li>Removed the experimental <tt>completion.listTokenDetails</tt> request and
    the associated data types.</li>
</ul>
<h4>1.32.2</h4>
<ul>
  <li>Added <tt>FoldingKind.COMMENT</tt> for folding regions for blocks of
    comments.</li>
</ul>
<h4>1.32.1</h4>
<ul>
  <li>Added <tt>CompletionSuggestionKind.PACKAGE_NAME</tt> for Pub package name
    completions in <tt>pubspec.yaml</tt>.</li>
</ul>
<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>
<li><a href="#request_server.cancelRequest">server.cancelRequest</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.getLibraryDependencies">analysis.getLibraryDependencies</a></li>
<li><a href="#request_analysis.getNavigation">analysis.getNavigation</a></li>
<li><a class="deprecated" href="#request_analysis.getReachableSources">analysis.getReachableSources</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>
<li><a href="#request_completion.setSubscriptions">completion.setSubscriptions</a></li>
<li><a class="deprecated" href="#request_completion.registerLibraryPaths">completion.registerLibraryPaths</a></li>
<li><a href="#request_completion.getSuggestionDetails">completion.getSuggestionDetails</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.getPostfixCompletion">edit.getPostfixCompletion</a></li>
<li><a href="#request_edit.getRefactoring">edit.getRefactoring</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.getSuggestions">execution.getSuggestions</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>

<p><a href="#domain_flutter">Flutter</a></p><ul><li><a href="#request_flutter.setSubscriptions">flutter.setSubscriptions</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 class="deprecated">--no-index</dt>
    <dd>
      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
      This flag used to disable the server from generating an index, but now
      it has no effect.
    </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><dt class="request"><a name="request_server.cancelRequest">server.cancelRequest</a></dt><dd><div class="box"><pre>request: {
  "<b>id</b>": String
  "method": "server.cancelRequest"
  "params": {
    "<b>id</b>": String
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
    <p>Requests cancellation of a request sent by the client by id.
      This is provided on a best-effort basis and there is no
      guarantee the server will be able to cancel any specific
      request.

      The server will still always produce a response to the request
      even in the case of cancellation, but clients should discard
      any results of any cancelled request because they may be
      incomplete or inaccurate.
      
      This request always completes without error regardless of
      whether the request is successfully cancelled.</p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>id: String</b></dt><dd>
        
        <p>The id of the request that should be cancelled.</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
  }
}</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></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><span class="deprecated">pub</span>: <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>

        <p>
          Note: this status type is deprecated, and is no longer sent by
          the server.
      </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.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 deprecated"><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.reanalyze">analysis.reanalyze</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.reanalyze"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
    <p>
      Force re-reading of all potentially changed files, re-resolving of all
      referenced URIs, and corresponding re-analysis of everything affected in
      the current analysis roots.
    </p>
  </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 file, then the analyzer
          will behave as though that file is a
          ".dart_tool/package_config.json" 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.closingLabels">analysis.closingLabels</a></dt><dd><div class="box"><pre>notification: {
  "event": "analysis.closingLabels"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>labels</b>": List&lt;<a href="#type_ClosingLabel">ClosingLabel</a>&gt;
  }
}</pre></div>
    <p>
      Reports closing labels relevant to a given file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"CLOSING_LABELS"</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 the closing labels relate to.
        </p>
      </dd><dt class="field"><b>labels: List&lt;<a href="#type_ClosingLabel">ClosingLabel</a>&gt;</b></dt><dd>
        
        <p>
          Closing labels relevant to the file. Each item
          represents a useful label associated with some range
          with may be useful to display to the user within the editor
          at the end of the range to indicate what construct is closed
          at that location. Closing labels include constructor/method
          calls and List arguments that span multiple lines.
          Note that the ranges that are returned can overlap
          each other because they may be associated with
          constructs that can be nested.
        </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><dt class="request"><a name="request_completion.setSubscriptions">completion.setSubscriptions</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "completion.setSubscriptions"
  "params": {
    "<b>subscriptions</b>": List&lt;<a href="#type_CompletionService">CompletionService</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 completion 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_CompletionService">CompletionService</a>&gt;</b></dt><dd>
        
        <p>A list of the services being subscribed to.</p>
      </dd></dl></dd><dt class="request deprecated"><a name="request_completion.registerLibraryPaths">completion.registerLibraryPaths</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "completion.registerLibraryPaths"
  "params": {
    "<b>paths</b>": List&lt;<a href="#type_LibraryPathSet">LibraryPathSet</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
    <p>
      The client can make this request to express interest in certain
      libraries to receive completion suggestions from based on the client path.
      If this request is received before the client has used
      'completion.setSubscriptions' to subscribe to the <tt>AVAILABLE_SUGGESTION_SETS</tt>
      service, then an error of type <tt>NOT_SUBSCRIBED_TO_AVAILABLE_SUGGESTION_SETS</tt>
      will be generated. All previous paths are replaced by the given set of paths.
    </p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>paths: List&lt;<a href="#type_LibraryPathSet">LibraryPathSet</a>&gt;</b></dt><dd>
        
        <p>
          A list of objects each containing a path and the additional libraries from which
          the client is interested in receiving completion suggestions.
          If one configured path is beneath another, the descendent
          will override the ancestors' configured libraries of interest.
        </p>
      </dd></dl></dd><dt class="request"><a name="request_completion.getSuggestionDetails">completion.getSuggestionDetails</a></dt><dd><div class="box"><pre>request: {
  "<b>id</b>": String
  "method": "completion.getSuggestionDetails"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>id</b>": int
    "<b>label</b>": String
    "<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>completion</b>": String
    "<b>change</b>": <span style="color:#999999">optional</span> <a href="#type_SourceChange">SourceChange</a>
  }
}</pre></div>
    <p>
      Clients must make this request when the user has selected a completion
      suggestion from an <tt>AvailableSuggestionSet</tt>. Analysis server will respond with
      the text to insert as well as any <tt>SourceChange</tt> that needs to be applied
      in case the completion requires an additional import to be added. It is an error
      if the id is no longer valid, for instance if the library has been removed after
      the completion suggestion is accepted.
    </p>
    
    
  <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The path of the file into which this completion is being inserted.
        </p>
      </dd><dt class="field"><b>id: int</b></dt><dd>
        
        <p>
          The identifier of the <tt>AvailableSuggestionSet</tt> containing
          the selected label.
        </p>
      </dd><dt class="field"><b>label: String</b></dt><dd>
        
        <p>
          The label from the <tt>AvailableSuggestionSet</tt> with the `id`
          for which insertion information is requested.
        </p>
      </dd><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset in the file where the completion will be inserted.
        </p>
      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>completion: String</b></dt><dd>
        
        <p>
          The full text to insert, including any optional import prefix.
        </p>
      </dd><dt class="field"><b>change: <a href="#type_SourceChange">SourceChange</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          A change for the client to apply in case the library containing
          the accepted completion suggestion needs to be imported. The field
          will be omitted if there are no additional changes that need to be made.
        </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
    "<b>libraryFile</b>": <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a>
    "<b>includedSuggestionSets</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_IncludedSuggestionSet">IncludedSuggestionSet</a>&gt;
    "<b>includedElementKinds</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_ElementKind">ElementKind</a>&gt;
    "<b>includedSuggestionRelevanceTags</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag</a>&gt;
  }
}</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><dt class="field"><b>libraryFile: <a href="#type_FilePath">FilePath</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The library file that contains the file where completion was
          requested. The client might use it for example together with the
          <tt>existingImports</tt> notification to filter out available
          suggestions. If there were changes to existing imports in the library,
          the corresponding <tt>existingImports</tt> notification will be sent
          before the completion notification.
        </p>
      </dd><dt class="field"><b>includedSuggestionSets: List&lt;<a href="#type_IncludedSuggestionSet">IncludedSuggestionSet</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          References to <tt>AvailableSuggestionSet</tt> objects previously sent
          to the client. The client can include applicable names from the
          referenced library in code completion suggestions.
        </p>
      </dd><dt class="field"><b>includedElementKinds: List&lt;<a href="#type_ElementKind">ElementKind</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The client is expected to check this list against the
          <tt>ElementKind</tt> sent in <tt>IncludedSuggestionSet</tt> to decide
          whether or not these symbols should should be presented to the user.
        </p>
      </dd><dt class="field"><b>includedSuggestionRelevanceTags: List&lt;<a href="#type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The client is expected to check this list against the values of the
          field <tt>relevanceTags</tt> of <tt>AvailableSuggestion</tt> to
          decide if the suggestion should be given a different relevance than
          the <tt>IncludedSuggestionSet</tt> that contains it. This might be
          used for example to give higher relevance to suggestions of matching
          types.
        </p>
        <p>
          If an <tt>AvailableSuggestion</tt> has relevance tags that match more
          than one <tt>IncludedSuggestionRelevanceTag</tt>, the maximum
          relevance boost is used.
        </p>
      </dd></dl></dd><dt class="notification"><a name="notification_completion.availableSuggestions">completion.availableSuggestions</a></dt><dd><div class="box"><pre>notification: {
  "event": "completion.availableSuggestions"
  "params": {
    "<b>changedLibraries</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_AvailableSuggestionSet">AvailableSuggestionSet</a>&gt;
    "<b>removedLibraries</b>": <span style="color:#999999">optional</span> List&lt;int&gt;
  }
}</pre></div>
    <p>
      Reports the pre-computed, candidate completions from symbols defined
      in a corresponding library. This notification may be sent multiple times.
      When a notification is processed, clients should replace any previous
      information about the libraries in the list of changedLibraries, discard
      any information about the libraries in the list of removedLibraries, and
      preserve any previously received information about any libraries that are
      not included in either list.
    </p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>changedLibraries: List&lt;<a href="#type_AvailableSuggestionSet">AvailableSuggestionSet</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          A list of pre-computed, potential completions coming from
          this set of completion suggestions.
        </p>
      </dd><dt class="field"><b>removedLibraries: List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          A list of library ids that no longer apply.
        </p>
      </dd></dl></dd><dt class="notification"><a name="notification_completion.existingImports">completion.existingImports</a></dt><dd><div class="box"><pre>notification: {
  "event": "completion.existingImports"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>imports</b>": <a href="#type_ExistingImports">ExistingImports</a>
  }
}</pre></div>
    <p>
      Reports existing imports in a library. This notification may be sent
      multiple times for a library. When a notification is processed, clients
      should replace any previous information for the library.
    </p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The defining file of the library.
        </p>
      </dd><dt class="field"><b>imports: <a href="#type_ExistingImports">ExistingImports</a></b></dt><dd>
        
        <p>
          The existing imports in the library.
        </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>
    <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_FIXES_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 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.getPostfixCompletion">edit.getPostfixCompletion</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "edit.getPostfixCompletion"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>key</b>": String
    "<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>change</b>": <a href="#type_SourceChange">SourceChange</a>
  }
}</pre></div>
    <p>
      Get the changes required to convert the postfix template at the given
      location into the template's expanded form.
    </p>
    
    
  <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The file containing the postfix template to be expanded.
        </p>
      </dd><dt class="field"><b>key: String</b></dt><dd>
        
        <p>
          The unique name that identifies the template in use.
        </p>
      </dd><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset used to identify the code to which the template will be
          applied.
        </p>
      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>change: <a href="#type_SourceChange">SourceChange</a></b></dt><dd>
        
        <p>
          The change to be applied in order to complete the statement.
        </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://dart.dev/guides/language/effective-dart/style">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.getSuggestions">execution.getSuggestions</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "execution.getSuggestions"
  "params": {
    "<b>code</b>": String
    "<b>offset</b>": int
    "<b>contextFile</b>": <a href="#type_FilePath">FilePath</a>
    "<b>contextOffset</b>": int
    "<b>variables</b>": List&lt;<a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a>&gt;
    "<b>expressions</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>suggestions</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;
    "<b>expressions</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;
  }
}</pre></div>
    <p>
      Request completion suggestions for the given runtime context.
    </p>
    <p>
      It might take one or two requests of this type to get completion
      suggestions. The first request should have only "code", "offset",
      and "variables", but not "expressions". If there are sub-expressions that
      can have different runtime types, and are considered to be safe to
      evaluate at runtime (e.g. getters), so using their actual runtime types
      can improve completion results, the server will not include the
      "suggestions" field in the response, and instead will return the
      "expressions" field. The client will use debug API to get current runtime
      types for these sub-expressions and send another request, this time with
      "expressions". If there are no interesting sub-expressions to get
      runtime types for, or when the "expressions" field is provided by the
      client, the server will return "suggestions" in the response.
    </p>
    
    
  <h4>parameters:</h4><dl><dt class="field"><b>code: String</b></dt><dd>
        
        <p>
          The code to get suggestions in.
        </p>
      </dd><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset within the code to get suggestions at.
        </p>
      </dd><dt class="field"><b>contextFile: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The path of the context file, e.g. the file of the current debugger
          frame. The combination of the context file and context offset can
          be used to ensure that all variables of the context are available
          for completion (with their static types).
        </p>
      </dd><dt class="field"><b>contextOffset: int</b></dt><dd>
        
        <p>
          The offset in the context file, e.g. the line offset in the current
          debugger frame.
        </p>
      </dd><dt class="field"><b>variables: List&lt;<a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a>&gt;</b></dt><dd>
        
        <p>
          The runtime context variables that are potentially referenced in the
          code.
        </p>
      </dd><dt class="field"><b>expressions: List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The list of sub-expressions in the code for which the client wants
          to provide runtime types. It does not have to be the full list of
          expressions requested by the server, for missing expressions their
          static types will be used.
        </p>
        <p>
          When this field is omitted, the server will return completion
          suggestions only when there are no interesting sub-expressions in the
          given code. The client may provide an empty list, in this case the
          server will return completion suggestions.
        </p>
      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>suggestions: List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The completion suggestions. In contrast to usual completion request,
          suggestions for private elements also will be provided.
        </p>
        <p>
          If there are sub-expressions that can have different runtime types,
          and are considered to be safe to evaluate at runtime (e.g. getters),
          so using their actual runtime types can improve completion results,
          the server omits this field in the response, and instead will return
          the "expressions" field.
        </p>
      </dd><dt class="field"><b>expressions: List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The list of sub-expressions in the code for which the server would
          like to know runtime types to provide better completion suggestions.
        </p>
        <p>
          This field is omitted the field "suggestions" is returned.
        </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="domain_flutter">flutter domain</a></h2>
  <p>
    The analysis domain contains API’s related to Flutter support.
  </p>
  
  
  
  
<h3>Requests</h3><dl><dt class="request"><a name="request_flutter.setSubscriptions">flutter.setSubscriptions</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "flutter.setSubscriptions"
  "params": {
    "<b>subscriptions</b>": Map&lt;<a href="#type_FlutterService">FlutterService</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_FlutterService">FlutterService</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></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_flutter.outline">flutter.outline</a></dt><dd><div class="box"><pre>notification: {
  "event": "flutter.outline"
  "params": {
    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
    "<b>outline</b>": <a href="#type_FlutterOutline">FlutterOutline</a>
  }
}</pre></div>
    <p>
      Reports the Flutter 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 flutter.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>outline: <a href="#type_FlutterOutline">FlutterOutline</a></b></dt><dd>
        
        <p>
          The outline associated with the file.
        </p>
      </dd></dl></dd></dl>

  <h2 class="domain"><a name="types">Types</a></h2>
  <p>
    This section contains descriptions of the data types referenced
    in the API’s of the various domains.
  </p>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
<dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
    <p>
      A directive to begin overlaying the contents of a file. The supplied
      content will be used for analysis in place of the file contents in the
      filesystem.
    </p>
    <p>
      If this directive is used on a file that already has a file content
      overlay, the old overlay is discarded and replaced with the new one.
    </p>
    
  <dl><dt class="field"><b>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>url: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The URL of a page containing documentation associated with this error.
        </p>
      </dd><dt class="field"><b>contextMessages: List&lt;<a href="#type_DiagnosticMessage">DiagnosticMessage</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          Additional messages associated with this diagnostic that provide
          context to help the user understand the diagnostic.
        </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">CLOSING_LABELS</dt><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_AvailableSuggestion">AvailableSuggestion: object</a></dt><dd>
    <p>
      A partial completion suggestion that can be used in combination with
      info from <tt>completion.results</tt> to build completion suggestions
      for not yet imported library tokens.
    </p>
    
  <dl><dt class="field"><b>label: String</b></dt><dd>
        
        <p>
          The identifier to present to the user for code completion.
        </p>
      </dd><dt class="field"><b>declaringLibraryUri: String</b></dt><dd>
        
        <p>
          The URI of the library that declares the element being suggested,
          not the URI of the library associated with the enclosing
          <tt>AvailableSuggestionSet</tt>.
        </p>
      </dd><dt class="field"><b>element: <a href="#type_Element">Element</a></b></dt><dd>
        
        <p>
          Information about the element reference being suggested.
        </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>parameterNames: List&lt;String&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the element is an executable, the names of the formal parameters of
          all kinds - required, optional positional, and optional named. The
          names of positional parameters are empty strings. Omitted if the element
          is not an executable.
        </p>
      </dd><dt class="field"><b>parameterTypes: List&lt;String&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the element is an executable, the declared types of the formal parameters
          of all kinds - required, optional positional, and optional named.
          Omitted if the element is not an executable.
        </p>
      </dd><dt class="field"><b>relevanceTags: List&lt;<a href="#type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          This field is set if the relevance of this suggestion might be
          changed depending on where completion is requested.
        </p>
      </dd><dt class="field"><b>requiredParameterCount: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
      </dd></dl></dd><dt class="typeDefinition"><a name="type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag: String</a></dt><dd>
    
    <p>
      The opaque tag value.
    </p>
  </dd><dt class="typeDefinition"><a name="type_AvailableSuggestionSet">AvailableSuggestionSet: object</a></dt><dd>
    
  <dl><dt class="field"><b>id: int</b></dt><dd>
        
        <p>
          The id associated with the library.
        </p>
      </dd><dt class="field"><b>uri: String</b></dt><dd>
        
        <p>
          The URI of the library.
        </p>
      </dd><dt class="field"><b>items: List&lt;<a href="#type_AvailableSuggestion">AvailableSuggestion</a>&gt;</b></dt><dd>
        
      </dd></dl></dd><dt class="typeDefinition"><a name="type_BulkFix">BulkFix: object</a></dt><dd>
    <p>
      A description of bulk fixes to a library.
    </p>
    
  <dl><dt class="field"><b>path: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The path of the library.
        </p>
      </dd><dt class="field"><b>fixes: List&lt;<a href="#type_BulkFixDetail">BulkFixDetail</a>&gt;</b></dt><dd>
        
        <p>
          A list of bulk fix details.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_BulkFixDetail">BulkFixDetail: object</a></dt><dd>
    <p>
      A description of a fix applied to a library.
    </p>
    
  <dl><dt class="field"><b>code: String</b></dt><dd>
        
        <p>
          The code of the diagnostic associated with the fix.
        </p>
      </dd><dt class="field"><b>occurrences: int</b></dt><dd>
        
        <p>
          The number times the associated diagnostic was fixed in the associated
          source edit.
        </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 <tt>INVALID_OVERLAY_CHANGE</tt> 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_ClosingLabel">ClosingLabel: object</a></dt><dd>
    <p>
      A label that is associated with a range of code that may be useful to
      render at the end of the range to aid code readability. For example, a
      constructor call that spans multiple lines may result in a closing label
      to allow the constructor type/name to be rendered alongside the closing
      parenthesis.
    </p>
    
  <dl><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset of the construct being labelled.
        </p>
      </dd><dt class="field"><b>length: int</b></dt><dd>
        
        <p>
          The length of the whole construct to be labelled.
        </p>
      </dd><dt class="field"><b>label: String</b></dt><dd>
        
        <p>
          The label associated with this range that should be displayed to the
          user.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionCaseMatchingMode">CompletionCaseMatchingMode: String</a></dt><dd>
    <p>
      An enumeration of the character case matching modes that the user may set in the client.
    </p>
    
  <dl><dt class="value">FIRST_CHAR</dt><dd>
        
        <p>
          Match the first character case only when filtering completions, the default for this
          enumeration.
        </p>
      </dd><dt class="value">ALL_CHARS</dt><dd>
        
        <p>
          Match all character cases when filtering completion lists.
        </p>
      </dd><dt class="value">NONE</dt><dd>
        
        <p>
          Do not match character cases when filtering completion lists.
        </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_CompletionMode">CompletionMode: String</a></dt><dd>
    <p>
      An enumeration of the kinds of code completion that users can invoke.
    </p>
    
  <dl><dt class="value">BASIC</dt><dd>
        
        <p>
          Basic code completion invocation type, and the default for this
          enumeration.
        </p>
      </dd><dt class="value">SMART</dt><dd>
        
        <p>
          Smart code completion, currently not implemented.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionService">CompletionService: String</a></dt><dd>
    <p>
      An enumeration of the completion services to which a client can subscribe.
    </p>
    
  <dl><dt class="value">AVAILABLE_SUGGESTION_SETS</dt><dd>
        
        <p>
          The client will receive <tt>availableSuggestions</tt> notifications
          once subscribed with completion suggestion sets from the libraries of
          interest. The client should keep an up-to-date record of these in
          memory so that it will be able to union these candidates with other
          completion suggestions when applicable at completion time.
        </p>
        <p>
          The client will also receive <tt>existingImports</tt> notifications.
        </p>
      </dd></dl></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>displayText: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          Text to be displayed in, for example, a completion pop-up. This field
          is only defined if the displayed text should be different than the
          completion.  Otherwise it is omitted.
        </p>
      </dd><dt class="field"><b>replacementOffset: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The offset of the start of the text to be
          replaced. If supplied, this should be used in
          preference to the offset provided on the
          containing completion results.

          This value may be provided independently of
          replacementLength (for example if only one
          differs from the completion result value).
        </p>
      </dd><dt class="field"><b>replacementLength: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The length of the text to be replaced.
          If supplied, this should be used in preference
          to the offset provided on the
          containing completion results.

          This value may be provided independently of
          replacementOffset (for example if only one
          differs from the completion result value).
        </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></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 <tt>import 'myLib.dart' show
          someMethod;</tt>. 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 <tt>x.someMethod();</tt>. 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 call site is being suggested. For
          suggestions of this kind, the completion is the named argument
          identifier including a trailing ':' and a space.
        </p>
      </dd><dt class="value">OPTIONAL_ARGUMENT</dt><dt class="value">OVERRIDE</dt><dd>
        
        <p>
          An overriding implementation of a class member is being suggested.
        </p>
      </dd><dt class="value">PARAMETER</dt><dt class="value">PACKAGE_NAME</dt><dd>
        
        <p>The name of a pub package is being suggested.</p>
      </dd></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_DiagnosticMessage">DiagnosticMessage: object</a></dt><dd>
    <p>
      A message associated with a diagnostic.
    </p>
    <p>
      For example, if the diagnostic is reporting that a variable has been
      referenced before it was declared, it might have a diagnostic message that
      indicates where the variable is declared.
    </p>
    
  <dl><dt class="field"><b>message: String</b></dt><dd>
        
        <p>
          The message to be displayed to the user.
        </p>
      </dd><dt class="field"><b>location: <a href="#type_Location">Location</a></b></dt><dd>
        
        <p>
          The location associated with or referenced by the message. Clients
          should provide the ability to navigate to the location.
        </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><dt class="field"><b>aliasedType: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the element is a type alias, this field is the aliased type.
          Otherwise this field will not be defined.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_ElementDeclaration">ElementDeclaration: object</a></dt><dd>
    <p>
      A declaration - top-level (class, field, etc) or a class member (method,
      field, etc).
    </p>
    
  <dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name of the declaration.
        </p>
      </dd><dt class="field"><b>kind: <a href="#type_ElementKind">ElementKind</a></b></dt><dd>
        
        <p>
          The kind of the element that corresponds to the declaration.
        </p>
      </dd><dt class="field"><b>fileIndex: int</b></dt><dd>
        
        <p>
          The index of the file (in the enclosing response).
        </p>
      </dd><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset of the declaration name in the file.
        </p>
      </dd><dt class="field"><b>line: int</b></dt><dd>
        
        <p>
          The one-based index of the line containing the declaration name.
        </p>
      </dd><dt class="field"><b>column: int</b></dt><dd>
        
        <p>
          The one-based index of the column containing the declaration name.
        </p>
      </dd><dt class="field"><b>codeOffset: int</b></dt><dd>
        
        <p>
          The offset of the first character of the declaration code in the file.
        </p>
      </dd><dt class="field"><b>codeLength: int</b></dt><dd>
        
        <p>
          The length of the declaration code in the file.
        </p>
      </dd><dt class="field"><b>className: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The name of the class enclosing this declaration. If the declaration
          is not a class member, this field will be absent.
        </p>
      </dd><dt class="field"><b>mixinName: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The name of the mixin enclosing this declaration. If the declaration
          is not a mixin member, this field will be absent.
        </p>
      </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 "()".

          The value should not be treated as exact presentation of parameters,
          it is just approximation of parameters to give the user general idea.
        </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">CONSTRUCTOR_INVOCATION</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">EXTENSION</dt><dt class="value">FIELD</dt><dt class="value">FILE</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_INVOCATION</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">MIXIN</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_ALIAS</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNIT_TEST_GROUP</dt><dt class="value">UNIT_TEST_TEST</dt><dt class="value">UNKNOWN</dt></dl></dd><dt class="typeDefinition"><a name="type_ExecutableFile">ExecutableFile: object</a></dt><dd>
    <p>
      A description of an executable file.
    </p>
    
  <dl><dt class="field"><b>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_ExistingImport">ExistingImport: object</a></dt><dd>
    <p>
      Information about an existing import, with elements that it provides.
    </p>
    
  <dl><dt class="field"><b>uri: int</b></dt><dd>
        
        <p>
          The URI of the imported library.
          It is an index in the <tt>strings</tt> field, in the enclosing
          <tt>ExistingImports</tt> and its <tt>ImportedElementSet</tt> object.
        </p>
      </dd><dt class="field"><b>elements: List&lt;int&gt;</b></dt><dd>
        
        <p>
          The list of indexes of elements, in the enclosing
          <tt>ExistingImports</tt> object.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_ExistingImports">ExistingImports: object</a></dt><dd>
    <p>
      Information about all existing imports in a library.
    </p>
    
  <dl><dt class="field"><b>elements: <a href="#type_ImportedElementSet">ImportedElementSet</a></b></dt><dd>
        
        <p>
          The set of all unique imported elements for all imports.
        </p>
      </dd><dt class="field"><b>imports: List&lt;<a href="#type_ExistingImport">ExistingImport</a>&gt;</b></dt><dd>
        
        <p>
          The list of imports in the library.
        </p>
      </dd></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_FlutterOutline">FlutterOutline: object</a></dt><dd>
    <p>
      An node in the Flutter specific outline structure of a file.
    </p>
    
  <dl><dt class="field"><b>kind: <a href="#type_FlutterOutlineKind">FlutterOutlineKind</a></b></dt><dd>
        
        <p>The kind of the 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 is 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>codeOffset: int</b></dt><dd>
        
        <p>
          The offset of the first character of the element code, which is
          neither documentation, nor annotation.
        </p>
      </dd><dt class="field"><b>codeLength: int</b></dt><dd>
        
        <p>
          The length of the element code.
        </p>
      </dd><dt class="field"><b>label: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The text label of the node children of the node.
          It is provided for any FlutterOutlineKind.GENERIC node,
          where better information is not available.
        </p>
      </dd><dt class="field"><b>dartElement: <a href="#type_Element">Element</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If this node is a Dart element, the description of it; omitted
          otherwise.
        </p>
      </dd><dt class="field"><b>attributes: List&lt;<a href="#type_FlutterOutlineAttribute">FlutterOutlineAttribute</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          Additional attributes for this node, which might be interesting
          to display on the client. These attributes are usually arguments
          for the instance creation or the invocation that created the widget.
        </p>
      </dd><dt class="field"><b>className: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the node creates a new class instance, or a reference to an
          instance, this field has the name of the class.
        </p>
      </dd><dt class="field"><b>parentAssociationLabel: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          A short text description how this node is associated with the parent
          node. For example "appBar" or "body" in Scaffold.
        </p>
      </dd><dt class="field"><b>variableName: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If FlutterOutlineKind.VARIABLE, the name of the variable.
        </p>
      </dd><dt class="field"><b>children: List&lt;<a href="#type_FlutterOutline">FlutterOutline</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_FlutterOutlineAttribute">FlutterOutlineAttribute: object</a></dt><dd>
    <p>
      An attribute for a FlutterOutline.
    </p>
    
  <dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name of the attribute.
        </p>
      </dd><dt class="field"><b>label: String</b></dt><dd>
        
        <p>
          The label of the attribute value, usually the Dart code.
          It might be quite long, the client should abbreviate as needed.
        </p>
      </dd><dt class="field"><b>literalValueBoolean: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The boolean literal value of the attribute.
          This field is absent if the value is not a boolean literal.
        </p>
      </dd><dt class="field"><b>literalValueInteger: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The integer literal value of the attribute.
          This field is absent if the value is not an integer literal.
        </p>
      </dd><dt class="field"><b>literalValueString: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The string literal value of the attribute.
          This field is absent if the value is not a string literal.
        </p>
      </dd><dt class="field"><b>nameLocation: <a href="#type_Location">Location</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the attribute is a named argument, the location of the name,
          without the colon.
        </p>
      </dd><dt class="field"><b>valueLocation: <a href="#type_Location">Location</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The location of the value.
        </p>
        <p>
          This field is always available, but marked optional for backward
          compatibility between new clients with older servers.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_FlutterOutlineKind">FlutterOutlineKind: String</a></dt><dd>
    <p>
      An enumeration of the kinds of FlutterOutline elements. The list of kinds
      might be expanded with time, clients must be able to handle new kinds
      in some general way.
    </p>
    
  <dl><dt class="value">DART_ELEMENT</dt><dd>
        
        <p>A dart element declaration.</p>
      </dd><dt class="value">GENERIC</dt><dd>
        
        <p>A generic Flutter element, without additional information.</p>
      </dd><dt class="value">NEW_INSTANCE</dt><dd>
        
        <p>A new instance creation.</p>
      </dd><dt class="value">INVOCATION</dt><dd>
        
        <p>An invocation of a method, a top-level function, a function
          expression, etc.</p>
      </dd><dt class="value">VARIABLE</dt><dd>
        
        <p>A reference to a local variable, or a field.</p>
      </dd><dt class="value">PLACEHOLDER</dt><dd>
        
        <p>The parent node has a required Widget. The node works as a
          placeholder child to drop a new Widget to.</p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_FlutterService">FlutterService: String</a></dt><dd>
    <p>
      An enumeration of the services provided by the flutter domain that
      are related to a specific list of files.
    </p>
    
  <dl><dt class="value">OUTLINE</dt></dl></dd><dt class="typeDefinition"><a name="type_FlutterWidgetProperty">FlutterWidgetProperty: object</a></dt><dd>
    <p>
      A property of a Flutter widget.
    </p>
    
  <dl><dt class="field"><b>documentation: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The documentation of the property to show to the user. Omitted if
          the server does not know the documentation, e.g. because the
          corresponding field is not documented.
        </p>
      </dd><dt class="field"><b>expression: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the value of this property is set, the Dart code of the expression
          of this property.
        </p>
      </dd><dt class="field"><b>id: int</b></dt><dd>
        
        <p>
          The unique identifier of the property, must be passed back to the
          server when updating the property value. Identifiers become invalid
          on any source code change.
        </p>
      </dd><dt class="field"><b>isRequired: bool</b></dt><dd>
        
        <p>
          True if the property is required, e.g. because it corresponds to
          a required parameter of a constructor.
        </p>
      </dd><dt class="field"><b>isSafeToUpdate: bool</b></dt><dd>
        
        <p>
          If the property expression is a concrete value (e.g. a literal, or
          an enum constant), then it is safe to replace the expression with
          another concrete value. In this case this field is true. Otherwise,
          for example when the expression is a reference to a field, so that
          its value is provided from outside, this field is false.
        </p>
      </dd><dt class="field"><b>name: String</b></dt><dd>
        
        <p>The name of the property to display to the user.</p>
      </dd><dt class="field"><b>children: List&lt;<a href="#type_FlutterWidgetProperty">FlutterWidgetProperty</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The list of children properties, if any. For example any property of
          type <tt>EdgeInsets</tt> will have four children properties of type
          <tt>double</tt> - left / top / right / bottom.
        </p>
      </dd><dt class="field"><b>editor: <a href="#type_FlutterWidgetPropertyEditor">FlutterWidgetPropertyEditor</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The editor that should be used by the client. This field is omitted
          if the server does not know the editor for this property, for example
          because it does not have one of the supported types.
        </p>
      </dd><dt class="field"><b>value: <a href="#type_FlutterWidgetPropertyValue">FlutterWidgetPropertyValue</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the expression is set, and the server knows the value of the
          expression, this field is set.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_FlutterWidgetPropertyEditor">FlutterWidgetPropertyEditor: object</a></dt><dd>
    <p>
      An editor for a property of a Flutter widget.
    </p>
    
  <dl><dt class="field"><b>kind: <a href="#type_FlutterWidgetPropertyEditorKind">FlutterWidgetPropertyEditorKind</a></b></dt><dd>
        
      </dd><dt class="field"><b>enumItems: List&lt;<a href="#type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
      </dd></dl></dd><dt class="typeDefinition"><a name="type_FlutterWidgetPropertyEditorKind">FlutterWidgetPropertyEditorKind: String</a></dt><dd>
    <p>
      An enumeration of the kinds of property editors.
    </p>
    
  <dl><dt class="value">BOOL</dt><dd>
        
        <p>
          The editor for a property of type <tt>bool</tt>.
        </p>
      </dd><dt class="value">DOUBLE</dt><dd>
        
        <p>
          The editor for a property of the type <tt>double</tt>.
        </p>
      </dd><dt class="value">ENUM</dt><dd>
        
        <p>
          The editor for choosing an item of an enumeration, see the
          <tt>enumItems</tt> field of <tt>FlutterWidgetPropertyEditor</tt>.
        </p>
      </dd><dt class="value">ENUM_LIKE</dt><dd>
        
        <p>
          The editor for either choosing a pre-defined item from a list of
          provided static field references (like <tt>ENUM</tt>), or specifying
          a free-form expression.
        </p>
      </dd><dt class="value">INT</dt><dd>
        
        <p>
          The editor for a property of type <tt>int</tt>.
        </p>
      </dd><dt class="value">STRING</dt><dd>
        
        <p>
          The editor for a property of the type <tt>String</tt>.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_FlutterWidgetPropertyValue">FlutterWidgetPropertyValue: object</a></dt><dd>
    <p>
      A value of a property of a Flutter widget.
    </p>
    
  <dl><dt class="field"><b>boolValue: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
        
      </dd><dt class="field"><b>doubleValue: double<span style="color:#999999"> (optional)</span></b></dt><dd>
        
      </dd><dt class="field"><b>intValue: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
      </dd><dt class="field"><b>stringValue: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
      </dd><dt class="field"><b>enumValue: <a href="#type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
      </dd><dt class="field"><b>expression: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          A free-form expression, which will be used as the value as is.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem: object</a></dt><dd>
    <p>
      An item of an enumeration in a general sense - actual <tt>enum</tt>
      value, or a static field in a class.
    </p>
    
  <dl><dt class="field"><b>libraryUri: String</b></dt><dd>
        
        <p>
          The URI of the library containing the <tt>className</tt>. When the
          enum item is passed back, this will allow the server to import the
          corresponding library if necessary.
        </p>
      </dd><dt class="field"><b>className: String</b></dt><dd>
        
        <p>
          The name of the class or enum.
        </p>
      </dd><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name of the field in the enumeration, or the static field in the
          class.
        </p>
      </dd><dt class="field"><b>documentation: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The documentation to show to the user. Omitted if the server does not
          know the documentation, e.g. because the corresponding field is not
          documented.
        </p>
      </dd></dl></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">ANNOTATIONS</dt><dt class="value">BLOCK</dt><dt class="value">CLASS_BODY</dt><dt class="value">COMMENT</dt><dt class="value">DIRECTIVES</dt><dt class="value">DOCUMENTATION_COMMENT</dt><dt class="value">FILE_HEADER</dt><dt class="value">FUNCTION_BODY</dt><dt class="value">INVOCATION</dt><dt class="value">LITERAL</dt><dt class="value">PARAMETERS</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">CONSTRUCTOR_TEAR_OFF</dt><dt class="value">DIRECTIVE</dt><dt class="value">DYNAMIC_TYPE</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">DYNAMIC_LOCAL_VARIABLE_DECLARATION</dt><dt class="value">DYNAMIC_LOCAL_VARIABLE_REFERENCE</dt><dt class="value">DYNAMIC_PARAMETER_DECLARATION</dt><dt class="value">DYNAMIC_PARAMETER_REFERENCE</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">EXTENSION</dt><dt class="value">FIELD</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">FIELD_STATIC</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">FUNCTION</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">FUNCTION_DECLARATION</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER_DECLARATION</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">IDENTIFIER_DEFAULT</dt><dt class="value">IMPORT_PREFIX</dt><dt class="value">INSTANCE_FIELD_DECLARATION</dt><dt class="value">INSTANCE_FIELD_REFERENCE</dt><dt class="value">INSTANCE_GETTER_DECLARATION</dt><dt class="value">INSTANCE_GETTER_REFERENCE</dt><dt class="value">INSTANCE_METHOD_DECLARATION</dt><dt class="value">INSTANCE_METHOD_REFERENCE</dt><dt class="value">INSTANCE_METHOD_TEAR_OFF</dt><dt class="value">INSTANCE_SETTER_DECLARATION</dt><dt class="value">INSTANCE_SETTER_REFERENCE</dt><dt class="value">INVALID_STRING_ESCAPE</dt><dt class="value">KEYWORD</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY_NAME</dt><dt class="value">LITERAL_BOOLEAN</dt><dt class="value">LITERAL_DOUBLE</dt><dt class="value">LITERAL_INTEGER</dt><dt class="value">LITERAL_LIST</dt><dt class="value">LITERAL_MAP</dt><dt class="value">LITERAL_STRING</dt><dt class="value">LOCAL_FUNCTION_DECLARATION</dt><dt class="value">LOCAL_FUNCTION_REFERENCE</dt><dt class="value">LOCAL_FUNCTION_TEAR_OFF</dt><dt class="value">LOCAL_VARIABLE</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">LOCAL_VARIABLE_DECLARATION</dt><dt class="value">LOCAL_VARIABLE_REFERENCE</dt><dt class="value">METHOD</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">METHOD_DECLARATION</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">METHOD_DECLARATION_STATIC</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">METHOD_STATIC</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">PARAMETER</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">SETTER_DECLARATION</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">TOP_LEVEL_VARIABLE</dt><dd>
        
        <p>Deprecated - no longer sent.</p>
      </dd><dt class="value">PARAMETER_DECLARATION</dt><dt class="value">PARAMETER_REFERENCE</dt><dt class="value">STATIC_FIELD_DECLARATION</dt><dt class="value">STATIC_GETTER_DECLARATION</dt><dt class="value">STATIC_GETTER_REFERENCE</dt><dt class="value">STATIC_METHOD_DECLARATION</dt><dt class="value">STATIC_METHOD_REFERENCE</dt><dt class="value">STATIC_METHOD_TEAR_OFF</dt><dt class="value">STATIC_SETTER_DECLARATION</dt><dt class="value">STATIC_SETTER_REFERENCE</dt><dt class="value">TOP_LEVEL_FUNCTION_DECLARATION</dt><dt class="value">TOP_LEVEL_FUNCTION_REFERENCE</dt><dt class="value">TOP_LEVEL_FUNCTION_TEAR_OFF</dt><dt class="value">TOP_LEVEL_GETTER_DECLARATION</dt><dt class="value">TOP_LEVEL_GETTER_REFERENCE</dt><dt class="value">TOP_LEVEL_SETTER_DECLARATION</dt><dt class="value">TOP_LEVEL_SETTER_REFERENCE</dt><dt class="value">TOP_LEVEL_VARIABLE_DECLARATION</dt><dt class="value">TYPE_ALIAS</dt><dt class="value">TYPE_NAME_DYNAMIC</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNRESOLVED_INSTANCE_MEMBER_REFERENCE</dt><dt class="value">VALID_STRING_ESCAPE</dt></dl></dd><dt class="typeDefinition"><a name="type_HoverInformation">HoverInformation: object</a></dt><dd>
    <p>
      The hover information associated with a specific location.
    </p>
    
  <dl><dt class="field"><b>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 URI of the containing library, examples here include
          "dart:core", "package:.." and file uris represented by the
          path on disk, "/..". The data is omitted 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_ImportedElementSet">ImportedElementSet: object</a></dt><dd>
    <p>
      The set of top-level elements encoded as pairs of the defining library
      URI and the name, and stored in the parallel lists <tt>elementUris</tt>
      and <tt>elementNames</tt>.
    </p>
    
  <dl><dt class="field"><b>strings: List&lt;String&gt;</b></dt><dd>
        
        <p>
          The list of unique strings in this object.
        </p>
      </dd><dt class="field"><b>uris: List&lt;int&gt;</b></dt><dd>
        
        <p>
          The library URI part of the element.
          It is an index in the <tt>strings</tt> field.
        </p>
      </dd><dt class="field"><b>names: List&lt;int&gt;</b></dt><dd>
        
        <p>
          The name part of a the element.
          It is an index in the <tt>strings</tt> field.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_ImportedElements">ImportedElements: object</a></dt><dd>
    <p>
      A description of the elements that are referenced in a region of a file
      that come from a single imported library.
    </p>
    
  <dl><dt class="field"><b>path: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The absolute and normalized path of the file containing the library.
        </p>
      </dd><dt class="field"><b>prefix: String</b></dt><dd>
        
        <p>
          The prefix that was used when importing the library into the original
          source.
        </p>
      </dd><dt class="field"><b>elements: List&lt;String&gt;</b></dt><dd>
        
        <p>
          The names of the elements imported from the library.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag: object</a></dt><dd>
    <p>
      Each <tt>AvailableSuggestion</tt> can specify zero or more tags in the
      field <tt>relevanceTags</tt>, so that when the included tag is equal to
      one of the <tt>relevanceTags</tt>, the suggestion is given higher
      relevance than the whole <tt>IncludedSuggestionSet</tt>.
    </p>
    
  <dl><dt class="field"><b>tag: <a href="#type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag</a></b></dt><dd>
        
        <p>
          The opaque value of the tag.
        </p>
      </dd><dt class="field"><b>relevanceBoost: int</b></dt><dd>
        
        <p>
          The boost to the relevance of the completion suggestions that match
          this tag, which is added to the relevance of the containing
          <tt>IncludedSuggestionSet</tt>.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_IncludedSuggestionSet">IncludedSuggestionSet: object</a></dt><dd>
    <p>
      A reference to an <tt>AvailableSuggestionSet</tt> noting
      that the library's members which match the kind of this ref
      should be presented to the user.
    </p>
    
  <dl><dt class="field"><b>id: int</b></dt><dd>
        
        <p>
          Clients should use it to access the set of precomputed completions
          to be displayed to the user.
        </p>
      </dd><dt class="field"><b>relevance: int</b></dt><dd>
        
        <p>
          The relevance of completion suggestions from this
          library where a higher number indicates a higher relevance.
        </p>
      </dd><dt class="field"><b>displayUri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The optional string that should be displayed instead of the
          <tt>uri</tt> of the referenced <tt>AvailableSuggestionSet</tt>.
        </p>
        <p>
          For example libraries in the "test" directory of a package have only
          "file://" URIs, so are usually long, and don't look nice, but actual
          import directives will use relative URIs, which are short, so we
          probably want to display such relative URIs to the user.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_KytheEntry">KytheEntry: object</a></dt><dd>
    <p>
      This object matches the format and documentation of the Entry object
      documented in the
      <a href="https://kythe.io/docs/kythe-storage.html#_entry">Kythe Storage
        Model</a>.
    </p>
    
  <dl><dt class="field"><b>source: <a href="#type_KytheVName">KytheVName</a></b></dt><dd>
        
        <p>
          The ticket of the source node.
        </p>
      </dd><dt class="field"><b>kind: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          An edge label. The schema defines which labels are meaningful.
        </p>
      </dd><dt class="field"><b>target: <a href="#type_KytheVName">KytheVName</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The ticket of the target node.
        </p>
      </dd><dt class="field"><b>fact: String</b></dt><dd>
        
        <p>
          A fact label. The schema defines which fact labels are meaningful.
        </p>
      </dd><dt class="field"><b>value: List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The <tt>String</tt> value of the fact.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_KytheVName">KytheVName: object</a></dt><dd>
    <p>
      This object matches the format and documentation of the Vector-Name object
      documented in the
      <a href="https://kythe.io/docs/kythe-storage.html#_a_id_termvname_a_vector_name_strong_vname_strong">Kythe
        Storage Model</a>.
    </p>
    
  <dl><dt class="field"><b>signature: String</b></dt><dd>
        
        <p>
          An opaque signature generated by the analyzer.
        </p>
      </dd><dt class="field"><b>corpus: String</b></dt><dd>
        
        <p>
          The corpus of source code this <tt>KytheVName</tt> belongs to.
          Loosely, a corpus is a collection of related files, such as the
          contents of a given source repository.
        </p>
      </dd><dt class="field"><b>root: String</b></dt><dd>
        
        <p>
          A corpus-specific root label, typically a directory path or project
          identifier, denoting a distinct subset of the corpus. This may also be
          used to designate virtual collections like generated files.
        </p>
      </dd><dt class="field"><b>path: String</b></dt><dd>
        
        <p>
          A path-structured label describing the “location” of the named object
          relative to the corpus and the root.
        </p>
      </dd><dt class="field"><b>language: String</b></dt><dd>
        
        <p>
          The language this name belongs to.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_LibraryPathSet">LibraryPathSet: object</a></dt><dd>
    <p>
      A list of associations between paths and the libraries that should be
      included for code completion when editing a file beneath that path.
    </p>
    
  <dl><dt class="field"><b>scope: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The filepath for which this request's libraries should be active
          in completion suggestions. This object associates filesystem regions
          to libraries and library directories of interest to the client.
        </p>
      </dd><dt class="field"><b>libraryPaths: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
        
        <p>
          The paths of the libraries of interest to the client for completion suggestions.
        </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>
    <p>
      Edit groups may have a length of 0 and function as tabstops where there
      is no default text, for example, an edit that inserts an <tt>if</tt>
      statement might provide an empty group between parens where a condition
      should be typed. For this reason, it's also valid for a group to contain
      only a single position that is not linked to others.
    </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 (after applying the relevant edits) 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 <a href="#type_LinkedEditGroup">LinkedEditGroup</a>.
    </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><dt class="field"><b>endLine: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The one-based index of the line containing the character immediately
          following the range.
        </p>
      </dd><dt class="field"><b>endColumn: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The one-based index of the column containing the character immediately
          following 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 name of the target to which the user can navigate.
        </p>
      </dd><dt class="field"><b>length: int</b></dt><dd>
        
        <p>
          The length of the name of the target 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
          name of the target.
        </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 name of the target.
        </p>
      </dd><dt class="field"><b>codeOffset: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The offset of the target code to which the user can navigate.
        </p>
      </dd><dt class="field"><b>codeLength: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The length of the target code to which the user can navigate.
        </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 is 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>codeOffset: int</b></dt><dd>
        
        <p>
          The offset of the first character of the element code, which is
          neither documentation, nor annotation.
        </p>
      </dd><dt class="field"><b>codeLength: int</b></dt><dd>
        
        <p>
          The length of the element code.
        </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. Children are sorted by offset.
        </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_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_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_PostfixTemplateDescriptor">PostfixTemplateDescriptor: object</a></dt><dd>
    <p>
      The description of a postfix completion template.
    </p>
    
  <dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The template name, shown in the UI.
        </p>
      </dd><dt class="field"><b>key: String</b></dt><dd>
        
        <p>
          The unique template key, not shown in the UI.
        </p>
      </dd><dt class="field"><b>example: String</b></dt><dd>
        
        <p>
          A short example of the transformation performed when the template is
          applied.
        </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_RefactoringFeedback">RefactoringFeedback: object</a></dt><dd>
    <p>
      An abstract superclass of all refactoring feedbacks.
    </p>
    
  <dl></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">EXTRACT_WIDGET</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></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_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_RefactoringOptions">RefactoringOptions: object</a></dt><dd>
    <p>
      An abstract superclass of all refactoring options.
    </p>
    
  <dl></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 they want 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">FLUTTER_GET_WIDGET_DESCRIPTION_CONTENT_MODIFIED</dt><dd>
        
        <p>
          A file was change while widget descriptions were being computed.
        </p>
      </dd><dt class="value">FLUTTER_GET_WIDGET_DESCRIPTION_NO_WIDGET</dt><dd>
        
        <p>
          The given location does not have a supported widget.
        </p>
      </dd><dt class="value">FLUTTER_SET_WIDGET_PROPERTY_VALUE_INVALID_EXPRESSION</dt><dd>
        
        <p>
          The given property expression is invalid, e.g. has a syntax error.
        </p>
      </dd><dt class="value">FLUTTER_SET_WIDGET_PROPERTY_VALUE_INVALID_ID</dt><dd>
        
        <p>
          The given property identifier is not valid. It might have never been
          valid, or a change to code invalidated it, or its TTL was exceeded.
        </p>
      </dd><dt class="value">FLUTTER_SET_WIDGET_PROPERTY_VALUE_IS_REQUIRED</dt><dd>
        
        <p>
          The value of the property cannot be removed, for example because
          the corresponding constructor argument is required, and the server
          does not know what default value to use.
        </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_FIXES_INVALID_FILE</dt><dd>
        
        <p>
          An "edit.getFixes" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </dd><dt class="value">GET_IMPORTED_ELEMENTS_INVALID_FILE</dt><dd>
        
        <p>
          An "analysis.getImportedElements" request specified a FilePath that
          does not match a file currently subject to analysis.
        </p>
      </dd><dt class="value">GET_KYTHE_ENTRIES_INVALID_FILE</dt><dd>
        
        <p>
          An "analysis.getKytheEntries" request specified a FilePath that does
          not match a file that is 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">GET_SIGNATURE_INVALID_FILE</dt><dd>
        
        <p>
          An "analysis.getSignature" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </dd><dt class="value">GET_SIGNATURE_INVALID_OFFSET</dt><dd>
        
        <p>
          An "analysis.getSignature" request specified an offset
          which is not a valid location within for the contents of
          the file specified FilePath.
        </p>
      </dd><dt class="value">GET_SIGNATURE_UNKNOWN_FUNCTION</dt><dd>
        
        <p>
          An "analysis.getSignature" request specified an offset
          that could not be matched to a function call.
        </p>
      </dd><dt class="value">IMPORT_ELEMENTS_INVALID_FILE</dt><dd>
        
        <p>
          An "edit.importElements" request specified a FilePath that 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">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">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">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_RuntimeCompletionExpression">RuntimeCompletionExpression: object</a></dt><dd>
    <p>
      An expression for which we want to know its runtime type.
      In expressions like 'a.b.c.where((e) =&gt; e.^)' we want to know the
      runtime type of 'a.b.c' to enforce it statically at the time when we
      compute completion suggestions, and get better type for 'e'.
    </p>
    
  <dl><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset of the expression in the code for completion.
        </p>
      </dd><dt class="field"><b>length: int</b></dt><dd>
        
        <p>
          The length of the expression in the code for completion.
        </p>
      </dd><dt class="field"><b>type: <a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          When the expression is sent from the server to the client, the
          type is omitted. The client should fill the type when it sends the
          request to the server again.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType: object</a></dt><dd>
    <p>
      A type at runtime.
    </p>
    
  <dl><dt class="field"><b>libraryPath: <a href="#type_FilePath">FilePath</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The path of the library that has this type.
          Omitted if the type is not declared in any library, e.g. "dynamic",
          or "void".
        </p>
      </dd><dt class="field"><b>kind: <a href="#type_RuntimeCompletionExpressionTypeKind">RuntimeCompletionExpressionTypeKind</a></b></dt><dd>
        
        <p>
          The kind of the type.
        </p>
      </dd><dt class="field"><b>name: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The name of the type. Omitted if the type does not have a name, e.g.
          an inline function type.
        </p>
      </dd><dt class="field"><b>typeArguments: List&lt;<a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The type arguments of the type.
          Omitted if the type does not have type parameters.
        </p>
      </dd><dt class="field"><b>returnType: <a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the type is a function type, the return type of the function.
          Omitted if the type is not a function type.
        </p>
      </dd><dt class="field"><b>parameterTypes: List&lt;<a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the type is a function type, the types of the function parameters
          of all kinds - required, optional positional, and optional named.
          Omitted if the type is not a function type.
        </p>
      </dd><dt class="field"><b>parameterNames: List&lt;String&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the type is a function type, the names of the function parameters
          of all kinds - required, optional positional, and optional named.
          The names of positional parameters are empty strings.
          Omitted if the type is not a function type.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_RuntimeCompletionExpressionTypeKind">RuntimeCompletionExpressionTypeKind: String</a></dt><dd>
    <p>
      An enumeration of the kinds of runtime expression types.
    </p>
    
  <dl><dt class="value">DYNAMIC</dt><dt class="value">FUNCTION</dt><dt class="value">INTERFACE</dt></dl></dd><dt class="typeDefinition"><a name="type_RuntimeCompletionVariable">RuntimeCompletionVariable: object</a></dt><dd>
    <p>
      A variable in a runtime context.
    </p>
    
  <dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name of the variable.
          The name "this" has a special meaning and is used as an implicit
          target for runtime completion, and in explicit "this" references.
        </p>
      </dd><dt class="field"><b>type: <a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a></b></dt><dd>
        
        <p>
          The type of the variable.
        </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">LOG</dt><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><dt class="field"><b>id: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The optional identifier of the change kind. The identifier remains
          stable even if the message changes, or is parameterized.
        </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><span class="deprecated">fileStamp</span>: 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 <tt>offsets[i]</tt>, then
          the length of that expression is <tt>lengths[i]</tt>.
        </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 <tt>offsets[i]</tt>, then the length
          of that expression is <tt>lengths[i]</tt>.
        </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">EXTRACT_WIDGET</dt><dd>
    <p>
      Create a new class that extends StatelessWidget, whose build() method is
      the widget creation expression, or a method returning a Flutter widget,
      at the specified offset.
    </p>
    
    
  <h4>Feedback:</h4><dl></dl><h4>Options:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name that the widget class should be given.
        </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 or folder and update all of the references to
      and from it. The move operation is supported in general case -
      for renaming an item in the same folder, moving it to a different
      folder or both.

      Moving or renaming large folders may take time and clients should
      consider showing an indicator to the user with the ability to
      cancel the request (which can be done using
      <tt>server.cancelRequest</tt>).
    </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, or -1 if the name does not exist yet.
        </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><li><a href="#request_server.cancelRequest">cancelRequest</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.log">log</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.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.getReachableSources">getReachableSources</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.closingLabels">closingLabels</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><li><a href="#request_completion.setSubscriptions">setSubscriptions</a></li><li><a href="#request_completion.registerLibraryPaths">registerLibraryPaths</a></li><li><a href="#request_completion.getSuggestionDetails">getSuggestionDetails</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li><li><a href="#notification_completion.availableSuggestions">availableSuggestions</a></li><li><a href="#notification_completion.existingImports">existingImports</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.getPostfixCompletion">getPostfixCompletion</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.getSuggestions">getSuggestions</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><h4>flutter (<a href="#domain_flutter">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_flutter.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_flutter.outline">outline</a></li></ul></div></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_AvailableSuggestion">AvailableSuggestion</a></li><li><a href="#type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag</a></li><li><a href="#type_AvailableSuggestionSet">AvailableSuggestionSet</a></li><li><a href="#type_BulkFix">BulkFix</a></li><li><a href="#type_BulkFixDetail">BulkFixDetail</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_ClosingLabel">ClosingLabel</a></li><li><a href="#type_CompletionCaseMatchingMode">CompletionCaseMatchingMode</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionMode">CompletionMode</a></li><li><a href="#type_CompletionService">CompletionService</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_DiagnosticMessage">DiagnosticMessage</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementDeclaration">ElementDeclaration</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_ExistingImport">ExistingImport</a></li><li><a href="#type_ExistingImports">ExistingImports</a></li><li><a href="#type_FileKind">FileKind</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FlutterOutline">FlutterOutline</a></li><li><a href="#type_FlutterOutlineAttribute">FlutterOutlineAttribute</a></li><li><a href="#type_FlutterOutlineKind">FlutterOutlineKind</a></li><li><a href="#type_FlutterService">FlutterService</a></li><li><a href="#type_FlutterWidgetProperty">FlutterWidgetProperty</a></li><li><a href="#type_FlutterWidgetPropertyEditor">FlutterWidgetPropertyEditor</a></li><li><a href="#type_FlutterWidgetPropertyEditorKind">FlutterWidgetPropertyEditorKind</a></li><li><a href="#type_FlutterWidgetPropertyValue">FlutterWidgetPropertyValue</a></li><li><a href="#type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem</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_ImportedElementSet">ImportedElementSet</a></li><li><a href="#type_ImportedElements">ImportedElements</a></li><li><a href="#type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag</a></li><li><a href="#type_IncludedSuggestionSet">IncludedSuggestionSet</a></li><li><a href="#type_KytheEntry">KytheEntry</a></li><li><a href="#type_KytheVName">KytheVName</a></li><li><a href="#type_LibraryPathSet">LibraryPathSet</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_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</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_RuntimeCompletionExpression">RuntimeCompletionExpression</a></li><li><a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a></li><li><a href="#type_RuntimeCompletionExpressionTypeKind">RuntimeCompletionExpressionTypeKind</a></li><li><a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</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_EXTRACT_WIDGET">EXTRACT_WIDGET</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>