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

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

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

h4 {
  font-size: 18px;
}

h5 {
  font-size: 16px;
}

p {
  margin-top: 0;
}

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

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

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

dl dt {
  font-weight: bold;
}

dl dd {
  margin-left: 16px;
}

dt {
  margin-top: 1em;
}

dt.notification {
  font-weight: bold;
}

dt.refactoring {
  font-weight: bold;
}

dt.request {
  font-weight: bold;
}

dt.typeDefinition {
  font-weight: bold;
}

a {
  text-decoration: none;
}

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

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

/* Styles for index */

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

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

  list-style-type: none;
}
</style></head>
<body>
<h1>Analysis Server Plugin API Specification</h1>
<h1 style="color:#999999">Version
  1.0.0-alpha.0
</h1>
<p>
  This document contains a specification of the API used by the analysis
  server to communicate with analysis server plugins. Changes to the API will be
  accompanied by an update to the protocol version number according to the
  principles of semantic versioning
  (<a href="http://semver.org/">semver.org</a>).
</p>
<h2>Overview</h2>
<p>
  TBD
</p>
<h2 class="domain"><a name="domain_plugin">plugin domain</a></h2>
  <p>
    The plugin domain contains API's related to the execution of a plugin.
  </p>
  <p>
    TODO: Provide notifications by which plugins can report instrumentation
    and/or DartSilo data.
  </p>
  <p>
    TODO: Add a notification to the server protocol to inform the client of
    problems related to the execution of plugins.
  </p>
  
  
  
  
  
  
<h3>Requests</h3><dl><dt class="request"><a name="request_plugin.versionCheck">plugin.versionCheck</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "plugin.versionCheck"
  "params": {
    "<b>byteStorePath</b>": <a href="#type_FilePath">FilePath</a>
    "<b>sdkPath</b>": <a href="#type_FilePath">FilePath</a>
    "<b>version</b>": String
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>isCompatible</b>": bool
    "<b>name</b>": String
    "<b>version</b>": String
    "<b>contactInfo</b>": <span style="color:#999999">optional</span> String
    "<b>interestingFiles</b>": List&lt;String&gt;
  }
}</pre></div>
    <p>
      Used to request that the plugin perform a version check to confirm that it
      works with the version of the analysis server that is executing it.
    </p>
    
    
  <h4>parameters:</h4><dl><dt class="field"><b>byteStorePath: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The path to the directory containing the on-disk byte store that is to
          be used by any analysis drivers that are created.
        </p>
      </dd><dt class="field"><b>sdkPath: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The path to the directory containing the SDK that is to be used by any
          analysis drivers that are created.
        </p>
      </dd><dt class="field"><b>version: String</b></dt><dd>
        
        <p>
          The version number of the plugin spec supported by the analysis server
          that is executing the plugin.
        </p>
      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>isCompatible: bool</b></dt><dd>
        
        <p>
          A flag indicating whether the plugin supports the same version of the
          plugin spec as the analysis server. If the value is <tt>false</tt>,
          then the plugin is expected to shutdown after returning the response.
        </p>
      </dd><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name of the plugin. This value is only used when the server needs
          to identify the plugin, either to the user or for debugging purposes.
        </p>
      </dd><dt class="field"><b>version: String</b></dt><dd>
        
        <p>
          The version of the plugin. This value is only used when the server
          needs to identify the plugin, either to the user or for debugging
          purposes.
        </p>
      </dd><dt class="field"><b>contactInfo: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          Information that the user can use to use to contact the maintainers of
          the plugin when there is a problem.
        </p>
      </dd><dt class="field"><b>interestingFiles: List&lt;String&gt;</b></dt><dd>
        
        <p>
          The glob patterns of the files for which the plugin will provide
          information. This value is ignored if the <tt>isCompatible</tt>
          field is <tt>false</tt>. Otherwise, it will be used to identify
          the files for which the plugin should be notified of changes.
        </p>
      </dd></dl></dd><dt class="request"><a name="request_plugin.details">plugin.details</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "plugin.details"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>plugins</b>": List&lt;<a href="#type_PluginDetails">PluginDetails</a>&gt;
  }
}</pre></div>
    <p>
      Details regarding the registered plugins, for analytics-reporting and
      insights-reporting purposes.
    </p>
    
  <h4>returns:</h4><dl><dt class="field"><b>plugins: List&lt;<a href="#type_PluginDetails">PluginDetails</a>&gt;</b></dt><dd>
        
        <p>
          A list of the details of all registered plugins.
        </p>
      </dd></dl></dd><dt class="request"><a name="request_plugin.shutdown">plugin.shutdown</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "plugin.shutdown"
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
    <p>
      Used to request that the plugin exit. The server will not send any other
      requests after this request. The plugin should not send any responses or
      notifications after sending the response to this request.
    </p>
  </dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_plugin.error">plugin.error</a></dt><dd><div class="box"><pre>notification: {
  "event": "plugin.error"
  "params": {
    "<b>isFatal</b>": bool
    "<b>message</b>": String
    "<b>stackTrace</b>": String
  }
}</pre></div>
    <p>
      Used to report that an unexpected error has occurred while executing the
      plugin. This notification is not used for problems with specific requests
      (which should be returned as part of the response) but is used for
      exceptions that occur while performing other tasks, such as analysis or
      preparing notifications.
    </p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>isFatal: bool</b></dt><dd>
        
        <p>
          A flag indicating whether the error is a fatal error, meaning that the
          plugin will shutdown automatically after sending this notification. If
          <tt>true</tt>, the server will not expect any other responses or
          notifications from the plugin.
        </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 plugin.
        </p>
      </dd></dl></dd><dt class="notification"><a name="notification_plugin.print">plugin.print</a></dt><dd><div class="box"><pre>notification: {
  "event": "plugin.print"
  "params": {
    "<b>pluginPrint</b>": <a href="#type_PluginPrint">PluginPrint</a>
  }
}</pre></div>
    <p>
      Contains a message printed by a plugin.
    </p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>pluginPrint: <a href="#type_PluginPrint">PluginPrint</a></b></dt><dd>
        
        <p>
          Information about the message being printed.
        </p>
      </dd></dl></dd><dt class="notification"><a name="notification_plugin.status">plugin.status</a></dt><dd><div class="box"><pre>notification: {
  "event": "plugin.status"
  "params": {
    "<b>analysis</b>": <span style="color:#999999">optional</span> <a href="#type_AnalysisStatus">AnalysisStatus</a>
  }
}</pre></div>
    <p>
      Reports the current status of the plugin. Parameters are omitted if there
      has been no change in the status represented by that parameter.
    </p>
    <p>
      Only used for "new" analyzer plugins. Legacy plugins should not use
      this type.
    </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 (whether analysis is being performed).
        </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.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>
    
    
  <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The file in which navigation information is being requested.
        </p>
      </dd><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset of the region for which navigation information is being
          requested.
        </p>
      </dd><dt class="field"><b>length: int</b></dt><dd>
        
        <p>
          The length of the region for which navigation information is being
          requested.
        </p>
      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
        
        <p>
          A list of the paths of files that are referenced by the navigation
          targets.
        </p>
      </dd><dt class="field"><b>targets: List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;</b></dt><dd>
        
        <p>
          A list of the navigation targets that are referenced by the
          navigation regions.
        </p>
      </dd><dt class="field"><b>regions: List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;</b></dt><dd>
        
        <p>
          A list of the navigation regions within the requested region of
          the file.
        </p>
      </dd></dl></dd><dt class="request"><a name="request_analysis.handleWatchEvents">analysis.handleWatchEvents</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.handleWatchEvents"
  "params": {
    "<b>events</b>": List&lt;<a href="#type_WatchEvent">WatchEvent</a>&gt;
  }
}</pre><br><pre>response: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
    <p>
      Used to inform the plugin of changes to files in the file system. Only
      events associated with files that match the <tt>interestingFiles</tt> glob
      patterns will be forwarded to the plugin.
    </p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>events: List&lt;<a href="#type_WatchEvent">WatchEvent</a>&gt;</b></dt><dd>
        
        <p>
          The watch events that the plugin should handle.
        </p>
      </dd></dl></dd><dt class="request"><a name="request_analysis.setContextRoots">analysis.setContextRoots</a></dt><dd><div class="box"><pre>request: {
  "id": String
  "method": "analysis.setContextRoots"
  "params": {
    "<b>roots</b>": List&lt;<a href="#type_ContextRoot">ContextRoot</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 list of context roots that should be analyzed.
    </p>
    
  <h4>parameters:</h4><dl><dt class="field"><b>roots: List&lt;<a href="#type_ContextRoot">ContextRoot</a>&gt;</b></dt><dd>
        
        <p>
          A list of the context roots that should be analyzed.
        </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>
      Used to set the priority files to the files in the given list. A priority
      file is a file that should be 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>
    
  <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>
      Used to subscribe for services that are specific to individual files. All
      previous subscriptions should be replaced by the current set of
      subscriptions. If a given service is not included as a key in the map then
      no files should be subscribed to the service, exactly as if the service
      had been included in the map with an explicit empty list of files.
    </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>
}</pre></div>
    <p>
      Used to 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 the plugin 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></dd></dl><h3>Notifications</h3><dl><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>
      Used to report 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.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>
      Used to report the folding regions associated with a given file. Folding
      regions can be nested, but cannot be overlapping. Nesting occurs when a
      foldable element, such as a method, is nested inside another foldable
      element such as a class.
    </p>
    <p>
      Folding regions that overlap a folding region computed by the server, or
      by one of the other plugins that are currently running, might be dropped
      by the server in order to present a consistent view to the client.
    </p>
    <p>
      This notification should only be sent if the server has subscribed to it
      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>
      Used to report the highlight regions associated with a given 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>
    <p>
      This notification should only be sent if the server has subscribed to it
      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.
        </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>
      Used to report the navigation regions associated with a given file. 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 should not overlap other navigation
      regions.
    </p>
    <p>
      Navigation regions that overlap a navigation region computed by the
      server, or by one of the other plugins that are currently running, might
      be dropped or modified by the server in order to present a consistent view
      to the client.
    </p>
    <p>
      This notification should only be sent if the server has subscribed to it
      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.
        </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
          <a href="#type_NavigationRegion">NavigationRegion</a>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
          <a href="#type_NavigationTarget">NavigationTarget</a>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>
      Used to report the occurrences of references to elements within a single
      file. None of the occurrence regions should overlap.
    </p>
    <p>
      Occurrence regions that overlap an occurrence region computed by the
      server, or by one of the other plugins that are currently running, might
      be dropped or modified by the server in order to present a consistent view
      to the client.
    </p>
    <p>
      This notification should only be sent if the server has subscribed to it
      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>outline</b>": List&lt;<a href="#type_Outline">Outline</a>&gt;
  }
}</pre></div>
    <p>
      Used to report the outline fragments associated with a single file.
    </p>
    <p>
      The outline fragments will be merged with any outline produced by the
      server and with any fragments produced by other plugins. If the server
      cannot create a coherent outline, some fragments might be dropped.
    </p>
    <p>
      This notification should only be sent if the server has subscribed to it
      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>outline: List&lt;<a href="#type_Outline">Outline</a>&gt;</b></dt><dd>
        
        <p>
          The outline fragments associated with the file.
        </p>
      </dd></dl></dd></dl>
<h2 class="domain"><a name="domain_completion">completion domain</a></h2>
  <p>Deprecated - no longer supported.</p>
  <p>
    The code completion domain contains API's 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: {
  "id": String
  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
  "result": {
    "<b>replacementOffset</b>": int
    "<b>replacementLength</b>": int
    "<b>results</b>": List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;
  }
}</pre></div>
    <p>Deprecated - no longer supported.</p>
    <p>
      Used to 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>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></dl></dd></dl>
<h2 class="domain"><a name="domain_edit">edit domain</a></h2>
  <p>
    The edit domain contains API's related to edits that can be applied to the
    code.
  </p>
  
  
  
  
<h3>Requests</h3><dl><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_PrioritizedSourceChange">PrioritizedSourceChange</a>&gt;
  }
}</pre></div>
    <p>
      Used to request 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_PrioritizedSourceChange">PrioritizedSourceChange</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.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>
      Used to request the set of fixes that are available for the errors at a
      given offset in a given file.
    </p>
    
    
  <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The file containing the errors for which fixes are being requested.
        </p>
      </dd><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset used to select the errors for which fixes will be returned.
        </p>
      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>fixes: List&lt;<a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt;</b></dt><dd>
        
        <p>
          The fixes that are available for the errors at the given offset.
        </p>
      </dd></dl></dd></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><dt class="field"><b>version: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>An optional version number for the document. Version numbers allow the server to tag edits with the version of the document they apply to which can avoid applying edits to documents that have already been updated since the edits were computed.</p>
        <p>If version numbers are supplied with AddContentOverlay and ChangeContentOverlay, they must be increasing (but not necessarily consecutive) numbers.</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_PrioritizedSourceChange">PrioritizedSourceChange</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"><a name="type_AnalysisService">AnalysisService: String</a></dt><dd>
    <p>
      An enumeration of the services provided by the analysis domain that are
      related to a specific list of files.
    </p>
    
  <dl><dt class="value">FOLDING</dt><dt class="value">HIGHLIGHTS</dt><dt class="value">NAVIGATION</dt><dt class="value">OCCURRENCES</dt><dt class="value">OUTLINE</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>
    <p>
      Only used for "new" analyzer plugins. Legacy plugins should not use
      this type.
    </p>
    
  <dl><dt class="field"><b>isAnalyzing: bool</b></dt><dd>
        
        <p>True if analysis is currently being performed.</p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_AssistDescription">AssistDescription: object</a></dt><dd>
    <p>
      The description of a registered assist.
    </p>
    
  <dl><dt class="field"><b>id: String</b></dt><dd>
        
        <p>
          The ID.
        </p>
      </dd><dt class="field"><b>message: String</b></dt><dd>
        
        <p>
          The message that is presented to the user, to carry out this assist.
        </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><dt class="field"><b>version: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>An optional version number for the document. Version numbers allow the server to tag edits with the version of the document they apply to which can avoid applying edits to documents that have already been updated since the edits were computed.</p>
        <p>If version numbers are supplied with AddContentOverlay and ChangeContentOverlay, they must be increasing (but not necessarily consecutive) numbers.</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><dt class="field"><b>libraryUri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          This field  is omitted if <tt>getSuggestions</tt> was used rather
          than <tt>getSuggestions2</tt>.
        </p>
        <p>
          This field  is omitted if this suggestion corresponds to a locally
          declared element.
        </p>
        <p>
          If this suggestion corresponds to an already imported element,
          then this field is the URI of a library that provides this element,
          not the URI of the library where the element is declared.
        </p>
        <p>
          If this suggestion corresponds to an element from a not yet
          imported library, this field is the URI of a library that could be
          imported to make this suggestion  accessible in the file where
          completion was requested, such as <tt>package:foo/bar.dart</tt> or
          <tt>file:///home/me/workspace/foo/test/bar_test.dart</tt>.
        </p>
      </dd><dt class="field"><b>isNotImported: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          True if the suggestion is for an element from a not yet imported
          library. This field is omitted if the element is declared locally,
          or is from library is already imported, so that the suggestion can
          be inserted as is, or if <tt>getSuggestions</tt> was used rather
          than <tt>getSuggestions2</tt>.
        </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_ContextRoot">ContextRoot: object</a></dt><dd>
    <p>
      A description of an analysis context.
    </p>
    
  <dl><dt class="field"><b>root: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The absolute path of the root directory containing the files to be
          analyzed.
        </p>
      </dd><dt class="field"><b>exclude: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
        
        <p>
          A list of the absolute paths of files and directories within the root
          directory that should not be analyzed.
        </p>
      </dd><dt class="field"><b>optionsFile: <a href="#type_FilePath">FilePath</a><span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The absolute path of the analysis options file that should be used to
          control the analysis of the files in the context.
        </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><dt class="field"><b>extendedType: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          If the element is an extension, this field is the name of the type
          that is extended. This can be useful to show in UIs for unnamed
          extension, for example "extension on {extendedType}". This field
          might not be defined even for an extension in the case of invalid code.
        </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">EXTENSION_TYPE</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_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_FixDescription">FixDescription: object</a></dt><dd>
    <p>
      The description of a registered fix.
    </p>
    
  <dl><dt class="field"><b>id: String</b></dt><dd>
        
        <p>
          The ID.
        </p>
      </dd><dt class="field"><b>message: String</b></dt><dd>
        
        <p>
          The message that is presented to the user, to carry out this fix.
        </p>
      </dd><dt class="field"><b>codes: List&lt;String&gt;</b></dt><dd>
        
        <p>
          The IDs of the diagnostic codes with which this fix was registered.
        </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_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><dd>
        
        <p>Deprecated - no longer sent, KEYWORD used instead.</p>
      </dd><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">EXTENSION_TYPE</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_RECORD</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">MIXIN</dt><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_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_PluginDetails">PluginDetails: object</a></dt><dd>
    <p>
      The details of an active plugin.
    </p>
    
  <dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name of the plugin.
        </p>
      </dd><dt class="field"><b>lintRules: List&lt;String&gt;</b></dt><dd>
        
        <p>
          A list of the IDs of the analysis rules which have been registered as
          lint rules.
        </p>
      </dd><dt class="field"><b>warningRules: List&lt;String&gt;</b></dt><dd>
        
        <p>
          A list of the IDs of the analysis rules which have been registered as
          warning rules.
        </p>
      </dd><dt class="field"><b>assists: List&lt;<a href="#type_AssistDescription">AssistDescription</a>&gt;</b></dt><dd>
        
        <p>
          A list of the descriptions of registered assists.
        </p>
      </dd><dt class="field"><b>fixes: List&lt;<a href="#type_FixDescription">FixDescription</a>&gt;</b></dt><dd>
        
        <p>
          A list of the descriptions of registered fixes.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_PluginPrint">PluginPrint: object</a></dt><dd>
    <p>
      A message printed from a plugin with 'print'.
    </p>
    
  <dl><dt class="field"><b>pluginName: String</b></dt><dd>
        
        <p>
          The name of the plugin which called 'print'.
        </p>
      </dd><dt class="field"><b>message: String</b></dt><dd>
        
        <p>
          The message which has been printed.
        </p>
      </dd><dt class="field"><b>timestamp: int</b></dt><dd>
        
        <p>
          The timestamp, in milliseconds since the epoch, of when the message
          was requested to be printed.
        </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_PrioritizedSourceChange">PrioritizedSourceChange: object</a></dt><dd>
    <p>
      A source change that has a priority associated with it.
    </p>
    
  <dl><dt class="field"><b>priority: int</b></dt><dd>
        
        <p>
          The priority of the change. The value is expected to be non-negative,
          and zero (0) is the lowest priority.
        </p>
      </dd><dt class="field"><b>change: <a href="#type_SourceChange">SourceChange</a></b></dt><dd>
        
        <p>
          The change with which the relevance is associated.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_RefactoringKind">RefactoringKind: String</a></dt><dd>
    <p>
      An enumeration of the kinds of refactorings that can be created.
    </p>
    
  <dl><dt class="value">CONVERT_GETTER_TO_METHOD</dt><dt class="value">CONVERT_METHOD_TO_GETTER</dt><dt class="value">EXTRACT_LOCAL_VARIABLE</dt><dt class="value">EXTRACT_METHOD</dt><dt class="value">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_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 plugin.
        </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 plugin.
    </p>
    
  <dl><dt class="value">INVALID_OVERLAY_CHANGE</dt><dd>
        
        <p>
          An "analysis.updateContent" request contained a
          <a href="#type_ChangeContentOverlay">ChangeContentOverlay</a> object
          that can't be applied. This can happen for two reasons:
        </p>
        <ul>
          <li>
            there was no preceding
            <a href="#type_AddContentOverlay">AddContentOverlay</a> and hence no
            content to which the edits could be applied, or
          </li>
          <li>
            one or more of the specified edits have an offset or length that is
            out of range.
          </li>
        </ul>
      </dd><dt class="value">INVALID_PARAMETER</dt><dd>
        
        <p>
          One of the method parameters was invalid.
        </p>
      </dd><dt class="value">PLUGIN_ERROR</dt><dd>
        
        <p>
          An internal error occurred in the plugin while attempting to respond
          to a request. Also see the plugin.error notification for errors that
          occur outside of handling a request.
        </p>
      </dd><dt class="value">UNKNOWN_REQUEST</dt><dd>
        
        <p>
          A request was received that the plugin does not recognize, or cannot
          handle in its current configuration.
        </p>
      </dd></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>
        <p>
          If this change includes multiple edits made for different reasons (such as
          during a bulk fix operation), the individual items in <tt>edits</tt> may
          contain more specific descriptions.
        </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>selectionLength: int<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The length of the selection (starting at 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><dt class="field"><b>description: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          A human readable description of the change made by this edit.
        </p>
        <p>
          This description should be short and suitable to use as a heading
          with changes grouped by it. For example, a change made as part of
          a quick-fix may use the message "Replace final with var", allowing
          multiple changes and multiple applications of the fix to be grouped
          together.
        </p>
        <p>
          This value may be more specific than any value in an enclosing
          <tt>SourceChange.message</tt> which could contain edits made for
          different reasons (such as during a bulk fix operation).
        </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_WatchEvent">WatchEvent: object</a></dt><dd>
    <p>
      A watch event sent by the server when the file system has been modified.
    </p>
    
  <dl><dt class="field"><b>type: <a href="#type_WatchEventType">WatchEventType</a></b></dt><dd>
        
        <p>
          The type of change represented by this event.
        </p>
      </dd><dt class="field"><b>path: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The absolute path of the file or directory that changed.
        </p>
      </dd></dl></dd><dt class="typeDefinition"><a name="type_WatchEventType">WatchEventType: String</a></dt><dd>
    <p>
      An indication of the type of change associated with a watch event.
    </p>
    
  <dl><dt class="value">ADD</dt><dd>
        
        <p>
          An indication that the file or directory was added.
        </p>
      </dd><dt class="value">MODIFY</dt><dd>
        
        <p>
          An indication that the file was modified.
        </p>
      </dd><dt class="value">REMOVE</dt><dd>
        
        <p>
          An indication that the file or directory was removed.
        </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
    <a href="request_edit.getRefactoring">edit.getRefactoring</a> request
    (designed to improve the UX) and the options that may be provided to
    <a href="request_edit.getRefactoring">edit.getRefactoring</a>.
  </p>
  
  
  
  
  
  
  
  
<dl><dt class="refactoring">CONVERT_GETTER_TO_METHOD</dt><dd>
    <p>
      Convert a getter into a method by removing the keyword get and adding an
      empty parameter list.
    </p>
    <p>
      It is an error if the range contains anything other than all or part of
      the name of a single getter.
    </p>
  <h4>Feedback:</h4><p>none</p><h4>Options:</h4><p>none</p></dd><dt class="refactoring">CONVERT_METHOD_TO_GETTER</dt><dd>
    <p>
      Convert a method into a getter by adding the keyword get and removing the
      parameter list.
    </p>
    <p>
      It is an error if the range contains anything other than all or part of
      the name of a single method or if the method has a non-empty parameter
      list.
    </p>
  <h4>Feedback:</h4><p>none</p><h4>Options:</h4><p>none</p></dd><dt class="refactoring">EXTRACT_LOCAL_VARIABLE</dt><dd>
    <p>
      Create a local variable initialized by the expression that covers the
      specified selection.
    </p>
    <p>
      It is an error if the selection range is not covered by a complete
      expression.
    </p>
    
    
  <h4>Feedback:</h4><dl><dt class="field"><b>coveringExpressionOffsets: List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The offsets of the expressions that cover the specified selection,
          from the down most to the up most.
        </p>
      </dd><dt class="field"><b>coveringExpressionLengths: List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The lengths of the expressions that cover the specified selection,
          from the down most to the up most.
        </p>
      </dd><dt class="field"><b>names: List&lt;String&gt;</b></dt><dd>
        
        <p>
          The proposed names for the local variable.
        </p>
      </dd><dt class="field"><b>offsets: List&lt;int&gt;</b></dt><dd>
        
        <p>
          The offsets of the expressions that would be replaced by a reference
          to the variable.
        </p>
      </dd><dt class="field"><b>lengths: List&lt;int&gt;</b></dt><dd>
        
        <p>
          The lengths of the expressions that would be replaced by a reference
          to the variable. The lengths correspond to the offsets. In other
          words, for a given expression, if the offset of that expression is
          offsets[i], then the length of that expression is lengths[i].
        </p>
      </dd></dl><h4>Options:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name that the local variable should be given.
        </p>
      </dd><dt class="field"><b>extractAll: bool</b></dt><dd>
        
        <p>
          True if all occurrences of the expression within the scope in which
          the variable will be defined should be replaced by a reference to the
          local variable. The expression used to initiate the refactoring will
          always be replaced.
        </p>
      </dd></dl></dd><dt class="refactoring">EXTRACT_METHOD</dt><dd>
    <p>
      Create a method whose body is the specified expression or list of
      statements, possibly augmented with a return statement.
    </p>
    <p>
      It is an error if the range contains anything other than a complete
      expression (no partial expressions are allowed) or a complete sequence of
      statements.
    </p>
    
    
  <h4>Feedback:</h4><dl><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset to the beginning of the expression or statements that will
          be extracted.
        </p>
      </dd><dt class="field"><b>length: int</b></dt><dd>
        
        <p>
          The length of the expression or statements that will be extracted.
        </p>
      </dd><dt class="field"><b>returnType: String</b></dt><dd>
        
        <p>
          The proposed return type for the method. If the returned element does
          not have a declared return type, this field will contain an empty
          string.
        </p>
      </dd><dt class="field"><b>names: List&lt;String&gt;</b></dt><dd>
        
        <p>
          The proposed names for the method.
        </p>
      </dd><dt class="field"><b>canCreateGetter: bool</b></dt><dd>
        
        <p>
          True if a getter could be created rather than a method.
        </p>
      </dd><dt class="field"><b>parameters: List&lt;<a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt;</b></dt><dd>
        
        <p>
          The proposed parameters for the method.
        </p>
      </dd><dt class="field"><b>offsets: List&lt;int&gt;</b></dt><dd>
        
        <p>
          The offsets of the expressions or statements that would be replaced by
          an invocation of the method.
        </p>
      </dd><dt class="field"><b>lengths: List&lt;int&gt;</b></dt><dd>
        
        <p>
          The lengths of the expressions or statements that would be replaced by
          an invocation of the method. The lengths correspond to the offsets. In
          other words, for a given expression (or block of statements), if the
          offset of that expression is offsets[i], then the length of that
          expression is lengths[i].
        </p>
      </dd></dl><h4>Options:</h4><dl><dt class="field"><b>returnType: String</b></dt><dd>
        
        <p>
          The return type that should be defined for the method.
        </p>
      </dd><dt class="field"><b>createGetter: bool</b></dt><dd>
        
        <p>
          True if a getter should be created rather than a method. It is an
          error if this field is true and the list of parameters is non-empty.
        </p>
      </dd><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name that the method should be given.
        </p>
      </dd><dt class="field"><b>parameters: List&lt;<a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt;</b></dt><dd>
        
        <p>
          The parameters that should be defined for the method.
        </p>
        <p>
          It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL
          parameter. It is an error if a REQUIRED or POSITIONAL parameter
          follows a NAMED parameter.
        </p>
        <ul>
          <li>
            To change the order and/or update proposed parameters, add
            parameters with the same identifiers as proposed.
          </li>
          <li>
            To add new parameters, omit their identifier.
          </li>
          <li>
            To remove some parameters, omit them in this list.
          </li>
        </ul>
      </dd><dt class="field"><b>extractAll: bool</b></dt><dd>
        
        <p>
          True if all occurrences of the expression or statements should be
          replaced by an invocation of the method. The expression or statements
          used to initiate the refactoring will always be replaced.
        </p>
      </dd></dl></dd><dt class="refactoring">INLINE_LOCAL_VARIABLE</dt><dd>
    <p>
      Inline the initializer expression of a local variable in place of any
      references to that variable.
    </p>
    <p>
      It is an error if the range contains anything other than all or part of
      the name of a single local variable.
    </p>
    
  <h4>Feedback:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
        
        <p>
          The name of the variable being inlined.
        </p>
      </dd><dt class="field"><b>occurrences: int</b></dt><dd>
        
        <p>
          The number of times the variable occurs.
        </p>
      </dd></dl><h4>Options:</h4><p>none</p></dd><dt class="refactoring">INLINE_METHOD</dt><dd>
    <p>
      Inline a method in place of one or all references to that method.
    </p>
    <p>
      It is an error if the range contains anything other than all or part of
      the name of a single method.
    </p>
    
    
  <h4>Feedback:</h4><dl><dt class="field"><b>className: String<span style="color:#999999"> (optional)</span></b></dt><dd>
        
        <p>
          The name of the class enclosing the method being inlined. If not a
          class member is being inlined, this field will be absent.
        </p>
      </dd><dt class="field"><b>methodName: String</b></dt><dd>
        
        <p>
          The name of the method (or function) being inlined.
        </p>
      </dd><dt class="field"><b>isDeclaration: bool</b></dt><dd>
        
        <p>
          True if the declaration of the method is selected and all references
          should be inlined.
        </p>
      </dd></dl><h4>Options:</h4><dl><dt class="field"><b>deleteSource: bool</b></dt><dd>
        
        <p>
          True if the method being inlined should be removed. It is an error if
          this field is true and inlineAll is false.
        </p>
      </dd><dt class="field"><b>inlineAll: bool</b></dt><dd>
        
        <p>
          True if all invocations of the method should be inlined, or false if
          only the invocation site used to create this refactoring should be
          inlined.
        </p>
      </dd></dl></dd><dt class="refactoring">MOVE_FILE</dt><dd>
    <p>
      Move the given file and update all of the references to that file and from
      it. The move operation is supported in general case - for renaming a file
      in the same folder, moving it to a different folder or both.
    </p>
    <p>
      The refactoring must be activated before an actual file moving operation
      is performed.
    </p>
    <p>
      The "offset" and "length" fields from the request are ignored, but the
      file specified in the request specifies the file to be moved.
    </p>
    
  <h4>Feedback:</h4><p>none</p><h4>Options:</h4><dl><dt class="field"><b>newFile: <a href="#type_FilePath">FilePath</a></b></dt><dd>
        
        <p>
          The new file path to which the given file is being moved.
        </p>
      </dd></dl></dd><dt class="refactoring">RENAME</dt><dd>
    <p>
      Rename a given element and all of the references to that element.
    </p>
    <p>
      It is an error if the range contains anything other than all or part of
      the name of a single function (including methods, getters and setters),
      variable (including fields, parameters and local variables), class or
      function type.
    </p>
    
    
  <h4>Feedback:</h4><dl><dt class="field"><b>offset: int</b></dt><dd>
        
        <p>
          The offset to the beginning of the name selected to be renamed.
        </p>
      </dd><dt class="field"><b>length: int</b></dt><dd>
        
        <p>
          The length of the name selected to be renamed.
        </p>
      </dd><dt class="field"><b>elementKindName: String</b></dt><dd>
        
        <p>
          The human-readable description of the kind of element being renamed
          (such as “class” or “function type alias”).
        </p>
      </dd><dt class="field"><b>oldName: String</b></dt><dd>
        
        <p>
          The old name of the element before the refactoring.
        </p>
      </dd></dl><h4>Options:</h4><dl><dt class="field"><b>newName: String</b></dt><dd>
        
        <p>
          The name that the element should have after the refactoring.
        </p>
      </dd></dl></dd></dl>
<h2 class="domain"><a name="index">Index</a></h2>
<h3>Domains</h3><h4>plugin (<a href="#domain_plugin">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_plugin.versionCheck">versionCheck</a></li><li><a href="#request_plugin.details">details</a></li><li><a href="#request_plugin.shutdown">shutdown</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_plugin.error">error</a></li><li><a href="#notification_plugin.print">print</a></li><li><a href="#notification_plugin.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.getNavigation">getNavigation</a></li><li><a href="#request_analysis.handleWatchEvents">handleWatchEvents</a></li><li><a href="#request_analysis.setContextRoots">setContextRoots</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></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.errors">errors</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.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li></ul></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getFixes">getFixes</a></li></ul></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_AssistDescription">AssistDescription</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_ContextRoot">ContextRoot</a></li><li><a href="#type_DiagnosticMessage">DiagnosticMessage</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FixDescription">FixDescription</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</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_PluginDetails">PluginDetails</a></li><li><a href="#type_PluginPrint">PluginPrint</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PrioritizedSourceChange">PrioritizedSourceChange</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_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_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_WatchEvent">WatchEvent</a></li><li><a href="#type_WatchEventType">WatchEventType</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
</body>
</html>
