blob: 37c4ea767e6006c59f1bc547adcdc997dd48e027 [file] [log] [blame]
<html>
<head>
<meta charset="UTF-8"/>
<title>Analysis Server API Specification</title>
</head>
<body>
<h1>Analysis Server API Specification</h1>
<h1 style="color:#999999">Version <version>1.0.0</version></h1>
<p>
This document contains a specification of the API provided by the
analysis server. The API in this document is currently under
development. Changes to the API will be accompanied by an update to the
protocol version number according to the principles of semantic
versioning <a href="http://semver.org/">http://semver.org/</a>.
</p>
<h2>Overview</h2>
<p>
The analysis server API is a bi-directional client-server
API. The API is independent of the transport mechanism used, but
is heavily influenced by a model in which sockets or character
streams are used to transport JSON-RPC encoded information.
</p>
<h3>Transport Mechanism</h3>
<p>
The characters passed to the server are expected to be encoded
using UTF-8.
</p>
<p>
When character streams are used as the transport, messages are
delineated by newlines. This means, in particular, that the JSON
encoding process must not introduce newlines within a
message. Note however that newlines are used in this document
for readability.
</p>
<p>
It is the client's responsibility to read output from the server to
avoid its blocking.
</p>
<p>
To ease interoperability with Lisp-based clients (which may not
be able to easily distinguish between empty lists, empty maps,
and null), client-to-server communication is allowed to replace
any instance of “<tt>{}</tt>” or “<tt>[]</tt>” with null. The
server will always properly represent empty lists as
<tt>[]</tt>” and empty maps as “<tt>{}</tt>”.
</p>
<h3>Communication Structure</h3>
<p>
Clients can make a request of the server and the server will
provide a response for each request that it receives. While many
of the requests that can be made by a client are informational
in nature, we have chosen to always return a response so that
clients can know whether the request was received and was
correct.
</p>
<p>
There is no guarantee concerning the order in which responses
will be returned, but there is a guarantee that the server will
process requests in the order in which they are sent as long as
the transport mechanism also makes this guarantee. Responses can
be returned in an order that is different from the order in
which the requests were received because some requests take
longer to process than others.
</p>
<p>
Every request is required to have two fields and may have two
additional optional fields. The first required field is the ‘id’
field, which is only used by the server to associate a response
with the request that generated the response. The second
required field is the ‘method’ field, which is used to determine
what the server is being requested to do. One optional field is
the ‘params’ field, whose structure is dependent on the method
being requested. The structure of this field is described with
each request for which it is required. The other optional field
is the 'clientRequestTime' field, which is a number indicating
the time at which the client made the request (milliseconds
since epoch). Providing clientRequestTime helps us track
how responsive analysis server is to client requests
and better address any issues that occur.
</p>
<p>
Every response has up to three fields. The first field is the
‘id’ field, which is always present and whose value is the
identifier that was passed to the request that generated the
response. The second field is the ‘error’ field, which is only
present if an error was encountered while processing the
request. The third field is the ‘result’ field, whose structure
is dependent on the method being responded to, and is described
with each request that will produce it.
</p>
<p>
The server can also communicate to the clients by sending a
notification. The purpose of these notifications is to provide
information to clients as it becomes available rather than to
require that clients poll for it. Unless explicitly stated, all
notifications are designed to return the complete information
available at the time the notification is sent; clients are not
required to update previously communicated
results. Consequently, the server can and should return partial
results before all results are available. For example, the
syntactic errors for a file can be returned as soon as the
syntactic analysis is complete, and both syntactic and semantic
errors can be returned together at a later time.
</p>
<p>
Each notification has two fields. The first field is the ‘event’
field, which identifies the kind of notification. The second
field is the ‘params’ field, whose structure is dependent on the
kind of notification being sent. The structure of this field is
described with each notification.
</p>
<h3>Eventual Consistency</h3>
<p>
TBD
</p>
<h3>Domains</h3>
<p>
For convenience, the API is divided into domains. Each domain is
specified in a separate section below:
</p>
<ul>
<li><a href="#domain_server">Server</a></li>
<li><a href="#domain_analysis">Analysis</a></li>
<li><a href="#domain_completion">Code Completion</a></li>
<li><a href="#domain_search">Search</a></li>
<li><a href="#domain_edit">Edit</a></li>
<li><a href="#domain_execution">Execution</a></li>
</ul>
<p>
The specifications of the API’s refer to data structures beyond
the standard JSON primitives. These data structures are
documented in the section titled <a href="#types">Types</a>.
</p>
<h3>Command-line Arguments</h3>
<p>
The command-line arguments that can be passed to the server.
</p>
<h4>Options</h4>
<blockquote>
<dl>
<dt>--no-error-notification</dt>
<dd>
Disable notifications about errors (see analysis.error). If this
flag is not specified then notifications will be sent for all
errors produced for all files in the actual analysis roots.
</dd>
</dl>
<dl>
<dt>--file-read-mode</dt>
<dd>
An enumeration of the ways files can be read from disk. Some clients
normalize end of line characters which would make the file offset and
range information incorrect. The default option is <tt>as-is</tt>, but
can also be set to <tt>normalize-eol-always</tt>. The default option
(<tt>as-is</tt>) reads files as they are on disk. The
<tt>normalize-eol-always</tt> option does the following:
<ul>
<li>'\r\n' is converted to '\n';</li>
<li>'\r' by itself is converted to '\n';</li>
<li>this happens regardless of the OS editor is running on.</li>
</ul>
</dd>
</dl>
</blockquote>
<domain name="server">
<p>
The server domain contains API’s related to the execution of
the server.
</p>
<request method="getVersion">
<p>Return the version number of the analysis server.</p>
<result>
<field name="version">
<ref>String</ref>
<p>The version number of the analysis server.</p>
</field>
</result>
</request>
<request method="shutdown">
<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>
</request>
<request method="setSubscriptions">
<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>
<params>
<field name="subscriptions">
<list><ref>ServerService</ref></list>
<p>A list of the services being subscribed to.</p>
</field>
</params>
</request>
<notification event="connected">
<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>
</notification>
<notification event="error">
<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>
<params>
<field name="isFatal">
<ref>bool</ref>
<p>
True if the error is a fatal error, meaning that the
server will shutdown automatically after sending this
notification.
</p>
</field>
<field name="message">
<ref>String</ref>
<p>
The error message indicating what kind of error was
encountered.
</p>
</field>
<field name="stackTrace">
<ref>String</ref>
<p>
The stack trace associated with the generation of the
error, used for debugging the server.
</p>
</field>
</params>
</notification>
<notification event="status">
<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>
<params>
<field name="analysis" optional="true">
<ref>AnalysisStatus</ref>
<p>
The current status of analysis, including whether
analysis is being performed and if so what is being
analyzed.
</p>
</field>
<field name="pub" optional="true">
<ref>PubStatus</ref>
<p>
The current status of pub execution, indicating whether we are
currently running pub.
</p>
</field>
</params>
</notification>
</domain>
<domain name="analysis">
<p>
The analysis domain contains API’s related to the analysis of
files.
</p>
<request method="getErrors">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file for which errors are being requested.
</p>
</field>
</params>
<result>
<field name="errors">
<list><ref>AnalysisError</ref></list>
<p>
The errors associated with the file.
</p>
</field>
</result>
</request>
<request method="getHover">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file in which hover information is being requested.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset for which hover information is being requested.
</p>
</field>
</params>
<result>
<field name="hovers">
<list><ref>HoverInformation</ref></list>
<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>
</field>
</result>
</request>
<request method="getLibraryDependencies">
<p>
Return library dependency information for use in client-side indexing
and package URI resolution.
</p>
<result>
<field name="libraries">
<list><ref>FilePath</ref></list>
<p>
A list of the paths of library elements referenced by
files in existing analysis roots.
</p>
</field>
<field name="packageMap">
<map>
<key><ref>String</ref></key>
<value>
<map>
<key><ref>String</ref></key>
<value><list><ref>FilePath</ref></list></value>
</map>
</value>
</map>
<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>
</field>
</result>
</request>
<request method="getNavigation">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file in which navigation information is being requested.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the region for which navigation information is being
requested.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the region for which navigation information is being
requested.
</p>
</field>
</params>
<result>
<field name="files">
<list><ref>FilePath</ref></list>
<p>
A list of the paths of files that are referenced by the navigation
targets.
</p>
</field>
<field name="targets">
<list><ref>NavigationTarget</ref></list>
<p>
A list of the navigation targets that are referenced by the
navigation regions.
</p>
</field>
<field name="regions">
<list><ref>NavigationRegion</ref></list>
<p>
A list of the navigation regions within the requested region of
the file.
</p>
</field>
</result>
</request>
<request method="reanalyze">
<p>
Force the re-analysis of everything contained in the
existing 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>
</request>
<request method="setAnalysisRoots">
<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>
<params>
<field name="included">
<list><ref>FilePath</ref></list>
<p>
A list of the files and directories that should be
analyzed.
</p>
</field>
<field name="excluded">
<list><ref>FilePath</ref></list>
<p>
A list of the files and directories within the
included directories that should not be analyzed.
</p>
</field>
<field name="packageRoots" optional="true">
<map>
<key><ref>FilePath</ref></key>
<value><ref>FilePath</ref></value>
</map>
<p>
A mapping from source directories to target directories
that should override the normal package: URI resolution
mechanism. The analyzer will behave as though each
source directory in the map contains a special
pubspec.yaml file which resolves any package: URI to the
corresponding path within the target directory. The
effect is the same as specifying the target directory as
a "--package_root" parameter to the Dart VM when
executing any Dart file inside the source directory.
</p>
<p>
Files in any directories that are not overridden by this
mapping have their package: URI's resolved using the
normal pubspec.yaml mechanism. If this field is absent,
or the empty map is specified, that indicates that the
normal pubspec.yaml mechanism should always be used.
</p>
</field>
</params>
</request>
<request method="setPriorityFiles">
<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>
<params>
<field name="files">
<list><ref>FilePath</ref></list>
<p>
The files that are to be a priority for analysis.
</p>
</field>
</params>
</request>
<request method="setSubscriptions">
<p>
Subscribe for services. All previous subscriptions are
replaced by the current set of subscriptions. If a given
service is not included as a key in the map then no files
will be subscribed to the service, exactly as if the service
had been included in the map with an explicit empty list of
files.
</p>
<p>
Note that this request determines the set of requested
subscriptions. The actual set of subscriptions at any given
time is the intersection of this set with the set of files
currently subject to analysis. The files currently subject
to analysis are the set of files contained within an actual
analysis root but not excluded, plus all of the files
transitively reachable from those files via import, export
and part directives. (See analysis.setAnalysisRoots for an
explanation of how the actual analysis roots are
determined.) When the actual analysis roots change, the
actual set of subscriptions is automatically updated, but
the set of requested subscriptions is unchanged.
</p>
<p>
If a requested subscription is a directory it is ignored,
but remains in the set of requested subscriptions so that if
it later becomes a file it can be included in the set of
actual subscriptions.
</p>
<p>
It is an error if any of the keys in the map are not valid
services. If there is an error, then the existing
subscriptions will remain unchanged.
</p>
<params>
<field name="subscriptions">
<map>
<key><ref>AnalysisService</ref></key>
<value>
<list><ref>FilePath</ref></list>
</value>
</map>
<p>
A table mapping services to a list of the files being
subscribed to the service.
</p>
</field>
</params>
</request>
<request method="updateContent">
<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>
<params>
<field name="files">
<map>
<key><ref>FilePath</ref></key>
<value>
<union field="type">
<ref>AddContentOverlay</ref>
<ref>ChangeContentOverlay</ref>
<ref>RemoveContentOverlay</ref>
</union>
</value>
</map>
<p>
A table mapping the files whose content has changed to a
description of the content change.
</p>
</field>
</params>
<result>
</result>
</request>
<request method="updateOptions">
<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>
<params>
<field name="options">
<ref>AnalysisOptions</ref>
<p>
The options that are to be used to control analysis.
</p>
</field>
</params>
</request>
<notification event="errors">
<p>
Reports the errors associated with a given file. The set of
errors included in the notification is always a complete
list that supersedes any previously reported errors.
</p>
<p>
It is only possible to unsubscribe from this notification by
using the command-line flag --no-error-notification.
</p>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the errors.
</p>
</field>
<field name="errors">
<list><ref>AnalysisError</ref></list>
<p>
The errors contained in the file.
</p>
</field>
</params>
</notification>
<notification event="flushResults">
<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>
<params>
<field name="files">
<list><ref>FilePath</ref></list>
<p>
The files that are no longer being analyzed.
</p>
</field>
</params>
</notification>
<notification event="folding">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the folding regions.
</p>
</field>
<field name="regions">
<list><ref>FoldingRegion</ref></list>
<p>
The folding regions contained in the file.
</p>
</field>
</params>
</notification>
<notification event="highlights">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the highlight regions.
</p>
</field>
<field name="regions">
<list><ref>HighlightRegion</ref></list>
<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>
</field>
</params>
</notification>
<notification event="invalidate">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file whose information has been invalidated.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the invalidated region.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the invalidated region.
</p>
</field>
<field name="delta">
<ref>int</ref>
<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>
</field>
</params>
</notification>
<notification event="navigation">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the navigation regions.
</p>
</field>
<field name="regions">
<list><ref>NavigationRegion</ref></list>
<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>
</field>
<field name="targets">
<list><ref>NavigationTarget</ref></list>
<p>
The navigation targets referenced in the file.
They are referenced by <tt>NavigationRegion</tt>s by their
index in this array.
</p>
</field>
<field name="files">
<list><ref>FilePath</ref></list>
<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>
</field>
</params>
</notification>
<notification event="occurrences">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file in which the references occur.
</p>
</field>
<field name="occurrences">
<list><ref>Occurrences</ref></list>
<p>
The occurrences of references to elements within the
file.
</p>
</field>
</params>
</notification>
<notification event="outline">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file with which the outline is associated.
</p>
</field>
<field name="outline">
<ref>Outline</ref>
<p>
The outline associated with the file.
</p>
</field>
</params>
</notification>
<notification event="overrides">
<p>
Reports the overridding members in a file.
</p>
<p>
This notification is not subscribed to by default. Clients
can subscribe by including the value <tt>"OVERRIDES"</tt> in
the list of services passed in an analysis.setSubscriptions
request.
</p>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file with which the overrides are associated.
</p>
</field>
<field name="overrides">
<list><ref>Override</ref></list>
<p>
The overrides associated with the file.
</p>
</field>
</params>
</notification>
</domain>
<domain name="completion">
<p>
The code completion domain contains commands related to
getting code completion suggestions.
</p>
<request method="getSuggestions">
<p>
Request that completion suggestions for the given offset in
the given file be returned.
</p>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the point at which suggestions are
to be made.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset within the file at which suggestions are to
be made.
</p>
</field>
</params>
<result>
<field name="id">
<ref>CompletionId</ref>
<p>
The identifier used to associate results with this
completion request.
</p>
</field>
</result>
</request>
<notification event="results">
<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>
<params>
<field name="id">
<ref>CompletionId</ref>
<p>
The id associated with the completion.
</p>
</field>
<field name="replacementOffset">
<ref>int</ref>
<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>
</field>
<field name="replacementLength">
<ref>int</ref>
<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>
</field>
<field name="results">
<list><ref>CompletionSuggestion</ref></list>
<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>
</field>
<field name="isLast">
<ref>bool</ref>
<p>
True if this is that last set of results that will be
returned for the indicated completion.
</p>
</field>
</params>
</notification>
</domain>
<domain name="search">
<p>
The search domain contains commands related to searches that
can be performed against the code base.
</p>
<request method="findElementReferences">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the declaration of or reference to
the element used to define the search.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset within the file of the declaration of or
reference to the element.
</p>
</field>
<field name="includePotential">
<ref>bool</ref>
<p>
True if potential matches are to be included in the
results.
</p>
</field>
</params>
<result>
<field name="id" optional="true">
<ref>SearchId</ref>
<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>
</field>
<field name="element" optional="true">
<ref>Element</ref>
<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>
</field>
</result>
</request>
<request method="findMemberDeclarations">
<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>
<params>
<field name="name">
<ref>String</ref>
<p>
The name of the declarations to be found.
</p>
</field>
</params>
<result>
<field name="id">
<ref>SearchId</ref>
<p>
The identifier used to associate results with this
search request.
</p>
</field>
</result>
</request>
<request method="findMemberReferences">
<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>
<params>
<field name="name">
<ref>String</ref>
<p>
The name of the references to be found.
</p>
</field>
</params>
<result>
<field name="id">
<ref>SearchId</ref>
<p>
The identifier used to associate results with this
search request.
</p>
</field>
</result>
</request>
<request method="findTopLevelDeclarations">
<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>
<params>
<field name="pattern">
<ref>String</ref>
<p>
The regular expression used to match the names of the
declarations to be found.
</p>
</field>
</params>
<result>
<field name="id">
<ref>SearchId</ref>
<p>
The identifier used to associate results with this
search request.
</p>
</field>
</result>
</request>
<request method="getTypeHierarchy">
<p>
Return the type hierarchy of the class declared or
referenced at the given location.
</p>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the declaration or reference to the
type for which a hierarchy is being requested.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the name of the type within the file.
</p>
</field>
</params>
<result>
<field name="hierarchyItems" optional="true">
<list><ref>TypeHierarchyItem</ref></list>
<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>
</field>
</result>
</request>
<notification event="results">
<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>
<params>
<field name="id">
<ref>SearchId</ref>
<p>
The id associated with the search.
</p>
</field>
<field name="results">
<list><ref>SearchResult</ref></list>
<p>
The search results being reported.
</p>
</field>
<field name="isLast">
<ref>bool</ref>
<p>
True if this is that last set of results that will be
returned for the indicated search.
</p>
</field>
</params>
</notification>
</domain>
<domain name="edit">
<p>
The edit domain contains commands related to edits that can be
applied to the code.
</p>
<request method="format">
<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.
</p>
<p>
If a request is made for a file which does not exist, or
which is not currently subject to analysis (e.g. because it
is not associated with any analysis root specified to
analysis.setAnalysisRoots), an error of type
<tt>FORMAT_INVALID_FILE</tt> will be generated.
</p>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the code to be formatted.
</p>
</field>
<field name="selectionOffset">
<ref>int</ref>
<p>
The offset of the current selection in the file. In case
preserving, selection information is not required, 0 can be
specified for both selection offset and length.
</p>
</field>
<field name="selectionLength">
<ref>int</ref>
<p>
The length of the current selection in the file. In case
preserving, selection information is not required, 0 can be
specified for both selection offset and length.
</p>
</field>
<!--
<field name="selectionOnly" optional="true">
<ref>bool</ref>
<p>
True if the code to be formatted should be limited to the selected
text (or the smallest portion of text that encloses the selected
text that can be formatted).
</p>
</field>
-->
</params>
<result>
<field name="edits">
<list><ref>SourceEdit</ref></list>
<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>
</field>
<field name="selectionOffset">
<ref>int</ref>
<p>
The offset of the selection after formatting the code.
</p>
</field>
<field name="selectionLength">
<ref>int</ref>
<p>
The length of the selection after formatting the code.
</p>
</field>
</result>
</request>
<request method="getAssists">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the code for which assists are being
requested.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the code for which assists are being
requested.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the code for which assists are being
requested.
</p>
</field>
</params>
<result>
<field name="assists">
<list><ref>SourceChange</ref></list>
<p>
The assists that are available at the given location.
</p>
</field>
</result>
</request>
<request method="getAvailableRefactorings">
<p>
Get a list of the kinds of refactorings that are valid for
the given selection in the given file.
</p>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the code on which the refactoring
would be based.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the code on which the refactoring would be
based.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the code on which the refactoring would be
based.
</p>
</field>
</params>
<result>
<field name="kinds">
<list><ref>RefactoringKind</ref></list>
<p>
The kinds of refactorings that are valid for the given
selection.
</p>
</field>
</result>
</request>
<request method="getFixes">
<p>
Return the set of fixes that are available for the errors at
a given offset in a given file.
</p>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the errors for which fixes are being
requested.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset used to select the errors for which fixes
will be returned.
</p>
</field>
</params>
<result>
<field name="fixes">
<list><ref>AnalysisErrorFixes</ref></list>
<p>
The fixes that are available for the errors at the given offset.
</p>
</field>
</result>
</request>
<request method="getRefactoring">
<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>
<params>
<field name="kind">
<ref>RefactoringKind</ref>
<p>
The kind of refactoring to be performed.
</p>
</field>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the code involved in the
refactoring.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the region involved in the refactoring.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the region involved in the refactoring.
</p>
</field>
<field name="validateOnly">
<ref>bool</ref>
<p>
True if the client is only requesting that the values of
the options be validated and no change be generated.
</p>
</field>
<field name="options" optional="true">
<ref>RefactoringOptions</ref>
<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>
</field>
</params>
<result>
<field name="initialProblems">
<list><ref>RefactoringProblem</ref></list>
<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>
</field>
<field name="optionsProblems">
<list><ref>RefactoringProblem</ref></list>
<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>
</field>
<field name="finalProblems">
<list><ref>RefactoringProblem</ref></list>
<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>
</field>
<field name="feedback" optional="true">
<ref>RefactoringFeedback</ref>
<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>
</field>
<field name="change" optional="true">
<ref>SourceChange</ref>
<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>
</field>
<field name="potentialEdits" optional="true">
<list><ref>String</ref></list>
<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>
</field>
</result>
</request>
<request method="sortMembers">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The Dart file to sort.
</p>
</field>
</params>
<result>
<field name="edit">
<ref>SourceFileEdit</ref>
<p>
The file edit that is to be applied to the given file to effect
the sorting.
</p>
</field>
</result>
</request>
</domain>
<domain name="execution">
<p>
The execution domain contains commands related to providing an execution
or debugging experience.
</p>
<request method="createContext">
<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>
<params>
<field name="contextRoot">
<ref>FilePath</ref>
<p>
The path of the Dart or HTML file that will be launched.
</p>
</field>
</params>
<result>
<field name="id">
<ref>ExecutionContextId</ref>
<p>
The identifier used to refer to the execution context that was
created.
</p>
</field>
</result>
</request>
<request method="deleteContext">
<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>
<params>
<field name="id">
<ref>ExecutionContextId</ref>
<p>
The identifier of the execution context that is to be deleted.
</p>
</field>
</params>
</request>
<request method="mapUri">
<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.
</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>MAP_URI_INVALID_FILE</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>MAP_URI_INVALID_URI</tt> will be generated.
</p>
<p>
If the contextRoot used to create the execution context is not a file
(either the file does not exist or the path references something other
than a file), then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt>
will be generated.
</p>
<params>
<field name="id">
<ref>ExecutionContextId</ref>
<p>
The identifier of the execution context in which the URI is to be
mapped.
</p>
</field>
<field name="file" optional="true">
<ref>FilePath</ref>
<p>
The path of the file to be mapped into a URI.
</p>
</field>
<field name="uri" optional="true">
<ref>String</ref>
<p>
The URI to be mapped into a file path.
</p>
</field>
</params>
<result>
<field name="file" optional="true">
<ref>FilePath</ref>
<p>
The file to which the URI was mapped. This field is omitted if the
uri field was not given in the request.
</p>
</field>
<field name="uri" optional="true">
<ref>String</ref>
<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>
</field>
</result>
</request>
<request method="setSubscriptions">
<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>
<params>
<field name="subscriptions">
<list><ref>ExecutionService</ref></list>
<p>
A list of the services being subscribed to.
</p>
</field>
</params>
</request>
<notification event="launchData">
<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>
<params>
<field name="file">
<ref>FilePath</ref>
<p>
The file for which launch data is being provided. This will either
be a Dart library or an HTML file.
</p>
</field>
<field name="kind" optional="true">
<ref>ExecutableKind</ref>
<p>
The kind of the executable file. This field is omitted if the file
is not a Dart file.
</p>
</field>
<field name="referencedFiles" optional="true">
<list><ref>FilePath</ref></list>
<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>
</field>
</params>
</notification>
</domain>
<types>
<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>
<type name="AddContentOverlay">
<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>
<object>
<field name="type" value="add"><ref>String</ref></field>
<field name="content">
<ref>String</ref>
<p>
The new content of the file.
</p>
</field>
</object>
</type>
<type name="AnalysisError">
<p>
An indication of an error, warning, or hint that was produced
by the analysis.
</p>
<object>
<field name="severity">
<ref>AnalysisErrorSeverity</ref>
<p>
The severity of the error.
</p>
</field>
<field name="type">
<ref>AnalysisErrorType</ref>
<p>
The type of the error.
</p>
</field>
<field name="location">
<ref>Location</ref>
<p>
The location associated with the error.
</p>
</field>
<field name="message">
<ref>String</ref>
<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>
</field>
<field name="correction" optional="true">
<ref>String</ref>
<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>
</field>
</object>
</type>
<type name="AnalysisErrorFixes">
<p>
A list of fixes associated with a specific error
</p>
<object>
<field name="error">
<ref>AnalysisError</ref>
<p>
The error with which the fixes are associated.
</p>
</field>
<field name="fixes">
<list><ref>SourceChange</ref></list>
<p>
The fixes associated with the error.
</p>
</field>
</object>
</type>
<type name="AnalysisErrorSeverity">
<p>
An enumeration of the possible severities of analysis
errors.
</p>
<enum>
<value><code>INFO</code></value>
<value><code>WARNING</code></value>
<value><code>ERROR</code></value>
</enum>
</type>
<type name="AnalysisErrorType">
<p>
An enumeration of the possible types of analysis errors.
</p>
<enum>
<value><code>CHECKED_MODE_COMPILE_TIME_ERROR</code></value>
<value><code>COMPILE_TIME_ERROR</code></value>
<value><code>HINT</code></value>
<value><code>LINT</code></value>
<value><code>STATIC_TYPE_WARNING</code></value>
<value><code>STATIC_WARNING</code></value>
<value><code>SYNTACTIC_ERROR</code></value>
<value><code>TODO</code></value>
</enum>
</type>
<type name="AnalysisOptions">
<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>
<object>
<field name="enableAsync" optional="true">
<ref>bool</ref>
<p><b><i>Deprecated</i></b>/<p>
<p>
True if the client wants to enable support for the
proposed async feature.
</p>
</field>
<field name="enableDeferredLoading" optional="true">
<ref>bool</ref>
<p><b><i>Deprecated</i></b>/<p>
<p>
True if the client wants to enable support for the
proposed deferred loading feature.
</p>
</field>
<field name="enableEnums" optional="true">
<ref>bool</ref>
<p><b><i>Deprecated</i></b>/<p>
<p>
True if the client wants to enable support for the
proposed enum feature.
</p>
</field>
<field name="generateDart2jsHints" optional="true">
<ref>bool</ref>
<p>
True if hints that are specific to dart2js should be
generated. This option is ignored if generateHints is false.
</p>
</field>
<field name="generateHints" optional="true">
<ref>bool</ref>
<p>
True if hints should be generated as part of generating
errors and warnings.
</p>
</field>
<field name="generateLints" optional="true">
<ref>bool</ref>
<p>
True if lints should be generated as part of generating
errors and warnings.
</p>
</field>
</object>
</type>
<type name="AnalysisService">
<p>
An enumeration of the services provided by the analysis
domain.
</p>
<enum>
<value><code>FOLDING</code></value>
<value><code>HIGHLIGHTS</code></value>
<value><code>INVALIDATE</code></value>
<value><code>NAVIGATION</code></value>
<value><code>OCCURRENCES</code></value>
<value><code>OUTLINE</code></value>
<value><code>OVERRIDES</code></value>
</enum>
</type>
<type name="AnalysisStatus">
<p>
An indication of the current state of analysis.
</p>
<object>
<field name="isAnalyzing">
<ref>bool</ref>
<p>True if analysis is currently being performed.</p>
</field>
<field name="analysisTarget" optional="true">
<ref>String</ref>
<p>
The name of the current target of analysis. This field is
omitted if analyzing is false.
</p>
</field>
</object>
</type>
<type name="ChangeContentOverlay">
<p>
A directive to modify an existing file content overlay. One or more
ranges of text are deleted from the old file content overlay and
replaced with new text.
</p>
<p>
The edits are applied in the order in which they occur in the list.
This means that the offset of each edit must be correct under the
assumption that all previous edits have been applied.
</p>
<p>
It is an error to use this overlay on a file that does not yet have
a file content overlay or that has had its overlay removed via
<a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
</p>
<p>
If any of the edits cannot be applied due to its offset or
length being out of range, an INVALID_OVERLAY_CHANGE error
will be reported.
</p>
<object>
<field name="type" value="change"><ref>String</ref></field>
<field name="edits">
<list><ref>SourceEdit</ref></list>
<p>
The edits to be applied to the file.
</p>
</field>
</object>
</type>
<type name="CompletionId">
<ref>String</ref>
<p>
An identifier used to associate completion results with a
completion request.
</p>
</type>
<type name="CompletionSuggestion">
<p>
A suggestion for how to complete partially entered text. Many
of the fields are optional, depending on the kind of element
being suggested.
</p>
<object>
<field name="kind">
<ref>CompletionSuggestionKind</ref>
<p>
The kind of element being suggested.
</p>
</field>
<field name="relevance">
<ref>int</ref>
<p>
The relevance of this completion suggestion
where a higher number indicates a higher relevance.
</p>
</field>
<field name="completion">
<ref>String</ref>
<p>
The identifier to be inserted if the suggestion is
selected. If the suggestion is for a method or function,
the client might want to additionally insert a template
for the parameters. The information required in order to
do so is contained in other fields.
</p>
</field>
<field name="selectionOffset">
<ref>int</ref>
<p>
The offset, relative to the beginning of the completion,
of where the selection should be placed after insertion.
</p>
</field>
<field name="selectionLength">
<ref>int</ref>
<p>
The number of characters that should be selected after
insertion.
</p>
</field>
<field name="isDeprecated">
<ref>bool</ref>
<p>
True if the suggested element is deprecated.
</p>
</field>
<field name="isPotential">
<ref>bool</ref>
<p>
True if the element is not known to be valid for the
target. This happens if the type of the target is dynamic.
</p>
</field>
<field name="docSummary" optional="true">
<ref>String</ref>
<p>
An abbreviated version of the Dartdoc associated with the
element being suggested, This field is omitted if there is
no Dartdoc associated with the element.
</p>
</field>
<field name="docComplete" optional="true">
<ref>String</ref>
<p>
The Dartdoc associated with the element being suggested,
This field is omitted if there is no Dartdoc associated
with the element.
</p>
</field>
<field name="declaringType" optional="true">
<ref>String</ref>
<p>
The class that declares the element being suggested. This
field is omitted if the suggested element is not a member
of a class.
</p>
</field>
<field name="element" optional="true">
<ref>Element</ref>
<p>
Information about the element reference being suggested.
</p>
</field>
<field name="returnType" optional="true">
<ref>String</ref>
<p>
The return type of the getter, function or method
or the type of the field being suggested.
This field is omitted if the suggested element
is not a getter, function or method.
</p>
</field>
<field name="parameterNames" optional="true">
<list><ref>String</ref></list>
<p>
The names of the parameters of the function or method
being suggested. This field is omitted if the suggested
element is not a setter, function or method.
</p>
</field>
<field name="parameterTypes" optional="true">
<list><ref>String</ref></list>
<p>
The types of the parameters of the function or method
being suggested. This field is omitted if the
parameterNames field is omitted.
</p>
</field>
<field name="requiredParameterCount" optional="true">
<ref>int</ref>
<p>
The number of required parameters for the function or
method being suggested. This field is omitted if the
parameterNames field is omitted.
</p>
</field>
<field name="hasNamedParameters" optional="true">
<ref>bool</ref>
<p>
True if the function or method being suggested has at
least one named parameter. This field is omitted if the
parameterNames field is omitted.
</p>
</field>
<field name="parameterName" optional="true">
<ref>String</ref>
<p>
The name of the optional parameter being suggested. This
field is omitted if the suggestion is not the addition of
an optional argument within an argument list.
</p>
</field>
<field name="parameterType" optional="true">
<ref>String</ref>
<p>
The type of the options parameter being suggested. This
field is omitted if the parameterName field is omitted.
</p>
</field>
</object>
</type>
<type name="CompletionSuggestionKind">
<p>
An enumeration of the kinds of elements that can be included
in a completion suggestion.
</p>
<enum>
<value>
<code>ARGUMENT_LIST</code>
<p>
A list of arguments for the method or function that is being invoked.
For this suggestion kind, the completion field is a textual representation
of the invocation and the parameterNames, parameterTypes, and requiredParameterCount
attributes are defined.
</p>
</value>
<value><code>IMPORT</code></value>
<value>
<code>IDENTIFIER</code>
<p>
The element identifier should be inserted at the completion location.
For example "someMethod" in import 'myLib.dart' show someMethod; .
For suggestions of this kind, the element attribute is defined
and the completion field is the element's identifier.
</p>
</value>
<value>
<code>INVOCATION</code>
<p>
The element is being invoked at the completion location.
For example, "someMethod" in x.someMethod(); .
For suggestions of this kind, the element attribute is defined
and the completion field is the element's identifier.
</p>
</value>
<value>
<code>KEYWORD</code>
<p>
A keyword is being suggested.
For suggestions of this kind, the completion is the keyword.
</p>
</value>
<value><code>NAMED_ARGUMENT</code></value>
<value><code>OPTIONAL_ARGUMENT</code></value>
<value><code>PARAMETER</code></value>
</enum>
</type>
<type name="Element">
<p>
Information about an element (something that can be declared
in code).
</p>
<object>
<field name="kind">
<ref>ElementKind</ref>
<p>
The kind of the element.
</p>
</field>
<field name="name">
<ref>String</ref>
<p>
The name of the element. This is typically used as the
label in the outline.
</p>
</field>
<field name="location" optional="true">
<ref>Location</ref>
<p>
The location of the name in the declaration of the
element.
</p>
</field>
<field name="flags">
<ref>int</ref>
<p>
A bit-map containing the following flags:
</p>
<ul>
<li>0x01 - set if the element is explicitly or implicitly abstract</li>
<li>0x02 - set if the element was declared to be ‘const’</li>
<li>0x04 - set if the element was declared to be ‘final’</li>
<li>0x08 - set if the element is a static member of a class or is a top-level function or field</li>
<li>0x10 - set if the element is private</li>
<li>0x20 - set if the element is deprecated</li>
</ul>
</field>
<field name="parameters" optional="true">
<ref>String</ref>
<p>
The parameter list for the element. If the element is not
a method or function this field will not be defined. If
the element doesn't have parameters (e.g. getter), this field
will not be defined. If the element has zero parameters, this
field will have a value of "()".
</p>
</field>
<field name="returnType" optional="true">
<ref>String</ref>
<p>
The return type of the element. If the element is not a
method or function this field will not be defined. If the
element does not have a declared return type, this field
will contain an empty string.
</p>
</field>
</object>
</type>
<type name="ElementKind">
<p>
An enumeration of the kinds of elements.
</p>
<enum>
<value><code>CLASS</code></value>
<value><code>CLASS_TYPE_ALIAS</code></value>
<value><code>COMPILATION_UNIT</code></value>
<value><code>CONSTRUCTOR</code></value>
<value><code>FIELD</code></value>
<value><code>FUNCTION</code></value>
<value><code>FUNCTION_TYPE_ALIAS</code></value>
<value><code>GETTER</code></value>
<value><code>LABEL</code></value>
<value><code>LIBRARY</code></value>
<value><code>LOCAL_VARIABLE</code></value>
<value><code>METHOD</code></value>
<value><code>PARAMETER</code></value>
<value><code>PREFIX</code></value>
<value><code>SETTER</code></value>
<value><code>TOP_LEVEL_VARIABLE</code></value>
<value><code>TYPE_PARAMETER</code></value>
<value><code>UNIT_TEST_GROUP</code></value>
<value><code>UNIT_TEST_TEST</code></value>
<value><code>UNKNOWN</code></value>
</enum>
</type>
<type name="ExecutableFile">
<p>
A description of an executable file.
</p>
<object>
<field name="file">
<ref>FilePath</ref>
<p>
The path of the executable file.
</p>
</field>
<field name="kind">
<ref>ExecutableKind</ref>
<p>
The kind of the executable file.
</p>
</field>
</object>
</type>
<type name="ExecutableKind">
<p>
An enumeration of the kinds of executable files.
</p>
<enum>
<value><code>CLIENT</code></value>
<value><code>EITHER</code></value>
<value><code>NOT_EXECUTABLE</code></value>
<value><code>SERVER</code></value>
</enum>
</type>
<type name="ExecutionContextId">
<ref>String</ref>
<p>
The identifier for a execution context.
</p>
</type>
<type name="ExecutionService">
<p>
An enumeration of the services provided by the execution
domain.
</p>
<enum>
<value><code>LAUNCH_DATA</code></value>
</enum>
</type>
<type name="FilePath">
<ref>String</ref>
<p>
The absolute path of a file.
</p>
</type>
<type name="FoldingKind">
<p>
An enumeration of the kinds of folding regions.
</p>
<enum>
<value><code>COMMENT</code></value>
<value><code>CLASS_MEMBER</code></value>
<value><code>DIRECTIVES</code></value>
<value><code>DOCUMENTATION_COMMENT</code></value>
<value><code>TOP_LEVEL_DECLARATION</code></value>
</enum>
</type>
<type name="FoldingRegion">
<p>
A description of a region that can be folded.
</p>
<object>
<field name="kind">
<ref>FoldingKind</ref>
<p>
The kind of the region.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the region to be folded.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the region to be folded.
</p>
</field>
</object>
</type>
<type name="HighlightRegion">
<p>
A description of a region that could have special highlighting
associated with it.
</p>
<object>
<field name="type">
<ref>HighlightRegionType</ref>
<p>
The type of highlight associated with the region.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the region to be highlighted.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the region to be highlighted.
</p>
</field>
</object>
</type>
<type name="HighlightRegionType">
<p>
An enumeration of the kinds of highlighting that can be
applied to files.
</p>
<enum>
<value><code>ANNOTATION</code></value>
<value><code>BUILT_IN</code></value>
<value><code>CLASS</code></value>
<value><code>COMMENT_BLOCK</code></value>
<value><code>COMMENT_DOCUMENTATION</code></value>
<value><code>COMMENT_END_OF_LINE</code></value>
<value><code>CONSTRUCTOR</code></value>
<value><code>DIRECTIVE</code></value>
<value><code>DYNAMIC_TYPE</code></value>
<value><code>ENUM</code></value>
<value><code>ENUM_CONSTANT</code></value>
<value><code>FIELD</code></value>
<value><code>FIELD_STATIC</code></value>
<value><code>FUNCTION</code></value>
<value><code>FUNCTION_DECLARATION</code></value>
<value><code>FUNCTION_TYPE_ALIAS</code></value>
<value><code>GETTER_DECLARATION</code></value>
<value><code>IDENTIFIER_DEFAULT</code></value>
<value><code>IMPORT_PREFIX</code></value>
<value><code>KEYWORD</code></value>
<value><code>LABEL</code></value>
<value><code>LITERAL_BOOLEAN</code></value>
<value><code>LITERAL_DOUBLE</code></value>
<value><code>LITERAL_INTEGER</code></value>
<value><code>LITERAL_LIST</code></value>
<value><code>LITERAL_MAP</code></value>
<value><code>LITERAL_STRING</code></value>
<value><code>LOCAL_VARIABLE</code></value>
<value><code>LOCAL_VARIABLE_DECLARATION</code></value>
<value><code>METHOD</code></value>
<value><code>METHOD_DECLARATION</code></value>
<value><code>METHOD_DECLARATION_STATIC</code></value>
<value><code>METHOD_STATIC</code></value>
<value><code>PARAMETER</code></value>
<value><code>SETTER_DECLARATION</code></value>
<value><code>TOP_LEVEL_VARIABLE</code></value>
<value><code>TYPE_NAME_DYNAMIC</code></value>
<value><code>TYPE_PARAMETER</code></value>
</enum>
</type>
<type name="HoverInformation">
<p>
The hover information associated with a specific location.
</p>
<object>
<field name="offset">
<ref>int</ref>
<p>
The offset of the range of characters that encompases the
cursor position and has the same hover information as the
cursor position.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the range of characters that encompases the
cursor position and has the same hover information as the
cursor position.
</p>
</field>
<field name="containingLibraryPath" optional="true">
<ref>String</ref>
<p>
The path to the defining compilation unit of the library
in which the referenced element is declared. This data is
omitted if there is no referenced element, or if the
element is declared inside an HTML file.
</p>
</field>
<field name="containingLibraryName" optional="true">
<ref>String</ref>
<p>
The name of the library in which the referenced element is
declared. This data is omitted if there is no referenced
element, or if the element is declared inside an HTML
file.
</p>
</field>
<field name="dartdoc" optional="true">
<ref>String</ref>
<p>
The dartdoc associated with the referenced element. Other
than the removal of the comment delimiters, including
leading asterisks in the case of a block comment, the
dartdoc is unprocessed markdown. This data is omitted if
there is no referenced element, or if the element has no
dartdoc.
</p>
</field>
<field name="elementDescription" optional="true">
<ref>String</ref>
<p>
A human-readable description of the element being
referenced. This data is omitted if there is no referenced
element.
</p>
</field>
<field name="elementKind" optional="true">
<ref>String</ref>
<p>
A human-readable description of the kind of element being
referenced (such as “class” or “function type
alias”). This data is omitted if there is no referenced
element.
</p>
</field>
<field name="parameter" optional="true">
<ref>String</ref>
<p>
A human-readable description of the parameter
corresponding to the expression being hovered over. This
data is omitted if the location is not in an argument to a
function.
</p>
</field>
<field name="propagatedType" optional="true">
<ref>String</ref>
<p>
The name of the propagated type of the expression. This
data is omitted if the location does not correspond to an
expression or if there is no propagated type information.
</p>
</field>
<field name="staticType" optional="true">
<ref>String</ref>
<p>
The name of the static type of the expression. This data
is omitted if the location does not correspond to an
expression.
</p>
</field>
</object>
</type>
<type name="LinkedEditGroup">
<p>
A collection of positions that should be linked (edited
simultaneously) for the purposes of updating code after a
source change. For example, if a set of edits introduced a
new variable name, the group would contain all of the
positions of the variable name so that if the client wanted
to let the user edit the variable name after the operation,
all occurrences of the name could be edited simultaneously.
</p>
<object>
<field name="positions">
<list><ref>Position</ref></list>
<p>
The positions of the regions that should be edited
simultaneously.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the regions that should be edited
simultaneously.
</p>
</field>
<field name="suggestions">
<list><ref>LinkedEditSuggestion</ref></list>
<p>
Pre-computed suggestions for what every region might
want to be changed to.
</p>
</field>
</object>
</type>
<type name="LinkedEditSuggestion">
<p>
A suggestion of a value that could be used to replace all of
the linked edit regions in a LinkedEditGroup.
</p>
<object>
<field name="value">
<ref>String</ref>
<p>
The value that could be used to replace all of the linked
edit regions.
</p>
</field>
<field name="kind">
<ref>LinkedEditSuggestionKind</ref>
<p>
The kind of value being proposed.
</p>
</field>
</object>
</type>
<type name="LinkedEditSuggestionKind">
<p>
An enumeration of the kind of values that can be suggested
for a linked edit.
</p>
<enum>
<value><code>METHOD</code></value>
<value><code>PARAMETER</code></value>
<value><code>TYPE</code></value>
<value><code>VARIABLE</code></value>
</enum>
</type>
<type name="Location">
<p>
A location (character range) within a file.
</p>
<object>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the range.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the range.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the range.
</p>
</field>
<field name="startLine">
<ref>int</ref>
<p>
The one-based index of the line containing the first
character of the range.
</p>
</field>
<field name="startColumn">
<ref>int</ref>
<p>
The one-based index of the column containing the first
character of the range.
</p>
</field>
</object>
</type>
<type name="NavigationRegion">
<p>
A description of a region from which the user can navigate to
the declaration of an element.
</p>
<object>
<field name="offset">
<ref>int</ref>
<p>
The offset of the region from which the user can navigate.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the region from which the user can navigate.
</p>
</field>
<field name="targets">
<list><ref>int</ref></list>
<p>
The indexes of the targets (in the enclosing navigation response)
to which the given region is bound. By opening the target, clients
can implement one form of navigation.
</p>
</field>
</object>
</type>
<type name="NavigationTarget">
<p>
A description of a target to which the user can navigate.
</p>
<object>
<field name="kind">
<ref>ElementKind</ref>
<p>
The kind of the element.
</p>
</field>
<field name="fileIndex">
<ref>int</ref>
<p>
The index of the file (in the enclosing navigation response) to
navigate to.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the region from which the user can navigate.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the region from which the user can navigate.
</p>
</field>
<field name="startLine">
<ref>int</ref>
<p>
The one-based index of the line containing the first
character of the region.
</p>
</field>
<field name="startColumn">
<ref>int</ref>
<p>
The one-based index of the column containing the first
character of the region.
</p>
</field>
</object>
</type>
<type name="Occurrences">
<p>
A description of the references to a single element within a
single file.
</p>
<object>
<field name="element">
<ref>Element</ref>
<p>
The element that was referenced.
</p>
</field>
<field name="offsets">
<list><ref>int</ref></list>
<p>
The offsets of the name of the referenced element within
the file.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the name of the referenced element.
</p>
</field>
</object>
</type>
<type name="Outline">
<p>
An node in the outline structure of a file.
</p>
<object>
<field name="element">
<ref>Element</ref>
<p>
A description of the element represented by this node.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the first character of the element. This is
different than the offset in the Element, which if the
offset of the name of the element. It can be used, for
example, to map locations in the file back to an outline.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the element.
</p>
</field>
<field name="children" optional="true">
<list><ref>Outline</ref></list>
<p>
The children of the node. The field will be omitted if the
node has no children.
</p>
</field>
</object>
</type>
<type name="Override">
<p>
A description of a member that overrides an inherited member.
</p>
<object>
<field name="offset">
<ref>int</ref>
<p>
The offset of the name of the overriding member.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the name of the overriding member.
</p>
</field>
<field name="superclassMember" optional="true">
<ref>OverriddenMember</ref>
<p>
The member inherited from a superclass that is overridden
by the overriding member. The field is omitted if there is
no superclass member, in which case there must be at least
one interface member.
</p>
</field>
<field name="interfaceMembers" optional="true">
<list><ref>OverriddenMember</ref></list>
<p>
The members inherited from interfaces that are overridden
by the overriding member. The field is omitted if there
are no interface members, in which case there must be a
superclass member.
</p>
</field>
</object>
</type>
<type name="OverriddenMember">
<p>
A description of a member that is being overridden.
</p>
<object>
<field name="element">
<ref>Element</ref>
<p>
The element that is being overridden.
</p>
</field>
<field name="className">
<ref>String</ref>
<p>
The name of the class in which the member is defined.
</p>
</field>
</object>
</type>
<type name="Position">
<p>
A position within a file.
</p>
<object>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the position.
</p>
</field>
<field name="offset">
<ref>int</ref>
<p>
The offset of the position.
</p>
</field>
</object>
</type>
<type name="PubStatus">
<p>
An indication of the current state of pub execution.
</p>
<object>
<field name="isListingPackageDirs">
<ref>bool</ref>
<p>
True if the server is currently running pub to produce a list of
package directories.
</p>
</field>
</object>
</type>
<type name="RefactoringKind">
<p>
An enumeration of the kinds of refactorings that can be
created.
</p>
<enum>
<value><code>CONVERT_GETTER_TO_METHOD</code></value>
<value><code>CONVERT_METHOD_TO_GETTER</code></value>
<value><code>EXTRACT_LOCAL_VARIABLE</code></value>
<value><code>EXTRACT_METHOD</code></value>
<value><code>INLINE_LOCAL_VARIABLE</code></value>
<value><code>INLINE_METHOD</code></value>
<value><code>MOVE_FILE</code></value>
<value><code>RENAME</code></value>
<value><code>SORT_MEMBERS</code></value>
</enum>
</type>
<type name="RefactoringMethodParameter">
<p>
A description of a parameter in a method refactoring.
</p>
<object>
<field name="id" optional="true">
<ref>String</ref>
<p>
The unique identifier of the parameter.
Clients may omit this field for the parameters they want to add.
</p>
</field>
<field name="kind">
<ref>RefactoringMethodParameterKind</ref>
<p>
The kind of the parameter.
</p>
</field>
<field name="type">
<ref>String</ref>
<p>
The type that should be given to the parameter, or the return type
of the parameter's function type.
</p>
</field>
<field name="name">
<ref>String</ref>
<p>
The name that should be given to the parameter.
</p>
</field>
<field name="parameters" optional="true">
<ref>String</ref>
<p>
The parameter list of the parameter's function type.
If the parameter is not of a function type, this field will
not be defined. If the function type has zero parameters, this
field will have a value of "()".
</p>
</field>
</object>
</type>
<type name="RefactoringFeedback">
<p>
An abstract superclass of all refactoring feedbacks.
</p>
<object>
</object>
</type>
<type name="RefactoringOptions">
<p>
An abstract superclass of all refactoring options.
</p>
<object>
</object>
</type>
<type name="RefactoringMethodParameterKind">
<p>
An enumeration of the kinds of parameters.
</p>
<enum>
<value><code>REQUIRED</code></value>
<value><code>POSITIONAL</code></value>
<value><code>NAMED</code></value>
</enum>
</type>
<type name="RefactoringProblem">
<p>
A description of a problem related to a refactoring.
</p>
<object>
<field name="severity">
<ref>RefactoringProblemSeverity</ref>
<p>
The severity of the problem being represented.
</p>
</field>
<field name="message">
<ref>String</ref>
<p>
A human-readable description of the problem being
represented.
</p>
</field>
<field name="location" optional="true">
<ref>Location</ref>
<p>
The location of the problem being represented.
This field is omitted unless there is a specific location
associated with the problem (such as a location where an element
being renamed will be shadowed).
</p>
</field>
</object>
</type>
<type name="RefactoringProblemSeverity">
<p>
An enumeration of the severities of problems that can be
returned by the refactoring requests.
</p>
<enum>
<value><code>INFO</code></value>
<value><code>WARNING</code></value>
<value><code>ERROR</code></value>
<value><code>FATAL</code></value>
</enum>
</type>
<type name="RemoveContentOverlay">
<p>
A directive to remove an existing file content overlay.
After processing this directive, the file contents will once
again be read from the file system.
</p>
<p>
If this directive is used on a file that doesn't currently
have a content overlay, it has no effect.
</p>
<object>
<field name="type" value="remove"><ref>String</ref></field>
</object>
</type>
<type name="RequestError">
<p>
An indication of a problem with the execution of the server,
typically in response to a request.
</p>
<object>
<field name="code">
<ref>RequestErrorCode</ref>
<p>
A code that uniquely identifies the error that occurred.
</p>
</field>
<field name="message">
<ref>String</ref>
<p>
A short description of the error.
</p>
</field>
<field name="stackTrace" optional="true">
<ref>String</ref>
<p>
The stack trace associated with processing the request,
used for debugging the server.
</p>
</field>
</object>
</type>
<type name="RequestErrorCode">
<p>
An enumeration of the types of errors that can occur in the
execution of the server.
</p>
<enum>
<value>
<code>CONTENT_MODIFIED</code>
<p>
An "analysis.getErrors" or "analysis.getNavigation" request could
not be satisfied because the content of the file changed before
the requested results could be computed.
</p>
</value>
<value>
<code>FORMAT_INVALID_FILE</code>
<p>
An "edit.format" request specified a FilePath
which does not match a Dart file in an analysis root.
</p>
</value>
<value>
<code>GET_ERRORS_INVALID_FILE</code>
<p>
An "analysis.getErrors" request specified a FilePath
which does not match a file currently subject to
analysis.
</p>
</value>
<value>
<code>INVALID_OVERLAY_CHANGE</code>
<p>
An analysis.updateContent request contained a
ChangeContentOverlay object which can't be applied, due
to an edit having an offset or length that is out of
range.
</p>
</value>
<value>
<code>INVALID_PARAMETER</code>
<p>
One of the method parameters was invalid.
</p>
</value>
<value>
<code>INVALID_REQUEST</code>
<p>
A malformed request was received.
</p>
</value>
<value>
<code>REFACTORING_REQUEST_CANCELLED</code>
<p>
Another refactoring request was received during processing of
this one.
</p>
</value>
<value>
<code>SERVER_ALREADY_STARTED</code>
<p>
The analysis server has already been started (and hence
won't accept new connections).
</p>
<p>
This error is included for future expansion; at present
the analysis server can only speak to one client at a
time so this error will never occur.
</p>
</value>
<value>
<code>SERVER_ERROR</code>
<p>
An internal error occurred in the analysis server.
Also see the server.error notification.
</p>
</value>
<value>
<code>SORT_MEMBERS_INVALID_FILE</code>
<p>
An "edit.sortMembers" request specified a FilePath
which does not match a Dart file in an analysis root.
</p>
</value>
<value>
<code>SORT_MEMBERS_PARSE_ERRORS</code>
<p>
An "edit.sortMembers" request specified a Dart file that has
scan or parse errors.
</p>
</value>
<value>
<code>UNANALYZED_PRIORITY_FILES</code>
<p>
An "analysis.setPriorityFiles" request includes one or
more files that are not being analyzed.
</p>
<p>
This is a legacy error; it will be removed before the
API reaches version 1.0.
</p>
<!-- TODO(paulberry): remove this error and the code that
generates it. -->
</value>
<value>
<code>UNKNOWN_REQUEST</code>
<p>
A request was received which the analysis server does
not recognize, or cannot handle in its current
configuation.
</p>
</value>
<value>
<code>UNSUPPORTED_FEATURE</code>
<p>
The analysis server was requested to perform an action
which is not supported.
</p>
<p>
This is a legacy error; it will be removed before the
API reaches version 1.0.
</p>
<!-- TODO(paulberry): remove this error and the code that
generates it. -->
</value>
</enum>
</type>
<type name="SearchId">
<ref>String</ref>
<p>
An identifier used to associate search results with a search
request.
</p>
</type>
<type name="SearchResult">
<p>
A single result from a search request.
</p>
<object>
<field name="location">
<ref>Location</ref>
<p>
The location of the code that matched the search criteria.
</p>
</field>
<field name="kind">
<ref>SearchResultKind</ref>
<p>
The kind of element that was found or the kind of
reference that was found.
</p>
</field>
<field name="isPotential">
<ref>bool</ref>
<p>
True if the result is a potential match but cannot be
confirmed to be a match. For example, if all references to
a method m defined in some class were requested, and a
reference to a method m from an unknown class were found,
it would be marked as being a potential match.
</p>
</field>
<field name="path">
<list><ref>Element</ref></list>
<p>
The elements that contain the result, starting with the
most immediately enclosing ancestor and ending with the
library.
</p>
</field>
</object>
</type>
<type name="SearchResultKind">
<p>
An enumeration of the kinds of search results returned by the
search domain.
</p>
<enum>
<value>
<code>DECLARATION</code>
<p>
The declaration of an element.
</p>
</value>
<value>
<code>INVOCATION</code>
<p>
The invocation of a function or method.
</p>
</value>
<value>
<code>READ</code>
<p>
A reference to a field, parameter or variable where it is being read.
</p>
</value>
<value>
<code>READ_WRITE</code>
<p>
A reference to a field, parameter or variable where it is being read and written.
</p>
</value>
<value>
<code>REFERENCE</code>
<p>
A reference to an element.
</p>
</value>
<value>
<code>UNKNOWN</code>
<p>
Some other kind of search result.
</p>
</value>
<value>
<code>WRITE</code>
<p>
A reference to a field, parameter or variable where it is being written.
</p>
</value>
</enum>
</type>
<type name="ServerService">
<p>
An enumeration of the services provided by the server domain.
</p>
<enum>
<value><code>STATUS</code></value>
</enum>
</type>
<type name="SourceChange">
<p>
A description of a set of edits that implement a single
conceptual change.
</p>
<object>
<field name="message">
<ref>String</ref>
<p>
A human-readable description of the change to be applied.
</p>
</field>
<field name="edits">
<list><ref>SourceFileEdit</ref></list>
<p>
A list of the edits used to effect the change, grouped by
file.
</p>
</field>
<field name="linkedEditGroups">
<list><ref>LinkedEditGroup</ref></list>
<p>
A list of the linked editing groups used to customize
the changes that were made.
</p>
</field>
<field name="selection" optional="true">
<ref>Position</ref>
<p>
The position that should be selected after the edits
have been applied.
</p>
</field>
</object>
</type>
<type name="SourceEdit">
<p>
A description of a single change to a single file.
</p>
<object>
<field name="offset">
<ref>int</ref>
<p>
The offset of the region to be modified.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the region to be modified.
</p>
</field>
<field name="replacement">
<ref>String</ref>
<p>
The code that is to replace the specified region in the
original code.
</p>
</field>
<field name="id" optional="true">
<ref>String</ref>
<p>
An identifier that uniquely identifies this source edit from other
edits in the same response. This field is omitted unless a
containing structure needs to be able to identify the edit for
some reason.
</p>
<p>
For example, some refactoring operations can produce edits that
might not be appropriate (referred to as potential edits). Such
edits will have an id so that they can be referenced. Edits in
the same response that do not need to be referenced will not have
an id.
</p>
</field>
</object>
</type>
<type name="SourceFileEdit">
<p>
A description of a set of changes to a single file.
</p>
<object>
<field name="file">
<ref>FilePath</ref>
<p>
The file containing the code to be modified.
</p>
</field>
<field name="fileStamp">
<ref>long</ref>
<p>
The modification stamp of the file at the moment when the change
was created, in milliseconds since the "Unix epoch". Will be -1 if
the file did not exist and should be created. The client may use
this field to make sure that the file was not changed since then,
so it is safe to apply the change.
</p>
</field>
<field name="edits">
<list><ref>SourceEdit</ref></list>
<p>
A list of the edits used to effect the change.
</p>
</field>
</object>
</type>
<type name="TypeHierarchyItem">
<p>
A representation of a class in a type hierarchy.
</p>
<object>
<field name="classElement">
<ref>Element</ref>
<p>
The class element represented by this item.
</p>
</field>
<field name="displayName" optional="true">
<ref>String</ref>
<p>
The name to be displayed for the class. This field will be
omitted if the display name is the same as the name of the
element. The display name is different if there is
additional type information to be displayed, such as type
arguments.
</p>
</field>
<field name="memberElement" optional="true">
<ref>Element</ref>
<p>
The member in the class corresponding to the member on
which the hierarchy was requested. This field will be
omitted if the hierarchy was not requested for a member or
if the class does not have a corresponding member.
</p>
</field>
<field name="superclass" optional="true">
<ref>int</ref>
<p>
The index of the item representing the superclass of
this class. This field will be omitted if this item
represents the class Object.
</p>
</field>
<field name="interfaces">
<list><ref>int</ref></list>
<p>
The indexes of the items representing the interfaces
implemented by this class. The list will be empty if
there are no implemented interfaces.
</p>
</field>
<field name="mixins">
<list><ref>int</ref></list>
<p>
The indexes of the items representing the mixins
referenced by this class. The list will be empty if
there are no classes mixed in to this class.
</p>
</field>
<field name="subclasses">
<list><ref>int</ref></list>
<p>
The indexes of the items representing the subtypes of
this class. The list will be empty if there are no
subtypes or if this item represents a supertype of the
pivot type.
</p>
</field>
</object>
</type>
</types>
<refactorings>
<h2><a name="refactorings">Refactorings</a></h2>
<p>
This section contains additional information for each kind of
refactoring. In addition to a brief description of the
refactoring, there is a specification of the feedback that is
provided when a refactoring is requested using the
edit.getRefactoring request (designed to improve the UX)
and the options that may be provided to edit.getRefactoring.
</p>
<refactoring kind="CONVERT_GETTER_TO_METHOD">
<p>
Convert a getter into a method by removing the keyword get
and adding an empty parameter list.
</p>
<p>
It is an error if the range contains anything other than all
or part of the name of a single getter.
</p>
</refactoring>
<refactoring kind="CONVERT_METHOD_TO_GETTER">
<p>
Convert a method into a getter by adding the keyword get and
removing the parameter list.
</p>
<p>
It is an error if the range contains anything other than all
or part of the name of a single method or if the method has
a non-empty parameter list.
</p>
</refactoring>
<refactoring kind="EXTRACT_LOCAL_VARIABLE">
<p>
Create a local variable initialized by a specified
expression.
</p>
<p>
It is an error if the range contains anything other than a
complete expression (no partial expressions are allowed).
</p>
<feedback>
<field name="names">
<list><ref>String</ref></list>
<p>
The proposed names for the local variable.
</p>
</field>
<field name="offsets">
<list><ref>int</ref></list>
<p>
The offsets of the expressions that would be replaced by
a reference to the variable.
</p>
</field>
<field name="lengths">
<list><ref>int</ref></list>
<p>
The lengths of the expressions that would be replaced by
a reference to the variable. The lengths correspond to
the offsets. In other words, for a given expression, if
the offset of that expression is offsets[i], then the
length of that expression is lengths[i].
</p>
</field>
</feedback>
<options>
<field name="name">
<ref>String</ref>
<p>
The name that the local variable should be given.
</p>
</field>
<field name="extractAll">
<ref>bool</ref>
<p>
True if all occurrences of the expression within the
scope in which the variable will be defined should be
replaced by a reference to the local variable. The
expression used to initiate the refactoring will always
be replaced.
</p>
</field>
</options>
</refactoring>
<refactoring kind="EXTRACT_METHOD">
<p>
Create a method whose body is the specified expression or
list of statements, possibly augmented with a return
statement.
</p>
<p>
It is an error if the range contains anything other than a
complete expression (no partial expressions are allowed) or
a complete sequence of statements.
</p>
<feedback>
<field name="offset">
<ref>int</ref>
<p>
The offset to the beginning of the expression or
statements that will be extracted.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the expression or statements that will be
extracted.
</p>
</field>
<field name="returnType">
<ref>String</ref>
<p>
The proposed return type for the method.
</p>
</field>
<field name="names">
<list><ref>String</ref></list>
<p>
The proposed names for the method.
</p>
</field>
<field name="canCreateGetter">
<ref>bool</ref>
<p>
True if a getter could be created rather than a method.
</p>
</field>
<field name="parameters">
<list><ref>RefactoringMethodParameter</ref></list>
<p>
The proposed parameters for the method.
</p>
</field>
<field name="offsets">
<list><ref>int</ref></list>
<p>
The offsets of the expressions or statements that would
be replaced by an invocation of the method.
</p>
</field>
<field name="lengths">
<list><ref>int</ref></list>
<p>
The lengths of the expressions or statements that would
be replaced by an invocation of the method. The lengths
correspond to the offsets. In other words, for a given
expression (or block of statements), if the offset of
that expression is offsets[i], then the length of that
expression is lengths[i].
</p>
</field>
</feedback>
<options>
<field name="returnType">
<ref>String</ref>
<p>
The return type that should be defined for the method.
</p>
</field>
<field name="createGetter">
<ref>bool</ref>
<p>
True if a getter should be created rather than a
method. It is an error if this field is true and the
list of parameters is non-empty.
</p>
</field>
<field name="name">
<ref>String</ref>
<p>
The name that the method should be given.
</p>
</field>
<field name="parameters">
<list><ref>RefactoringMethodParameter</ref></list>
<p>
The parameters that should be defined for the method.
</p>
<p>
It is an error if a REQUIRED or NAMED parameter follows a
POSITIONAL parameter.
It is an error if a REQUIRED or POSITIONAL parameter follows a
NAMED parameter.
</p>
<ul>
<li>
To change the order and/or update proposed parameters, add
parameters with the same identifiers as proposed.
</li>
<li>To add new parameters, omit their identifier.</li>
<li>To remove some parameters, omit them in this list.</li>
</ul>
</field>
<field name="extractAll">
<ref>bool</ref>
<p>
True if all occurrences of the expression or statements
should be replaced by an invocation of the method. The
expression or statements used to initiate the
refactoring will always be replaced.
</p>
</field>
</options>
</refactoring>
<refactoring kind="INLINE_LOCAL_VARIABLE">
<p>
Inline the initializer expression of a local variable in
place of any references to that variable.
</p>
<p>
It is an error if the range contains anything other than all
or part of the name of a single local variable.
</p>
<feedback>
<field name="name">
<ref>String</ref>
<p>
The name of the variable being inlined.
</p>
</field>
<field name="occurrences">
<ref>int</ref>
<p>
The number of times the variable occurs.
</p>
</field>
</feedback>
</refactoring>
<refactoring kind="INLINE_METHOD">
<p>
Inline a method in place of one or all references to that
method.
</p>
<p>
It is an error if the range contains anything other than all
or part of the name of a single method.
</p>
<feedback>
<field name="className" optional="true">
<ref>String</ref>
<p>
The name of the class enclosing the method being inlined.
If not a class member is being inlined, this field will be absent.
</p>
</field>
<field name="methodName">
<ref>String</ref>
<p>
The name of the method (or function) being inlined.
</p>
</field>
<field name="isDeclaration">
<ref>bool</ref>
<p>
True if the declaration of the method is selected.
So all references should be inlined.
</p>
</field>
</feedback>
<options>
<field name="deleteSource">
<ref>bool</ref>
<p>
True if the method being inlined should be removed.
It is an error if this field is true and inlineAll is false.
</p>
</field>
<field name="inlineAll">
<ref>bool</ref>
<p>
True if all invocations of the method should be inlined,
or false if only the invocation site used to create this
refactoring should be inlined.
</p>
</field>
</options>
</refactoring>
<refactoring kind="MOVE_FILE">
<p>
Move the given file and update all of the references to that file
and from it. The move operation is supported in general case - for
renaming a file in the same folder, moving it to a different folder
or both.
</p>
<p>
The refactoring must be activated before an actual file moving
operation is performed.
</p>
<p>
The "offset" and "length" fields from the request are ignored, but the
file specified in the request specifies the file to be moved.
</p>
<options>
<field name="newFile">
<ref>FilePath</ref>
<p>
The new file path to which the given file is being moved.
</p>
</field>
</options>
</refactoring>
<refactoring kind="RENAME">
<p>
Rename a given element and all of the references to that
element.
</p>
<p>
It is an error if the range contains anything other than all
or part of the name of a single function (including methods,
getters and setters), variable (including fields, parameters
and local variables), class or function type.
</p>
<feedback>
<field name="offset">
<ref>int</ref>
<p>
The offset to the beginning of the name selected to be
renamed.
</p>
</field>
<field name="length">
<ref>int</ref>
<p>
The length of the name selected to be renamed.
</p>
</field>
<field name="elementKindName">
<ref>String</ref>
<p>
The human-readable description of the kind of element being
renamed (such as “class” or “function type
alias”).
</p>
</field>
<field name="oldName">
<ref>String</ref>
<p>
The old name of the element before the refactoring.
</p>
</field>
</feedback>
<options>
<field name="newName">
<ref>String</ref>
<p>
The name that the element should have after the
refactoring.
</p>
</field>
</options>
</refactoring>
</refactorings>
<h2>Errors</h2>
<p>
This section contains a list of all of the errors that are
produced by the server and the data that is returned with each.
</p>
<p>
TBD
</p>
</body>
</html>