blob: 758d2052b12afac3c05ea9b4bdbeb0788ee7138c [file] [log] [blame] [view] [edit]
# Code Transformers
This package exposes various tools to help in the creation and testing of
barback transformers, as well as an interface for logging messages with
constant ids for documentation purposes.
## Messages and logging
This package exposes a `BuildLogger` class as well as `Message`,
`MessageTemplate`, and `MessageId` classes. These work together to provide
stable error messages with ids that can be referenced in documentation.
### MessageId
A `MessageId` is a constant definition of a message in a package. These are
used to group messages with the same id or link to sections in a document.
const myId = const MessageId('myPackage', 0);
These ids should typically never change or disappear throughout the entire
lifetime of a package.
### Message
A `Message` is a const object which has a `MessageId` and `snippet`.
const myMessage = const Message(myId, 'my message');
### MessageTemplate
TODO(jakemac): Docs on this, see
https://github.com/dart-lang/code-transformers/blob/master/lib/messages/messages.dart
### BuildLogger
The `BuildLogger` class just wraps a normal `TransformLogger` to provide some
additional functionality. You use it in the same way as a `TransformLogger`
except that the log methods can accept a `String` or a `Message`. This should
usually be created in the first step of your transformers `apply` function:
apply(Transform transform) {
// If detailsUri is passed, then a link will be output with each log
// message that follows this format
// `$detailsUri#${msg.id.package}_${msg.id.id}`.
var logger = new BuildLogger(transform, detailsUri: 'http://foo.com');
}
You can optionally dump out a file containing all the logs found in JSON
format by calling the `writeOutput` method on the logger when you are done.
The output file will have the same file path as the primary input of the
transformer, with an extension matching this pattern `._buildLogs.$i`. The
`i` increments starting at 0 each time that logs are output (if multiple
transformers run on the same file for instance). These can all be combined
into a single file later on by calling the static
`combineLogFiles(Transform transform)` function.
## Testing Transformers
TODO(jakemac): Docs on this, see `testPhases` in
https://github.com/dart-lang/code-transformers/blob/master/lib/tests.dart
## Using the Analyzer in Transformers
This package exposes a `Resolver` class which helps out when using the
analyzer in a transform.
TODO(jakemac): Docs on this, see
https://github.com/dart-lang/code-transformers/blob/master/lib/src/resolver.dart
## Barback AssetIds and Uris
This package also provides some helpers to convert `AssetId`s to and from `Uri`s
relative to a source asset.
TODO(jakemac): Docs on this, see `uriToAssetId` & `assetIdToUri` in
https://github.com/dart-lang/code-transformers/blob/master/lib/assets.dart