blob: 5cfd272dce410d2f72a65d2feef60cf364b188c3 [file] [log] [blame]
<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<title>Analysis Server API Specification</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro|Roboto:500,400italic,300,400" type="text/css"><style>body {
font-family: 'Roboto', sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 0 16px;
font-size: 16px;
line-height: 1.5;
color: #111;
background-color: #fdfdfd;
font-weight: 300;
-webkit-font-smoothing: auto;
}
h2, h3, h4, h5 {
margin-bottom: 0;
}
h2.domain {
border-bottom: 1px solid rgb(200, 200, 200);
margin-bottom: 0.5em;
}
h4 {
font-size: 18px;
}
h5 {
font-size: 16px;
}
p {
margin-top: 0;
}
pre {
margin: 0;
font-family: 'Source Code Pro', monospace;
font-size: 15px;
}
div.box {
background-color: rgb(240, 245, 240);
border-radius: 4px;
padding: 4px 12px;
margin: 16px 0;
}
div.hangingIndent {
padding-left: 3em;
text-indent: -3em;
}
dl dt {
font-weight: bold;
}
dl dd {
margin-left: 16px;
}
dt {
margin-top: 1em;
}
dt.notification {
font-weight: bold;
}
dt.refactoring {
font-weight: bold;
}
dt.request {
font-weight: bold;
}
dt.typeDefinition {
font-weight: bold;
}
a {
text-decoration: none;
}
a:focus, a:hover {
text-decoration: underline;
}
.deprecated {
text-decoration: line-through;
}
/* Styles for index */
.subindex ul {
padding-left: 0;
margin-left: 0;
-webkit-margin-before: 0;
-webkit-margin-start: 0;
-webkit-padding-start: 0;
list-style-type: none;
}
</style></head>
<body>
<h1>Analysis Server API Specification</h1>
<h1 style="color:#999999">Version
1.21.0
</h1>
<p>
This document contains a specification of the API provided by the
analysis server. The API in this document is currently under
development. Changes to the API will be accompanied by an update to the
protocol version number according to the principles of semantic
versioning (<a href="http://semver.org/">semver.org</a>).
</p>
<h2>Overview</h2>
<p>
The analysis server API is a bi-directional client-server
API. The API is independent of the transport mechanism used, but
is heavily influenced by a model in which sockets or character
streams are used to transport JSON-RPC encoded information.
</p>
<h3>Transport Mechanism</h3>
<p>
The characters passed to the server are expected to be encoded
using UTF-8.
</p>
<p>
When character streams are used as the transport, messages are
delineated by newlines. This means, in particular, that the JSON
encoding process must not introduce newlines within a
message. Note however that newlines are used in this document
for readability.
</p>
<p>
It is the client's responsibility to read output from the server to
avoid its blocking.
</p>
<p>
To ease interoperability with Lisp-based clients (which may not
be able to easily distinguish between empty lists, empty maps,
and null), client-to-server communication is allowed to replace
any instance of "<tt>{}</tt>" or "<tt>[]</tt>" with null. The
server will always properly represent empty lists as
"<tt>[]</tt>" and empty maps as "<tt>{}</tt>".
</p>
<h3>Communication Structure</h3>
<p>
Clients can make a request of the server and the server will
provide a response for each request that it receives. While many
of the requests that can be made by a client are informational
in nature, we have chosen to always return a response so that
clients can know whether the request was received and was
correct.
</p>
<p>
There is no guarantee concerning the order in which responses
will be returned, but there is a guarantee that the server will
process requests in the order in which they are sent as long as
the transport mechanism also makes this guarantee. Responses can
be returned in an order that is different from the order in
which the requests were received because some requests take
longer to process than others.
</p>
<p>
Every request is required to have two fields and may have two
additional optional fields. The first required field is the ‘id’
field, which is only used by the server to associate a response
with the request that generated the response. The second
required field is the ‘method’ field, which is used to determine
what the server is being requested to do. One optional field is
the ‘params’ field, whose structure is dependent on the method
being requested. The structure of this field is described with
each request for which it is required. The other optional field
is the 'clientRequestTime' field, which is a number indicating
the time at which the client made the request (milliseconds
since epoch). Providing clientRequestTime helps us track
how responsive analysis server is to client requests
and better address any issues that occur.
</p>
<p>
Every response has up to three fields. The first field is the
‘id’ field, which is always present and whose value is the
identifier that was passed to the request that generated the
response. The second field is the ‘error’ field, which is only
present if an error was encountered while processing the
request. The third field is the ‘result’ field, whose structure
is dependent on the method being responded to, and is described
with each request that will produce it.
</p>
<p>
The server can also communicate to the clients by sending a
notification. The purpose of these notifications is to provide
information to clients as it becomes available rather than to
require that clients poll for it. Unless explicitly stated, all
notifications are designed to return the complete information
available at the time the notification is sent; clients are not
required to update previously communicated
results. Consequently, the server can and should return partial
results before all results are available. For example, the
syntactic errors for a file can be returned as soon as the
syntactic analysis is complete, and both syntactic and semantic
errors can be returned together at a later time.
</p>
<p>
Each notification has two fields. The first field is the ‘event’
field, which identifies the kind of notification. The second
field is the ‘params’ field, whose structure is dependent on the
kind of notification being sent. The structure of this field is
described with each notification.
</p>
<p>
In order to be backward compatible, clients should ignore fields that were
not specified in the version of the API on which they were based. Clients
should also use the server.getVersion request to test that the version of
the server supports an API before using it.
</p>
<h3>Eventual Consistency</h3>
<p>
The analysis server satisfies requests under the principle of
<a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventual
consistency</a>.
That is, in some cases it may return responses with the currently available
results while it's catching up with unprocessed changes.
</p>
<h3>Domains</h3>
<p>
For convenience, the API is divided into domains. Each domain is specified
in a separate section below. The specifications of the API’s refer to data
structures beyond the standard JSON primitives. These data structures are
documented in the section titled <a href="#types">Types</a>.
</p>
<p><a href="#domain_server">Server</a></p><ul><li><a href="#request_server.getVersion">server.getVersion</a></li>
<li><a href="#request_server.shutdown">server.shutdown</a></li>
<li><a href="#request_server.setSubscriptions">server.setSubscriptions</a></li>
</ul>
<p><a href="#domain_analysis">Analysis</a></p><ul><li><a href="#request_analysis.getErrors">analysis.getErrors</a></li>
<li><a href="#request_analysis.getHover">analysis.getHover</a></li>
<li><a href="#request_analysis.getLibraryDependencies">analysis.getLibraryDependencies</a></li>
<li><a href="#request_analysis.getNavigation">analysis.getNavigation</a></li>
<li><a href="#request_analysis.getReachableSources">analysis.getReachableSources</a></li>
<li><a href="#request_analysis.reanalyze">analysis.reanalyze</a></li>
<li><a href="#request_analysis.setAnalysisRoots">analysis.setAnalysisRoots</a></li>
<li><a href="#request_analysis.setGeneralSubscriptions">analysis.setGeneralSubscriptions</a></li>
<li><a href="#request_analysis.setPriorityFiles">analysis.setPriorityFiles</a></li>
<li><a href="#request_analysis.setSubscriptions">analysis.setSubscriptions</a></li>
<li><a href="#request_analysis.updateContent">analysis.updateContent</a></li>
<li><a class="deprecated" href="#request_analysis.updateOptions">analysis.updateOptions</a></li>
</ul>
<p><a href="#domain_completion">Completion</a></p><ul><li><a href="#request_completion.getSuggestions">completion.getSuggestions</a></li>
</ul>
<p><a href="#domain_search">Search</a></p><ul><li><a href="#request_search.findElementReferences">search.findElementReferences</a></li>
<li><a href="#request_search.findMemberDeclarations">search.findMemberDeclarations</a></li>
<li><a href="#request_search.findMemberReferences">search.findMemberReferences</a></li>
<li><a href="#request_search.findTopLevelDeclarations">search.findTopLevelDeclarations</a></li>
<li><a href="#request_search.getTypeHierarchy">search.getTypeHierarchy</a></li>
</ul>
<p><a href="#domain_edit">Edit</a></p><ul><li><a href="#request_edit.format">edit.format</a></li>
<li><a href="#request_edit.getAssists">edit.getAssists</a></li>
<li><a href="#request_edit.getAvailableRefactorings">edit.getAvailableRefactorings</a></li>
<li><a href="#request_edit.getFixes">edit.getFixes</a></li>
<li><a href="#request_edit.getRefactoring">edit.getRefactoring</a></li>
<li><a href="#request_edit.sortMembers">edit.sortMembers</a></li>
<li><a href="#request_edit.organizeDirectives">edit.organizeDirectives</a></li>
</ul>
<p><a href="#domain_execution">Execution</a></p><ul><li><a href="#request_execution.createContext">execution.createContext</a></li>
<li><a href="#request_execution.deleteContext">execution.deleteContext</a></li>
<li><a href="#request_execution.getSuggestions">execution.getSuggestions</a></li>
<li><a href="#request_execution.mapUri">execution.mapUri</a></li>
<li><a class="deprecated" href="#request_execution.setSubscriptions">execution.setSubscriptions</a></li>
</ul>
<p><a href="#domain_diagnostic">Diagnostic</a></p><ul><li><a href="#request_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></li>
<li><a href="#request_diagnostic.getServerPort">diagnostic.getServerPort</a></li>
</ul>
<h3>Command-line Arguments</h3>
<p>
The command-line arguments that can be passed to the server.
</p>
<h4>Options</h4>
<blockquote>
<dl>
<dt>--client-id</dt>
<dd>
<p>
Specifies an identifier associated with the client. Used when
generating error reports.
</p>
<p>
Clients are strongly encouraged to provide this information in
order to improve the quality of information that can be provided
to them.
</p>
</dd>
</dl>
<dl>
<dt>--client-version</dt>
<dd>
<p>
Specifies the version of the client that is communicating with
the server. Used when generating error reports.
</p>
<p>
Clients are strongly encouraged to provide this information in
order to improve the quality of information that can be provided
to them.
</p>
</dd>
</dl>
<dl>
<dt class="deprecated">--no-error-notification</dt>
<dd>
<p><b>Deprecated:</b> clients should no longer pass this option in</p>
Disable notifications about errors (see analysis.error). If this
flag is not specified then notifications will be sent for all
errors produced for all files in the actual analysis roots.
</dd>
</dl>
<dl>
<dt class="deprecated">--no-index</dt>
<dd>
<p><b>Deprecated:</b> clients should no longer pass this option in</p>
This flag used to disable the server from generating an index, but now
it has no effect.
</dd>
</dl>
<dl>
<dt class="deprecated">--file-read-mode</dt>
<dd>
<p><b>Deprecated:</b> clients should no longer pass this option in</p>
An enumeration of the ways files can be read from disk. Some clients
normalize end of line characters which would make the file offset and
range information incorrect. The default option is <tt>as-is</tt>, but
can also be set to <tt>normalize-eol-always</tt>. The default option
(<tt>as-is</tt>) reads files as they are on disk. The
<tt>normalize-eol-always</tt> option does the following:
<ul>
<li>'\r\n' is converted to '\n';</li>
<li>'\r' by itself is converted to '\n';</li>
<li>this happens regardless of the OS editor is running on.</li>
</ul>
</dd>
</dl>
</blockquote>
<h1>Domains</h1>
<h2 class="domain"><a name="domain_server">server domain</a></h2>
<p>
The server domain contains API’s related to the execution of
the server.
</p>
<h3>Requests</h3><dl><dt class="request"><a name="request_server.getVersion">server.getVersion</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "server.getVersion"
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>version</b>": String
}
}</pre></div>
<p>Return the version number of the analysis server.</p>
<h4>returns:</h4><dl><dt class="field"><b>version: String</b></dt><dd>
<p>The version number of the analysis server.</p>
</dd></dl></dd><dt class="request"><a name="request_server.shutdown">server.shutdown</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "server.shutdown"
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Cleanly shutdown the analysis server. Requests that are
received after this request will not be processed. Requests
that were received before this request, but for which a
response has not yet been sent, will not be responded to. No
further responses or notifications will be sent after the
response to this request has been sent.
</p>
</dd><dt class="request"><a name="request_server.setSubscriptions">server.setSubscriptions</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "server.setSubscriptions"
"params": {
"<b>subscriptions</b>": List&lt;<a href="#type_ServerService">ServerService</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Subscribe for services. All previous subscriptions are
replaced by the given set of services.
</p>
<p>
It is an error if any of the elements in the list are not
valid services. If there is an error, then the current
subscriptions will remain unchanged.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a href="#type_ServerService">ServerService</a>&gt;</b></dt><dd>
<p>A list of the services being subscribed to.</p>
</dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_server.connected">server.connected</a></dt><dd><div class="box"><pre>notification: {
"event": "server.connected"
"params": {
"<b>version</b>": String
"<b>pid</b>": int
"<b>sessionId</b>": <span style="color:#999999">optional</span> String
}
}</pre></div>
<p>
Reports that the server is running. This notification is
issued once after the server has started running but before
any requests are processed to let the client know that it
started correctly.
</p>
<p>
It is not possible to subscribe to or unsubscribe from this
notification.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>version: String</b></dt><dd>
<p>The version number of the analysis server.</p>
</dd><dt class="field"><b>pid: int</b></dt><dd>
<p>The process id of the analysis server process.</p>
</dd><dt class="field"><b>sessionId: String<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>The session id for this session.</p>
</dd></dl></dd><dt class="notification"><a name="notification_server.error">server.error</a></dt><dd><div class="box"><pre>notification: {
"event": "server.error"
"params": {
"<b>isFatal</b>": bool
"<b>message</b>": String
"<b>stackTrace</b>": String
}
}</pre></div>
<p>
Reports that an unexpected error has occurred while
executing the server. This notification is not used for
problems with specific requests (which are returned as part
of the response) but is used for exceptions that occur while
performing other tasks, such as analysis or preparing
notifications.
</p>
<p>
It is not possible to subscribe to or unsubscribe from this
notification.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>isFatal: bool</b></dt><dd>
<p>
True if the error is a fatal error, meaning that the
server will shutdown automatically after sending this
notification.
</p>
</dd><dt class="field"><b>message: String</b></dt><dd>
<p>
The error message indicating what kind of error was
encountered.
</p>
</dd><dt class="field"><b>stackTrace: String</b></dt><dd>
<p>
The stack trace associated with the generation of the
error, used for debugging the server.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_server.status">server.status</a></dt><dd><div class="box"><pre>notification: {
"event": "server.status"
"params": {
"<b>analysis</b>": <span style="color:#999999">optional</span> <a href="#type_AnalysisStatus">AnalysisStatus</a>
"<b>pub</b>": <span style="color:#999999">optional</span> <a href="#type_PubStatus">PubStatus</a>
}
}</pre></div>
<p>
Reports the current status of the server. Parameters are
omitted if there has been no change in the status
represented by that parameter.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"STATUS"</tt> in
the list of services passed in a server.setSubscriptions
request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>analysis: <a href="#type_AnalysisStatus">AnalysisStatus</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The current status of analysis, including whether
analysis is being performed and if so what is being
analyzed.
</p>
</dd><dt class="field"><b><span class="deprecated">pub</span>: <a href="#type_PubStatus">PubStatus</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The current status of pub execution, indicating whether we are
currently running pub.
</p>
<p>
Note: this status type is deprecated, and is no longer sent by
the server.
</p>
</dd></dl></dd></dl>
<h2 class="domain"><a name="domain_analysis">analysis domain</a></h2>
<p>
The analysis domain contains API’s related to the analysis of
files.
</p>
<h3>Requests</h3><dl><dt class="request"><a name="request_analysis.getErrors">analysis.getErrors</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.getErrors"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>errors</b>": List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;
}
}</pre></div>
<p>
Return the errors associated with the given file. If the
errors for the given file have not yet been computed, or the
most recently computed errors for the given file are out of
date, then the response for this request will be delayed
until they have been computed. If some or all of the errors
for the file cannot be computed, then the subset of the
errors that can be computed will be returned and the
response will contain an error to indicate why the errors
could not be computed. If the content of the file changes after this
request was received but before a response could be sent, then an
error of type <tt>CONTENT_MODIFIED</tt> will be generated.
</p>
<p>
This request is intended to be used by clients that cannot
asynchronously apply updated error information. Clients that
<b>can</b> apply error information as it becomes available
should use the information provided by the 'analysis.errors'
notification.
</p>
<p>
If a request is made for a file which does not exist, or
which is not currently subject to analysis (e.g. because it
is not associated with any analysis root specified to
analysis.setAnalysisRoots), an error of type
<tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file for which errors are being requested.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>errors: List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;</b></dt><dd>
<p>
The errors associated with the file.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.getHover">analysis.getHover</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.getHover"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>hovers</b>": List&lt;<a href="#type_HoverInformation">HoverInformation</a>&gt;
}
}</pre></div>
<p>
Return the hover information associate with the given
location. If some or all of the hover information is not
available at the time this request is processed the
information will be omitted from the response.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file in which hover information is being requested.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset for which hover information is being requested.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>hovers: List&lt;<a href="#type_HoverInformation">HoverInformation</a>&gt;</b></dt><dd>
<p>
The hover information associated with the
location. The list will be empty if no information
could be determined for the location. The list can
contain multiple items if the file is being analyzed
in multiple contexts in conflicting ways (such as a
part that is included in multiple libraries).
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.getLibraryDependencies">analysis.getLibraryDependencies</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.getLibraryDependencies"
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>libraries</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
"<b>packageMap</b>": Map&lt;String, Map&lt;String, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;&gt;
}
}</pre></div>
<p>
Return library dependency information for use in client-side indexing
and package URI resolution.
</p>
<p>
Clients that are only using the libraries field should consider using the
analyzedFiles notification instead.
</p>
<h4>returns:</h4><dl><dt class="field"><b>libraries: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
A list of the paths of library elements referenced by
files in existing analysis roots.
</p>
</dd><dt class="field"><b>packageMap: Map&lt;String, Map&lt;String, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;&gt;</b></dt><dd>
<p>
A mapping from context source roots to package maps which map
package names to source directories for use in client-side
package URI resolution.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.getNavigation">analysis.getNavigation</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.getNavigation"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
"<b>length</b>": int
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
"<b>targets</b>": List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;
"<b>regions</b>": List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;
}
}</pre></div>
<p>
Return the navigation information associated with the given region of
the given file. If the navigation information for the given file has
not yet been computed, or the most recently computed navigation
information for the given file is out of date, then the response for
this request will be delayed until it has been computed. If the
content of the file changes after this request was received but before
a response could be sent, then an error of type
<tt>CONTENT_MODIFIED</tt> will be generated.
</p>
<p>
If a navigation region overlaps (but extends either before or after)
the given region of the file it will be included in the result. This
means that it is theoretically possible to get the same navigation
region in response to multiple requests. Clients can avoid this by
always choosing a region that starts at the beginning of a line and
ends at the end of a (possibly different) line in the file.
</p>
<p>
If a request is made for a file which does not exist, or
which is not currently subject to analysis (e.g. because it
is not associated with any analysis root specified to
analysis.setAnalysisRoots), an error of type
<tt>GET_NAVIGATION_INVALID_FILE</tt> will be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file in which navigation information is being requested.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset of the region for which navigation information is being
requested.
</p>
</dd><dt class="field"><b>length: int</b></dt><dd>
<p>
The length of the region for which navigation information is being
requested.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
A list of the paths of files that are referenced by the navigation
targets.
</p>
</dd><dt class="field"><b>targets: List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;</b></dt><dd>
<p>
A list of the navigation targets that are referenced by the
navigation regions.
</p>
</dd><dt class="field"><b>regions: List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;</b></dt><dd>
<p>
A list of the navigation regions within the requested region of
the file.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.getReachableSources">analysis.getReachableSources</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.getReachableSources"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>sources</b>": Map&lt;String, List&lt;String&gt;&gt;
}
}</pre></div>
<p>
Return the transitive closure of reachable sources for a given file.
</p>
<p>
If a request is made for a file which does not exist, or
which is not currently subject to analysis (e.g. because it
is not associated with any analysis root specified to
analysis.setAnalysisRoots), an error of type
<tt>GET_REACHABLE_SOURCES_INVALID_FILE</tt> will be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file for which reachable source information is being requested.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>sources: Map&lt;String, List&lt;String&gt;&gt;</b></dt><dd>
<p>
A mapping from source URIs to directly reachable source URIs. For
example,
a file "foo.dart" that imports "bar.dart" would have the corresponding
mapping
{ "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
further imports
(or exports) there will be a mapping from the URI "file:///bar.dart"
to them.
To check if a specific URI is reachable from a given file, clients can
check
for its presence in the resulting key set.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.reanalyze">analysis.reanalyze</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.reanalyze"
"params": {
"<b>roots</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_FilePath">FilePath</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Force the re-analysis of everything contained in the specified
analysis roots. This will cause all previously computed analysis
results to be discarded and recomputed, and will cause all subscribed
notifications to be re-sent.
</p>
<p>
If no analysis roots are provided, then all current analysis roots
will be re-analyzed. If an empty list of analysis roots is provided,
then nothing will be re-analyzed. If the list contains one or more
paths that are not currently analysis roots, then an error of type
<tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>roots: List&lt;<a href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
A list of the analysis roots that are to be re-analyzed.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.setAnalysisRoots">analysis.setAnalysisRoots</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.setAnalysisRoots"
"params": {
"<b>included</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
"<b>excluded</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
"<b>packageRoots</b>": <span style="color:#999999">optional</span> Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_FilePath">FilePath</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Sets the root paths used to determine which files to analyze. The set
of files to be analyzed are all of the files in one of the root paths
that are not either explicitly or implicitly excluded. A file is
explicitly excluded if it is in one of the excluded paths. A file is
implicitly excluded if it is in a subdirectory of one of the root
paths where the name of the subdirectory starts with a period (that
is, a hidden directory).
</p>
<p>
Note that this request determines the set of requested
analysis roots. The actual set of analysis roots at any
given time is the intersection of this set with the set of
files and directories actually present on the
filesystem. When the filesystem changes, the actual set of
analysis roots is automatically updated, but the set of
requested analysis roots is unchanged. This means that if
the client sets an analysis root before the root becomes
visible to server in the filesystem, there is no error; once
the server sees the root in the filesystem it will start
analyzing it. Similarly, server will stop analyzing files
that are removed from the file system but they will remain
in the set of requested roots.
</p>
<p>
If an included path represents a file, then server will look
in the directory containing the file for a pubspec.yaml
file. If none is found, then the parents of the directory
will be searched until such a file is found or the root of
the file system is reached. If such a file is found, it will
be used to resolve package: URI’s within the file.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>included: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
A list of the files and directories that should be
analyzed.
</p>
</dd><dt class="field"><b>excluded: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
A list of the files and directories within the
included directories that should not be analyzed.
</p>
</dd><dt class="field"><b>packageRoots: Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
A mapping from source directories to package roots
that should override the normal package: URI resolution
mechanism.
</p>
<p>
If a package root is a directory, then
the analyzer will behave as though the associated
source directory in the map contains a special
pubspec.yaml file which resolves any package: URI to the
corresponding path within that package root directory. The
effect is the same as specifying the package root directory as
a "--package_root" parameter to the Dart VM when
executing any Dart file inside the source directory.
</p>
<p>
If a package root is a file, then the analyzer
will behave as though that file is a ".packages" file in the
source directory. The effect is the same as specifying the file
as a "--packages" parameter to the Dart VM when
executing any Dart file inside the source directory.
</p>
<p>
Files in any directories that are not overridden by this
mapping have their package: URI's resolved using the
normal pubspec.yaml mechanism. If this field is absent,
or the empty map is specified, that indicates that the
normal pubspec.yaml mechanism should always be used.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.setGeneralSubscriptions">analysis.setGeneralSubscriptions</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.setGeneralSubscriptions"
"params": {
"<b>subscriptions</b>": List&lt;<a href="#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Subscribe for general services (that is, services that are not
specific to individual files). All previous subscriptions are replaced
by the given set of services.
</p>
<p>
It is an error if any of the elements in the list are not valid
services. If there is an error, then the current subscriptions will
remain unchanged.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a href="#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt;</b></dt><dd>
<p>A list of the services being subscribed to.</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.setPriorityFiles">analysis.setPriorityFiles</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.setPriorityFiles"
"params": {
"<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Set the priority files to the files in the given list. A
priority file is a file that is given priority when
scheduling which analysis work to do first. The list
typically contains those files that are visible to the user
and those for which analysis results will have the biggest
impact on the user experience. The order of the files within
the list is significant: the first file will be given higher
priority than the second, the second higher priority than
the third, and so on.
</p>
<p>
Note that this request determines the set of requested
priority files. The actual set of priority files is the
intersection of the requested set of priority files with the
set of files currently subject to analysis. (See
analysis.setSubscriptions for a description of files that
are subject to analysis.)
</p>
<p>
If a requested priority file is a directory it is ignored,
but remains in the set of requested priority files so that
if it later becomes a file it can be included in the set of
actual priority files.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
The files that are to be a priority for analysis.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.setSubscriptions">analysis.setSubscriptions</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.setSubscriptions"
"params": {
"<b>subscriptions</b>": Map&lt;<a href="#type_AnalysisService">AnalysisService</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Subscribe for services that are specific to individual files.
All previous subscriptions are replaced by the current set of
subscriptions. If a given service is not included as a key in the map
then no files will be subscribed to the service, exactly as if the
service had been included in the map with an explicit empty list of
files.
</p>
<p>
Note that this request determines the set of requested
subscriptions. The actual set of subscriptions at any given
time is the intersection of this set with the set of files
currently subject to analysis. The files currently subject
to analysis are the set of files contained within an actual
analysis root but not excluded, plus all of the files
transitively reachable from those files via import, export
and part directives. (See analysis.setAnalysisRoots for an
explanation of how the actual analysis roots are
determined.) When the actual analysis roots change, the
actual set of subscriptions is automatically updated, but
the set of requested subscriptions is unchanged.
</p>
<p>
If a requested subscription is a directory it is ignored,
but remains in the set of requested subscriptions so that if
it later becomes a file it can be included in the set of
actual subscriptions.
</p>
<p>
It is an error if any of the keys in the map are not valid
services. If there is an error, then the existing
subscriptions will remain unchanged.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>subscriptions: Map&lt;<a href="#type_AnalysisService">AnalysisService</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;</b></dt><dd>
<p>
A table mapping services to a list of the files being
subscribed to the service.
</p>
</dd></dl></dd><dt class="request"><a name="request_analysis.updateContent">analysis.updateContent</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.updateContent"
"params": {
"<b>files</b>": Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_AddContentOverlay">AddContentOverlay</a> | <a href="#type_ChangeContentOverlay">ChangeContentOverlay</a> | <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
}
}</pre></div>
<p>
Update the content of one or more files. Files that were
previously updated but not included in this update remain
unchanged. This effectively represents an overlay of the
filesystem. The files whose content is overridden are
therefore seen by server as being files with the given
content, even if the files do not exist on the filesystem or
if the file path represents the path to a directory on the
filesystem.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>files: Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_AddContentOverlay">AddContentOverlay</a> | <a href="#type_ChangeContentOverlay">ChangeContentOverlay</a> | <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>&gt;</b></dt><dd>
<p>
A table mapping the files whose content has changed to a
description of the content change.
</p>
</dd></dl><h4>returns:</h4><dl></dl></dd><dt class="request deprecated"><a name="request_analysis.updateOptions">analysis.updateOptions</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "analysis.updateOptions"
"params": {
"<b>options</b>": <a href="#type_AnalysisOptions">AnalysisOptions</a>
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p><b>Deprecated:</b> all of the options can be set by users in
an analysis options file.</p>
<p>
Update the options controlling analysis based on the given
set of options. Any options that are not included in the
analysis options will not be changed. If there are options
in the analysis options that are not valid, they will be
silently ignored.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>options: <a href="#type_AnalysisOptions">AnalysisOptions</a></b></dt><dd>
<p>
The options that are to be used to control analysis.
</p>
</dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_analysis.analyzedFiles">analysis.analyzedFiles</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.analyzedFiles"
"params": {
"<b>directories</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
}
}</pre></div>
<p>
Reports the paths of the files that are being analyzed.
</p>
<p>
This notification is not subscribed to by default. Clients can
subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the list
of services passed in an analysis.setGeneralSubscriptions request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>directories: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
A list of the paths of the files that are being analyzed.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.errors">analysis.errors</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.errors"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>errors</b>": List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;
}
}</pre></div>
<p>
Reports the errors associated with a given file. The set of
errors included in the notification is always a complete
list that supersedes any previously reported errors.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the errors.
</p>
</dd><dt class="field"><b>errors: List&lt;<a href="#type_AnalysisError">AnalysisError</a>&gt;</b></dt><dd>
<p>
The errors contained in the file.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.flushResults">analysis.flushResults</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.flushResults"
"params": {
"<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
}
}</pre></div>
<p>
Reports that any analysis results that were previously
associated with the given files should be considered to be
invalid because those files are no longer being analyzed,
either because the analysis root that contained it is no
longer being analyzed or because the file no longer exists.
</p>
<p>
If a file is included in this notification and at some later
time a notification with results for the file is received,
clients should assume that the file is once again being
analyzed and the information should be processed.
</p>
<p>
It is not possible to subscribe to or unsubscribe from this
notification.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
The files that are no longer being analyzed.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.folding">analysis.folding</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.folding"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>regions</b>": List&lt;<a href="#type_FoldingRegion">FoldingRegion</a>&gt;
}
}</pre></div>
<p>
Reports the folding regions associated with a given
file. Folding regions can be nested, but will not be
overlapping. Nesting occurs when a foldable element, such as
a method, is nested inside another foldable element such as
a class.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"FOLDING"</tt> in
the list of services passed in an analysis.setSubscriptions
request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the folding regions.
</p>
</dd><dt class="field"><b>regions: List&lt;<a href="#type_FoldingRegion">FoldingRegion</a>&gt;</b></dt><dd>
<p>
The folding regions contained in the file.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.highlights">analysis.highlights</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.highlights"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>regions</b>": List&lt;<a href="#type_HighlightRegion">HighlightRegion</a>&gt;
}
}</pre></div>
<p>
Reports the highlight regions associated with a given file.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"HIGHLIGHTS"</tt>
in the list of services passed in an
analysis.setSubscriptions request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the highlight regions.
</p>
</dd><dt class="field"><b>regions: List&lt;<a href="#type_HighlightRegion">HighlightRegion</a>&gt;</b></dt><dd>
<p>
The highlight regions contained in the file. Each
highlight region represents a particular syntactic or
semantic meaning associated with some range. Note that
the highlight regions that are returned can overlap
other highlight regions if there is more than one
meaning associated with a particular region.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.implemented">analysis.implemented</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.implemented"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>classes</b>": List&lt;<a href="#type_ImplementedClass">ImplementedClass</a>&gt;
"<b>members</b>": List&lt;<a href="#type_ImplementedMember">ImplementedMember</a>&gt;
}
}</pre></div>
<p>
Reports the classes that are implemented or extended and
class members that are implemented or overridden in a file.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
the list of services passed in an analysis.setSubscriptions
request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file with which the implementations are associated.
</p>
</dd><dt class="field"><b>classes: List&lt;<a href="#type_ImplementedClass">ImplementedClass</a>&gt;</b></dt><dd>
<p>
The classes defined in the file that are implemented or extended.
</p>
</dd><dt class="field"><b>members: List&lt;<a href="#type_ImplementedMember">ImplementedMember</a>&gt;</b></dt><dd>
<p>
The member defined in the file that are implemented or overridden.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.invalidate">analysis.invalidate</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.invalidate"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
"<b>length</b>": int
"<b>delta</b>": int
}
}</pre></div>
<p>
Reports that the navigation information associated with a region of a
single file has become invalid and should be re-requested.
</p>
<p>
This notification is not subscribed to by default. Clients can
subscribe by including the value <tt>"INVALIDATE"</tt> in the list of
services passed in an analysis.setSubscriptions request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file whose information has been invalidated.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset of the invalidated region.
</p>
</dd><dt class="field"><b>length: int</b></dt><dd>
<p>
The length of the invalidated region.
</p>
</dd><dt class="field"><b>delta: int</b></dt><dd>
<p>
The delta to be applied to the offsets in information that follows
the invalidated region in order to update it so that it doesn't
need to be re-requested.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.navigation">analysis.navigation</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.navigation"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>regions</b>": List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;
"<b>targets</b>": List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;
"<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
}
}</pre></div>
<p>
Reports the navigation targets associated with a given file.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"NAVIGATION"</tt>
in the list of services passed in an
analysis.setSubscriptions request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the navigation regions.
</p>
</dd><dt class="field"><b>regions: List&lt;<a href="#type_NavigationRegion">NavigationRegion</a>&gt;</b></dt><dd>
<p>
The navigation regions contained in the file.
The regions are sorted by their offsets.
Each navigation region represents a list of targets
associated with some range. The lists will usually
contain a single target, but can contain more in the
case of a part that is included in multiple libraries
or in Dart code that is compiled against multiple
versions of a package. Note that the navigation
regions that are returned do not overlap other
navigation regions.
</p>
</dd><dt class="field"><b>targets: List&lt;<a href="#type_NavigationTarget">NavigationTarget</a>&gt;</b></dt><dd>
<p>
The navigation targets referenced in the file.
They are referenced by <tt>NavigationRegion</tt>s by their
index in this array.
</p>
</dd><dt class="field"><b>files: List&lt;<a href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
<p>
The files containing navigation targets referenced in the file.
They are referenced by <tt>NavigationTarget</tt>s by their
index in this array.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.occurrences">analysis.occurrences</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.occurrences"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>occurrences</b>": List&lt;<a href="#type_Occurrences">Occurrences</a>&gt;
}
}</pre></div>
<p>
Reports the occurrences of references to elements within a
single file.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"OCCURRENCES"</tt>
in the list of services passed in an
analysis.setSubscriptions request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file in which the references occur.
</p>
</dd><dt class="field"><b>occurrences: List&lt;<a href="#type_Occurrences">Occurrences</a>&gt;</b></dt><dd>
<p>
The occurrences of references to elements within the
file.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.outline">analysis.outline</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.outline"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>kind</b>": <a href="#type_FileKind">FileKind</a>
"<b>libraryName</b>": <span style="color:#999999">optional</span> String
"<b>outline</b>": <a href="#type_Outline">Outline</a>
}
}</pre></div>
<p>
Reports the outline associated with a single file.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"OUTLINE"</tt> in
the list of services passed in an analysis.setSubscriptions
request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file with which the outline is associated.
</p>
</dd><dt class="field"><b>kind: <a href="#type_FileKind">FileKind</a></b></dt><dd>
<p>
The kind of the file.
</p>
</dd><dt class="field"><b>libraryName: String<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The name of the library defined by the file using a "library"
directive, or referenced by a "part of" directive. If both
"library" and "part of" directives are present, then the
"library" directive takes precedence.
This field will be omitted if the file has neither "library"
nor "part of" directives.
</p>
</dd><dt class="field"><b>outline: <a href="#type_Outline">Outline</a></b></dt><dd>
<p>
The outline associated with the file.
</p>
</dd></dl></dd><dt class="notification"><a name="notification_analysis.overrides">analysis.overrides</a></dt><dd><div class="box"><pre>notification: {
"event": "analysis.overrides"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>overrides</b>": List&lt;<a href="#type_Override">Override</a>&gt;
}
}</pre></div>
<p>
Reports the overriding members in a file.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"OVERRIDES"</tt> in
the list of services passed in an analysis.setSubscriptions
request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file with which the overrides are associated.
</p>
</dd><dt class="field"><b>overrides: List&lt;<a href="#type_Override">Override</a>&gt;</b></dt><dd>
<p>
The overrides associated with the file.
</p>
</dd></dl></dd></dl>
<h2 class="domain"><a name="domain_completion">completion domain</a></h2>
<p>
The code completion domain contains commands related to
getting code completion suggestions.
</p>
<h3>Requests</h3><dl><dt class="request"><a name="request_completion.getSuggestions">completion.getSuggestions</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "completion.getSuggestions"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
}
}</pre><br><pre>response: {
"<b>id</b>": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>id</b>": <a href="#type_CompletionId">CompletionId</a>
}
}</pre></div>
<p>
Request that completion suggestions for the given offset in
the given file be returned.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the point at which suggestions are
to be made.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset within the file at which suggestions are to
be made.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_CompletionId">CompletionId</a></b></dt><dd>
<p>
The identifier used to associate results with this
completion request.
</p>
</dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_completion.results">completion.results</a></dt><dd><div class="box"><pre>notification: {
"event": "completion.results"
"params": {
"<b>id</b>": <a href="#type_CompletionId">CompletionId</a>
"<b>replacementOffset</b>": int
"<b>replacementLength</b>": int
"<b>results</b>": List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;
"<b>isLast</b>": bool
}
}</pre></div>
<p>
Reports the completion suggestions that should be presented
to the user. The set of suggestions included in the
notification is always a complete list that supersedes any
previously reported suggestions.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>id: <a href="#type_CompletionId">CompletionId</a></b></dt><dd>
<p>
The id associated with the completion.
</p>
</dd><dt class="field"><b>replacementOffset: int</b></dt><dd>
<p>
The offset of the start of the text to be
replaced. This will be different than the offset used
to request the completion suggestions if there was a
portion of an identifier before the original
offset. In particular, the replacementOffset will be
the offset of the beginning of said identifier.
</p>
</dd><dt class="field"><b>replacementLength: int</b></dt><dd>
<p>
The length of the text to be replaced if the remainder
of the identifier containing the cursor is to be
replaced when the suggestion is applied (that is, the
number of characters in the existing identifier).
</p>
</dd><dt class="field"><b>results: List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;</b></dt><dd>
<p>
The completion suggestions being reported. The
notification contains all possible completions at the
requested cursor position, even those that do not match
the characters the user has already typed. This allows
the client to respond to further keystrokes from the
user without having to make additional requests.
</p>
</dd><dt class="field"><b>isLast: bool</b></dt><dd>
<p>
True if this is that last set of results that will be
returned for the indicated completion.
</p>
</dd></dl></dd></dl>
<h2 class="domain"><a name="domain_search">search domain</a></h2>
<p>
The search domain contains commands related to searches that
can be performed against the code base.
</p>
<h3>Requests</h3><dl><dt class="request"><a name="request_search.findElementReferences">search.findElementReferences</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "search.findElementReferences"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
"<b>includePotential</b>": bool
}
}</pre><br><pre>response: {
"<b>id</b>": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>id</b>": <span style="color:#999999">optional</span> <a href="#type_SearchId">SearchId</a>
"<b>element</b>": <span style="color:#999999">optional</span> <a href="#type_Element">Element</a>
}
}</pre></div>
<p>
Perform a search for references to the element defined or
referenced at the given offset in the given file.
</p>
<p>
An identifier is returned immediately, and individual
results will be returned via the search.results notification
as they become available.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the declaration of or reference to
the element used to define the search.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset within the file of the declaration of or
reference to the element.
</p>
</dd><dt class="field"><b>includePotential: bool</b></dt><dd>
<p>
True if potential matches are to be included in the
results.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_SearchId">SearchId</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The identifier used to associate results with this
search request.
</p>
<p>
If no element was found at the given location, this
field will be absent, and no results will be reported
via the search.results notification.
</p>
</dd><dt class="field"><b>element: <a href="#type_Element">Element</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The element referenced or defined at the given offset
and whose references will be returned in the search
results.
</p>
<p>
If no element was found at the given location, this
field will be absent.
</p>
</dd></dl></dd><dt class="request"><a name="request_search.findMemberDeclarations">search.findMemberDeclarations</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "search.findMemberDeclarations"
"params": {
"<b>name</b>": String
}
}</pre><br><pre>response: {
"<b>id</b>": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>id</b>": <a href="#type_SearchId">SearchId</a>
}
}</pre></div>
<p>
Perform a search for declarations of members whose name is
equal to the given name.
</p>
<p>
An identifier is returned immediately, and individual
results will be returned via the search.results notification
as they become available.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
<p>
The name of the declarations to be found.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
<p>
The identifier used to associate results with this
search request.
</p>
</dd></dl></dd><dt class="request"><a name="request_search.findMemberReferences">search.findMemberReferences</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "search.findMemberReferences"
"params": {
"<b>name</b>": String
}
}</pre><br><pre>response: {
"<b>id</b>": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>id</b>": <a href="#type_SearchId">SearchId</a>
}
}</pre></div>
<p>
Perform a search for references to members whose name is
equal to the given name. This search does not check to see
that there is a member defined with the given name, so it is
able to find references to undefined members as well.
</p>
<p>
An identifier is returned immediately, and individual
results will be returned via the search.results notification
as they become available.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
<p>
The name of the references to be found.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
<p>
The identifier used to associate results with this
search request.
</p>
</dd></dl></dd><dt class="request"><a name="request_search.findTopLevelDeclarations">search.findTopLevelDeclarations</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "search.findTopLevelDeclarations"
"params": {
"<b>pattern</b>": String
}
}</pre><br><pre>response: {
"<b>id</b>": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>id</b>": <a href="#type_SearchId">SearchId</a>
}
}</pre></div>
<p>
Perform a search for declarations of top-level elements
(classes, typedefs, getters, setters, functions and fields)
whose name matches the given pattern.
</p>
<p>
An identifier is returned immediately, and individual
results will be returned via the search.results notification
as they become available.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>pattern: String</b></dt><dd>
<p>
The regular expression used to match the names of the
declarations to be found.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
<p>
The identifier used to associate results with this
search request.
</p>
</dd></dl></dd><dt class="request"><a name="request_search.getTypeHierarchy">search.getTypeHierarchy</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "search.getTypeHierarchy"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
"<b>superOnly</b>": <span style="color:#999999">optional</span> bool
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>hierarchyItems</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;
}
}</pre></div>
<p>
Return the type hierarchy of the class declared or
referenced at the given location.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the declaration or reference to the
type for which a hierarchy is being requested.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset of the name of the type within the file.
</p>
</dd><dt class="field"><b>superOnly: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
True if the client is only requesting superclasses and
interfaces hierarchy.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>hierarchyItems: List&lt;<a href="#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
A list of the types in the requested hierarchy. The
first element of the list is the item representing the
type for which the hierarchy was requested. The index of
other elements of the list is unspecified, but
correspond to the integers used to reference supertype
and subtype items within the items.
</p>
<p>
This field will be absent if the code at the given file
and offset does not represent a type, or if the file has
not been sufficiently analyzed to allow a type hierarchy
to be produced.
</p>
</dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_search.results">search.results</a></dt><dd><div class="box"><pre>notification: {
"event": "search.results"
"params": {
"<b>id</b>": <a href="#type_SearchId">SearchId</a>
"<b>results</b>": List&lt;<a href="#type_SearchResult">SearchResult</a>&gt;
"<b>isLast</b>": bool
}
}</pre></div>
<p>
Reports some or all of the results of performing a requested
search. Unlike other notifications, this notification
contains search results that should be added to any
previously received search results associated with the same
search id.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>id: <a href="#type_SearchId">SearchId</a></b></dt><dd>
<p>
The id associated with the search.
</p>
</dd><dt class="field"><b>results: List&lt;<a href="#type_SearchResult">SearchResult</a>&gt;</b></dt><dd>
<p>
The search results being reported.
</p>
</dd><dt class="field"><b>isLast: bool</b></dt><dd>
<p>
True if this is that last set of results that will be
returned for the indicated search.
</p>
</dd></dl></dd></dl>
<h2 class="domain"><a name="domain_edit">edit domain</a></h2>
<p>
The edit domain contains commands related to edits that can be
applied to the code.
</p>
<h3>Requests</h3><dl><dt class="request"><a name="request_edit.format">edit.format</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "edit.format"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>selectionOffset</b>": int
"<b>selectionLength</b>": int
"<b>lineLength</b>": <span style="color:#999999">optional</span> int
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>edits</b>": List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt;
"<b>selectionOffset</b>": int
"<b>selectionLength</b>": int
}
}</pre></div>
<p>
Format the contents of a single file. The currently selected region of
text is passed in so that the selection can be preserved across the
formatting operation. The updated selection will be as close to
matching the original as possible, but whitespace at the beginning or
end of the selected region will be ignored. If preserving selection
information is not required, zero (0) can be specified for both the
selection offset and selection length.
</p>
<p>
If a request is made for a file which does not exist, or which is not
currently subject to analysis (e.g. because it is not associated with
any analysis root specified to analysis.setAnalysisRoots), an error of
type <tt>FORMAT_INVALID_FILE</tt> will be generated. If the source
contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
will be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the code to be formatted.
</p>
</dd><dt class="field"><b>selectionOffset: int</b></dt><dd>
<p>
The offset of the current selection in the file.
</p>
</dd><dt class="field"><b>selectionLength: int</b></dt><dd>
<p>
The length of the current selection in the file.
</p>
</dd><dt class="field"><b>lineLength: int<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The line length to be used by the formatter.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>edits: List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt;</b></dt><dd>
<p>
The edit(s) to be applied in order to format the code. The list
will be empty if the code was already formatted (there are no
changes).
</p>
</dd><dt class="field"><b>selectionOffset: int</b></dt><dd>
<p>
The offset of the selection after formatting the code.
</p>
</dd><dt class="field"><b>selectionLength: int</b></dt><dd>
<p>
The length of the selection after formatting the code.
</p>
</dd></dl></dd><dt class="request"><a name="request_edit.getAssists">edit.getAssists</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "edit.getAssists"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
"<b>length</b>": int
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>assists</b>": List&lt;<a href="#type_SourceChange">SourceChange</a>&gt;
}
}</pre></div>
<p>
Return the set of assists that are available at the given
location. An assist is distinguished from a refactoring
primarily by the fact that it affects a single file and does
not require user input in order to be performed.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the code for which assists are being
requested.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset of the code for which assists are being
requested.
</p>
</dd><dt class="field"><b>length: int</b></dt><dd>
<p>
The length of the code for which assists are being
requested.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>assists: List&lt;<a href="#type_SourceChange">SourceChange</a>&gt;</b></dt><dd>
<p>
The assists that are available at the given location.
</p>
</dd></dl></dd><dt class="request"><a name="request_edit.getAvailableRefactorings">edit.getAvailableRefactorings</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "edit.getAvailableRefactorings"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
"<b>length</b>": int
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>kinds</b>": List&lt;<a href="#type_RefactoringKind">RefactoringKind</a>&gt;
}
}</pre></div>
<p>
Get a list of the kinds of refactorings that are valid for
the given selection in the given file.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the code on which the refactoring
would be based.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset of the code on which the refactoring would be
based.
</p>
</dd><dt class="field"><b>length: int</b></dt><dd>
<p>
The length of the code on which the refactoring would be
based.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>kinds: List&lt;<a href="#type_RefactoringKind">RefactoringKind</a>&gt;</b></dt><dd>
<p>
The kinds of refactorings that are valid for the given
selection.
</p>
</dd></dl></dd><dt class="request"><a name="request_edit.getFixes">edit.getFixes</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "edit.getFixes"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>fixes</b>": List&lt;<a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt;
}
}</pre></div>
<p>
Return the set of fixes that are available for the errors at
a given offset in a given file.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the errors for which fixes are being
requested.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset used to select the errors for which fixes
will be returned.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>fixes: List&lt;<a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt;</b></dt><dd>
<p>
The fixes that are available for the errors at the given offset.
</p>
</dd></dl></dd><dt class="request"><a name="request_edit.getRefactoring">edit.getRefactoring</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "edit.getRefactoring"
"params": {
"<b>kind</b>": <a href="#type_RefactoringKind">RefactoringKind</a>
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>offset</b>": int
"<b>length</b>": int
"<b>validateOnly</b>": bool
"<b>options</b>": <span style="color:#999999">optional</span> <a href="#type_RefactoringOptions">RefactoringOptions</a>
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>initialProblems</b>": List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
"<b>optionsProblems</b>": List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
"<b>finalProblems</b>": List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
"<b>feedback</b>": <span style="color:#999999">optional</span> <a href="#type_RefactoringFeedback">RefactoringFeedback</a>
"<b>change</b>": <span style="color:#999999">optional</span> <a href="#type_SourceChange">SourceChange</a>
"<b>potentialEdits</b>": <span style="color:#999999">optional</span> List&lt;String&gt;
}
}</pre></div>
<p>
Get the changes required to perform a refactoring.
</p>
<p>
If another refactoring request is received during the processing
of this one, an error of type <tt>REFACTORING_REQUEST_CANCELLED</tt>
will be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>kind: <a href="#type_RefactoringKind">RefactoringKind</a></b></dt><dd>
<p>
The kind of refactoring to be performed.
</p>
</dd><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file containing the code involved in the
refactoring.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset of the region involved in the refactoring.
</p>
</dd><dt class="field"><b>length: int</b></dt><dd>
<p>
The length of the region involved in the refactoring.
</p>
</dd><dt class="field"><b>validateOnly: bool</b></dt><dd>
<p>
True if the client is only requesting that the values of
the options be validated and no change be generated.
</p>
</dd><dt class="field"><b>options: <a href="#type_RefactoringOptions">RefactoringOptions</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
Data used to provide values provided by the user. The
structure of the data is dependent on the kind of
refactoring being performed. The data that is expected is
documented in the section titled <a href="#refactorings">Refactorings</a>, labeled as
"Options". This field can be omitted if the refactoring
does not require any options or if the values of those
options are not known.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>initialProblems: List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
<p>
The initial status of the refactoring, i.e. problems related to
the context in which the refactoring is requested.
The array will be empty if there are no known problems.
</p>
</dd><dt class="field"><b>optionsProblems: List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
<p>
The options validation status, i.e. problems in the given options,
such as light-weight validation of a new name, flags
compatibility, etc.
The array will be empty if there are no known problems.
</p>
</dd><dt class="field"><b>finalProblems: List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
<p>
The final status of the refactoring, i.e. problems identified in
the result of a full, potentially expensive validation and / or
change creation.
The array will be empty if there are no known problems.
</p>
</dd><dt class="field"><b>feedback: <a href="#type_RefactoringFeedback">RefactoringFeedback</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
Data used to provide feedback to the user. The structure
of the data is dependent on the kind of refactoring
being created. The data that is returned is documented
in the section titled <a href="#refactorings">Refactorings</a>, labeled as
"Feedback".
</p>
</dd><dt class="field"><b>change: <a href="#type_SourceChange">SourceChange</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The changes that are to be applied to affect the
refactoring. This field will be omitted if there are
problems that prevent a set of changes from being
computed, such as having no options specified for a
refactoring that requires them, or if only validation
was requested.
</p>
</dd><dt class="field"><b>potentialEdits: List&lt;String&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The ids of source edits that are not known to be valid. An edit is
not known to be valid if there was insufficient type information
for the server to be able to determine whether or not the code
needs to be modified, such as when a member is being renamed and
there is a reference to a member from an unknown type. This field
will be omitted if the change field is omitted or if there are no
potential edits for the refactoring.
</p>
</dd></dl></dd><dt class="request"><a name="request_edit.sortMembers">edit.sortMembers</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "edit.sortMembers"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>edit</b>": <a href="#type_SourceFileEdit">SourceFileEdit</a>
}
}</pre></div>
<p>
Sort all of the directives, unit and class members
of the given Dart file.
</p>
<p>
If a request is made for a file that does not exist, does not belong
to an analysis root or is not a Dart file,
<tt>SORT_MEMBERS_INVALID_FILE</tt> will be generated.
</p>
<p>
If the Dart file has scan or parse errors,
<tt>SORT_MEMBERS_PARSE_ERRORS</tt> will be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The Dart file to sort.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>edit: <a href="#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
<p>
The file edit that is to be applied to the given file to effect
the sorting.
</p>
</dd></dl></dd><dt class="request"><a name="request_edit.organizeDirectives">edit.organizeDirectives</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "edit.organizeDirectives"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>edit</b>": <a href="#type_SourceFileEdit">SourceFileEdit</a>
}
}</pre></div>
<p>
Organizes all of the directives - removes unused imports and sorts
directives of the given Dart file according to the
<a href="https://www.dartlang.org/articles/style-guide/">Dart Style
Guide</a>.
</p>
<p>
If a request is made for a file that does not exist, does not belong
to an analysis root or is not a Dart file,
<tt>FILE_NOT_ANALYZED</tt> will be generated.
</p>
<p>
If directives of the Dart file cannot be organized, for example
because it has scan or parse errors, or by other reasons,
<tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
will provide details about the reason.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The Dart file to organize directives in.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>edit: <a href="#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
<p>
The file edit that is to be applied to the given file to effect
the organizing.
</p>
</dd></dl></dd></dl>
<h2 class="domain"><a name="domain_execution">execution domain</a></h2>
<p>
The execution domain contains commands related to providing an execution
or debugging experience.
</p>
<h3>Requests</h3><dl><dt class="request"><a name="request_execution.createContext">execution.createContext</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "execution.createContext"
"params": {
"<b>contextRoot</b>": <a href="#type_FilePath">FilePath</a>
}
}</pre><br><pre>response: {
"<b>id</b>": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
}
}</pre></div>
<p>
Create an execution context for the executable file with the given
path. The context that is created will persist until
execution.deleteContext is used to delete it. Clients, therefore, are
responsible for managing the lifetime of execution contexts.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>contextRoot: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The path of the Dart or HTML file that will be launched, or the
path of the directory containing the file.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
<p>
The identifier used to refer to the execution context that was
created.
</p>
</dd></dl></dd><dt class="request"><a name="request_execution.deleteContext">execution.deleteContext</a></dt><dd><div class="box"><pre>request: {
"<b>id</b>": String
"method": "execution.deleteContext"
"params": {
"<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
Delete the execution context with the given identifier. The context id
is no longer valid after this command. The server is allowed to re-use
ids when they are no longer valid.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>id: <a href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
<p>
The identifier of the execution context that is to be deleted.
</p>
</dd></dl></dd><dt class="request"><a name="request_execution.getSuggestions">execution.getSuggestions</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "execution.getSuggestions"
"params": {
"<b>code</b>": String
"<b>offset</b>": int
"<b>contextFile</b>": <a href="#type_FilePath">FilePath</a>
"<b>contextOffset</b>": int
"<b>variables</b>": List&lt;<a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a>&gt;
"<b>expressions</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>suggestions</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;
"<b>expressions</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;
}
}</pre></div>
<p>
Request completion suggestions for the given runtime context.
</p>
<p>
It might take one or two requests of this type to get completion
suggestions. The first request should have only "code", "offset",
and "variables", but not "expressions". If there are sub-expressions that
can have different runtime types, and are considered to be safe to
evaluate at runtime (e.g. getters), so using their actual runtime types
can improve completion results, the server will not include the
"suggestions" field in the response, and instead will return the
"expressions" field. The client will use debug API to get current runtime
types for these sub-expressions and send another request, this time with
"expressions". If there are no interesting sub-expressions to get
runtime types for, or when the "expressions" field is provided by the
client, the server will return "suggestions" in the response.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>code: String</b></dt><dd>
<p>
The code to get suggestions in.
</p>
</dd><dt class="field"><b>offset: int</b></dt><dd>
<p>
The offset within the code to get suggestions at.
</p>
</dd><dt class="field"><b>contextFile: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The path of the context file, e.g. the file of the current debugger
frame. The combination of the context file and context offset can
be used to ensure that all variables of the context are available
for completion (with their static types).
</p>
</dd><dt class="field"><b>contextOffset: int</b></dt><dd>
<p>
The offset in the context file, e.g. the line offset in the current
debugger frame.
</p>
</dd><dt class="field"><b>variables: List&lt;<a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a>&gt;</b></dt><dd>
<p>
The runtime context variables that are potentially referenced in the
code.
</p>
</dd><dt class="field"><b>expressions: List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The list of sub-expressions in the code for which the client wants
to provide runtime types. It does not have to be the full list of
expressions requested by the server, for missing expressions their
static types will be used.
</p>
<p>
When this field is omitted, the server will return completion
suggestions only when there are no interesting sub-expressions in the
given code. The client may provide an empty list, in this case the
server will return completion suggestions.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>suggestions: List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The completion suggestions. In contrast to usual completion request,
suggestions for private elements also will be provided.
</p>
<p>
If there are sub-expressions that can have different runtime types,
and are considered to be safe to evaluate at runtime (e.g. getters),
so using their actual runtime types can improve completion results,
the server omits this field in the response, and instead will return
the "expressions" field.
</p>
</dd><dt class="field"><b>expressions: List&lt;<a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The list of sub-expressions in the code for which the server would
like to know runtime types to provide better completion suggestions.
</p>
<p>
This field is omitted the field "suggestions" is returned.
</p>
</dd></dl></dd><dt class="request"><a name="request_execution.mapUri">execution.mapUri</a></dt><dd><div class="box"><pre>request: {
"<b>id</b>": String
"method": "execution.mapUri"
"params": {
"<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
"<b>file</b>": <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a>
"<b>uri</b>": <span style="color:#999999">optional</span> String
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>file</b>": <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a>
"<b>uri</b>": <span style="color:#999999">optional</span> String
}
}</pre></div>
<p>
Map a URI from the execution context to the file that it corresponds
to, or map a file to the URI that it corresponds to in the execution
context.
</p>
<p>
Exactly one of the file and uri fields must be provided. If both
fields are provided, then an error of type <tt>INVALID_PARAMETER</tt>
will be generated. Similarly, if neither field is provided, then an
error of type <tt>INVALID_PARAMETER</tt> will be generated.
</p>
<p>
If the file field is provided and the value is not the path of a file
(either the file does not exist or the path references something other
than a file), then an error of type <tt>INVALID_PARAMETER</tt> will
be generated.
</p>
<p>
If the uri field is provided and the value is not a valid URI or if
the URI references something that is not a file (either a file that
does not exist or something other than a file), then an error of type
<tt>INVALID_PARAMETER</tt> will be generated.
</p>
<p>
If the contextRoot used to create the execution context does not
exist, then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt> will
be generated.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>id: <a href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
<p>
The identifier of the execution context in which the URI is to be
mapped.
</p>
</dd><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The path of the file to be mapped into a URI.
</p>
</dd><dt class="field"><b>uri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The URI to be mapped into a file path.
</p>
</dd></dl><h4>returns:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The file to which the URI was mapped. This field is omitted if the
uri field was not given in the request.
</p>
</dd><dt class="field"><b>uri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The URI to which the file path was mapped. This field is omitted
if the file field was not given in the request.
</p>
</dd></dl></dd><dt class="request deprecated"><a name="request_execution.setSubscriptions">execution.setSubscriptions</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "execution.setSubscriptions"
"params": {
"<b>subscriptions</b>": List&lt;<a href="#type_ExecutionService">ExecutionService</a>&gt;
}
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
}</pre></div>
<p>
<b>Deprecated:</b> the analysis server no longer fires
<tt>LAUNCH_DATA</tt> events.
</p>
<p>
Subscribe for services. All previous subscriptions are replaced by the
given set of services.
</p>
<p>
It is an error if any of the elements in the list are not valid
services. If there is an error, then the current subscriptions will
remain unchanged.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a href="#type_ExecutionService">ExecutionService</a>&gt;</b></dt><dd>
<p>
A list of the services being subscribed to.
</p>
</dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_execution.launchData">execution.launchData</a></dt><dd><div class="box"><pre>notification: {
"event": "execution.launchData"
"params": {
"<b>file</b>": <a href="#type_FilePath">FilePath</a>
"<b>kind</b>": <span style="color:#999999">optional</span> <a href="#type_ExecutableKind">ExecutableKind</a>
"<b>referencedFiles</b>": <span style="color:#999999">optional</span> List&lt;<a href="#type_FilePath">FilePath</a>&gt;
}
}</pre></div>
<p>
Reports information needed to allow a single file to be launched.
</p>
<p>
This notification is not subscribed to by default. Clients can
subscribe by including the value "LAUNCH_DATA" in the list of services
passed in an <tt>execution.setSubscriptions</tt> request.
</p>
<h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
<p>
The file for which launch data is being provided. This will either
be a Dart library or an HTML file.
</p>
</dd><dt class="field"><b>kind: <a href="#type_ExecutableKind">ExecutableKind</a><span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The kind of the executable file. This field is omitted if the file
is not a Dart file.
</p>
</dd><dt class="field"><b>referencedFiles: List&lt;<a href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
A list of the Dart files that are referenced by the file. This
field is omitted if the file is not an HTML file.
</p>
</dd></dl></dd></dl>
<h2 class="domain"><a name="domain_diagnostic">diagnostic domain</a></h2>
<p>
The diagnostic domain contains server diagnostics APIs.
</p>
<h3>Requests</h3><dl><dt class="request"><a name="request_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "diagnostic.getDiagnostics"
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>contexts</b>": List&lt;<a href="#type_ContextData">ContextData</a>&gt;
}
}</pre></div>
<p>Return server diagnostics.</p>
<h4>returns:</h4><dl><dt class="field"><b>contexts: List&lt;<a href="#type_ContextData">ContextData</a>&gt;</b></dt><dd>
<p>The list of analysis contexts.</p>
</dd></dl></dd><dt class="request"><a name="request_diagnostic.getServerPort">diagnostic.getServerPort</a></dt><dd><div class="box"><pre>request: {
"id": String
"method": "diagnostic.getServerPort"
}</pre><br><pre>response: {
"id": String
"error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
"result": {
"<b>port</b>": int
}
}</pre></div>
<p>
Return the port of the diagnostic web server. If the server is not running
this call will start the server. If unable to start the diagnostic web
server,
this call will return an error of <tt>DEBUG_PORT_COULD_NOT_BE_OPENED</tt>.
</p>
<h4>returns:</h4><dl><dt class="field"><b>port: int</b></dt><dd>
<p>The diagnostic server port.</p>
</dd></dl></dd></dl>
<h2 class="domain"><a name="types">Types</a></h2>
<p>
This section contains descriptions of the data types referenced
in the API’s of the various domains.
</p>
<dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
<p>
A directive to begin overlaying the contents of a file. The supplied
content will be used for analysis in place of the file contents in the
filesystem.
</p>
<p>
If this directive is used on a file that already has a file content
overlay, the old overlay is discarded and replaced with the new one.
</p>
<dl><dt class="field"><b>type = "add"</b></dt><dd>
</dd><dt class="field"><b>content: String</b></dt><dd>
<p>
The new content of the file.
</p>
</dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisError">AnalysisError: object</a></dt><dd>
<p>
An indication of an error, warning, or hint that was produced by the
analysis.
</p>
<dl><dt class="field"><b>severity: <a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></b></dt><dd>
<p>
The severity of the error.
</p>
</dd><dt class="field"><b>type: <a href="#type_AnalysisErrorType">AnalysisErrorType</a></b></dt><dd>
<p>
The type of the error.
</p>
</dd><dt class="field"><b>location: <a href="#type_Location">Location</a></b></dt><dd>
<p>
The location associated with the error.
</p>
</dd><dt class="field"><b>message: String</b></dt><dd>
<p>
The message to be displayed for this error. The message should
indicate what is wrong with the code and why it is wrong.
</p>
</dd><dt class="field"><b>correction: String<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
The correction message to be displayed for this error. The correction
message should indicate how the user can fix the error. The field is
omitted if there is no correction message associated with the error
code.
</p>
</dd><dt class="field"><b>code: String</b></dt><dd>
<p>
The name, as a string, of the error code associated with this error.
</p>
</dd><dt class="field"><b>hasFix: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
<p>
A hint to indicate to interested clients that this error has an
associated fix (or fixes). The absence of this field implies there
are not known to be fixes. Note that since the operation to calculate
whether fixes apply needs to be performant it is possible that
complicated tests will be skipped and a false negative returned. For
this reason, this attribute should be treated as a "hint". Despite the
possibility of false negatives, no false positives should be returned.
If a client sees this flag set they can proceed with the confidence
that there are in fact associated fixes.
</p>
</dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisErrorFixes">AnalysisErrorFixes: object</a></dt><dd>
<p>
A list of fixes associated with a specific error.
</p>
<dl><dt class="field"><b>error: <a href="#type_AnalysisError">AnalysisError</a></b></dt><dd>
<p>
The error with which the fixes are associated.
</p>
</dd><dt class="field"><b>fixes: List&lt;<a href="#type_SourceChange">SourceChange</a>&gt;</b></dt><dd>
<p>
The fixes associated with the error.
</p>
</dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisErrorSeverity">AnalysisErrorSeverity: String</a></dt><dd>
<p>
An enumeration of the possible severities of analysis errors.
</p>
<dl><dt class="value">INFO</dt><dt class="value">WARNING</dt><dt class="value">ERROR</dt></dl></dd><dt class="typeDefinition"><a name="type_AnalysisErrorType">AnalysisErrorType: String</a></dt><dd>
<p>
An enumeration of the possible types of analysis errors.
</p>
<dl><dt class="value">CHECKED_MODE_COMPILE_TIME_ERROR</dt><dt class="value">COMPILE_TIME_ERROR</dt><dt class="value">HINT</dt><dt class="value">LINT</dt><dt class="value">STATIC_TYPE_WARNING</dt><dt class="value">STATIC_WARNING</dt><dt class="value">SYNTACTIC_ERROR</dt><dt class="value">TODO</dt></dl></dd><dt class="typeDefinition deprecated"><a name="type_AnalysisOptions">AnalysisOptions: object</a></dt><dd>
<p><b>Deprecated:</b> the only reference to this type has been
deprecated.</p>
<p>
A set of options controlling what kind of analysis is to be
performed. If the value of a field is omitted the value of the
option will not be changed.
</p>
<dl><dt class="field"><b><span class="deprecated">enableAsync</span>: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
<p><b>Deprecated:</b> this feature is always enabled.</p>
<p>
True if the client wants to enable support for the
proposed async feature.
</p>
</dd><dt class="field"><b><span class="deprecated">enableDeferredLoading</span>: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
<p><b>Deprecated:</b> this feature is always enabled.</p>
<p>
True if the client wants to enable support for the
proposed deferred loading feature.
</p>
</dd><dt class="field"><b><span class="deprecated">enableEnums</span>: bool<span style="color:#999999"> (optional)</span></b></dt><dd>