The analysis package defines support for performing static analysis of Dart
code. It was designed to support tooling efforts, but has also been used for
such things as statistics gathering and code transformers.

If you are interested in providing Dart support in a long-running tool, such as
an editor or IDE, you should use the analysis server instead of this package.
The analysis server is currently shipped as an executable in the SDK and will
be released as a package in the near future. In the meantime, if you'd like to
learn more about it, please look at the
[Analysis Server API Specification](http://htmlpreview.github.io/?https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/doc/api.html)
or contact the mailing list (see below).

The API's in this package are, quite frankly, a mess at the moment. They were
originally machine generated by a translator and were based on an earlier Java
implementation. Several of the API's still look like their Java predecessors
(or worse) rather than clean Dart API's.

In addition, there is currently no clean distinction between public and internal
API's. We plan to address this issue soon, but doing so will, unfortunately,
require a large number of breaking changes. We will try to minimize the pain
this causes for our clients, but some pain is inevitable.

Questions and requests for additional functionality are welcome, and can be made
by either opening an issue at
[http://dartbug.com](http://dartbug.com)
or by emailing
[analyzer-discuss@dartlang.org](https://groups.google.com/a/dartlang.org/forum/#!forum/analyzer-discuss).
