[API summary] Consider publicly exported names to be part of public API. Changes the logic for deciding whether to output details about a top level element. Previously, details would be output if the library containing the element's declaration was in `lib` but not `lib/src`. This led to a bug: if a top level element was declared in `lib/src` but exported by an `export` directive in `lib`, no details would be output, and the API summary would just show `(non-public)` after the exported name. This bug was mostly benign because we were working around it with an analyzer-specific hack: when analyzing the `analyzer` package, top level elements with an annotation of type `AnalyzerPublicApi` would have their details output regardless of where they were declared. But it wasn't completely benign: the tool was failing to output details of `DartDocumentLinkVisitor` and `DocumentLink` (from `package:analyzer_plugin`), as well as `PackageBuilder` (from `package:analyzer_testing`). The new logic is: details are output if the element appears in the export namespace of any library in `lib` but not `lib/src`. I've re-run the API summary tool so the `api.txt` files in `package:analyzer_plugin` and `package:analyzer_testing` now include the details they were missing. The analyzer-specific hack is left in place, though, because there are some analyzer classes that aren't exported, but still considered part of the analyzer public API. In a follow-up CL, I will make the API summary tool extensible so that this analyzer-specific logic can be injected by the analyzer when generating its `api.txt` file, and it won't pollute the incipient `api_summary` tool. Change-Id: I6a6a69641d656caa4f8e6361557c13fa7485e422 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/482440 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Dart is:
Approachable: Develop with a strongly typed programming language that is consistent, concise, and offers modern language features like null safety and patterns.
Portable: Compile to ARM, x64, or RISC-V machine code for mobile, desktop, and backend. Compile to JavaScript or WebAssembly for the web.
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app. Diagnose app issues using DevTools.
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents in our repo at docs.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.
Future plans for Dart are included in the combined Dart and Flutter roadmap on the Flutter wiki.