diff --git a/.gitignore b/.gitignore
index 25a1df3..f73b2f9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,4 @@
-.buildlog
-.DS_Store
-.idea
-.pub/
-.settings/
-build/
-packages
+.dart_tool/
 .packages
+.pub/
 pubspec.lock
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..3895dfc
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,27 @@
+language: dart
+
+# trying to get chrome working
+sudo: true
+
+dart:
+  - dev
+  - stable
+
+dart_task:
+  - test: -p chrome,vm
+
+matrix:
+  include:
+    # Only validate formatting using the dev release
+    - dart: dev
+      dart_task: dartfmt
+    - dart: dev
+      dart_task: analyzer
+
+# Only building master means that we don't run two builds for each pull request.
+branches:
+  only: [master]
+
+cache:
+ directories:
+   - $HOME/.pub-cache
diff --git a/.analysis_options b/analysis_options.yaml
similarity index 100%
rename from .analysis_options
rename to analysis_options.yaml
diff --git a/lib/source_map_stack_trace.dart b/lib/source_map_stack_trace.dart
index c9e49f2..d0252e0 100644
--- a/lib/source_map_stack_trace.dart
+++ b/lib/source_map_stack_trace.dart
@@ -23,7 +23,9 @@
 /// [packageRoot] is deprecated and shouldn't be used in new code. This throws
 /// an [ArgumentError] if [packageRoot] and [packageResolver] are both passed.
 StackTrace mapStackTrace(Mapping sourceMap, StackTrace stackTrace,
-    {bool minified: false, SyncPackageResolver packageResolver, sdkRoot,
+    {bool minified: false,
+    SyncPackageResolver packageResolver,
+    sdkRoot,
     @Deprecated("Use the packageResolver parameter instead.") packageRoot}) {
   if (packageRoot != null) {
     if (packageResolver != null) {
@@ -36,8 +38,7 @@
 
   if (stackTrace is Chain) {
     return new Chain(stackTrace.traces.map((trace) {
-      return new Trace.from(mapStackTrace(
-          sourceMap, trace,
+      return new Trace.from(mapStackTrace(sourceMap, trace,
           minified: minified,
           packageResolver: packageResolver,
           sdkRoot: sdkRoot));
@@ -75,15 +76,16 @@
     } else if (packageResolver != null) {
       if (packageResolver.packageRoot != null &&
           p.url.isWithin(packageResolver.packageRoot.toString(), sourceUrl)) {
-        sourceUrl = "package:" + p.url.relative(sourceUrl,
-            from: packageResolver.packageRoot.toString());
+        sourceUrl = "package:" +
+            p.url.relative(sourceUrl,
+                from: packageResolver.packageRoot.toString());
       } else if (packageResolver.packageConfigMap != null) {
         for (var package in packageResolver.packageConfigMap.keys) {
           var packageUrl = packageResolver.packageConfigMap[package].toString();
           if (!p.url.isWithin(packageUrl, sourceUrl)) continue;
 
-          sourceUrl = "package:$package/" +
-              p.url.relative(sourceUrl, from: packageUrl);
+          sourceUrl =
+              "package:$package/" + p.url.relative(sourceUrl, from: packageUrl);
           break;
         }
       }
@@ -110,7 +112,8 @@
       // Get rid of arity indicators and named arguments.
       .replaceAll(new RegExp(r"\$\d+(\$[a-zA-Z_0-9]+)*$"), "")
       // Convert closures to <fn>.
-      .replaceAllMapped(new RegExp(r"(_+)closure\d*\.call$"),
+      .replaceAllMapped(
+          new RegExp(r"(_+)closure\d*\.call$"),
           // The number of underscores before "closure" indicates how nested it
           // is.
           (match) => ".<fn>" * match[1].length)
@@ -126,6 +129,6 @@
       // Convert underscores after identifiers to dots. This runs the risk of
       // incorrectly converting members that contain underscores, but those are
       // contrary to the style guide anyway.
-      .replaceAllMapped(new RegExp(r"([a-zA-Z0-9]+)_"),
-          (match) => match[1] + ".");
+      .replaceAllMapped(
+          new RegExp(r"([a-zA-Z0-9]+)_"), (match) => match[1] + ".");
 }
diff --git a/pubspec.yaml b/pubspec.yaml
index f890ed7..c103c6c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: source_map_stack_trace
-version: 1.1.4
+version: 1.1.5-dev
 description: >
   A package for applying source maps to stack traces.
 author: Dart Team <misc@dartlang.org>
diff --git a/test/source_map_stack_trace_test.dart b/test/source_map_stack_trace_test.dart
index 14ec86b..18a5652 100644
--- a/test/source_map_stack_trace_test.dart
+++ b/test/source_map_stack_trace_test.dart
@@ -11,18 +11,14 @@
 import 'package:test/test.dart';
 
 /// A simple [Mapping] for tests that don't need anything special.
-final _simpleMapping = parseJson(
-    (new SourceMapBuilder()
-        ..addSpan(
-            new SourceMapSpan.identifier(
-                new SourceLocation(1,
-                    line: 1, column: 3, sourceUrl: "foo.dart"),
-                "qux"),
-            new SourceSpan(
-                new SourceLocation(8, line: 5, column: 0),
-                new SourceLocation(18, line: 15, column: 0),
-                "\n" * 10)))
-        .build("foo.dart.js.map"));
+final _simpleMapping = parseJson((new SourceMapBuilder()
+      ..addSpan(
+          new SourceMapSpan.identifier(
+              new SourceLocation(1, line: 1, column: 3, sourceUrl: "foo.dart"),
+              "qux"),
+          new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+              new SourceLocation(18, line: 15, column: 0), "\n" * 10)))
+    .build("foo.dart.js.map"));
 
 void main() {
   test("maps a JS line and column to a Dart line and span", () {
@@ -63,8 +59,7 @@
     expect(frames.last.member, equals("baz"));
   });
 
-  test("include frames from JS files not covered by the source map bundle",
-      () {
+  test("include frames from JS files not covered by the source map bundle", () {
     var trace = new Trace.parse("""
 foo.dart.js 10:11  foo
 jquery.js 10:1  foo
@@ -118,15 +113,12 @@
   test("falls back to column 0 for unlisted column", () {
     var trace = new Trace.parse("foo.dart.js 10  foo");
     var builder = new SourceMapBuilder()
-        ..addSpan(
-            new SourceMapSpan.identifier(
-                new SourceLocation(1,
-                    line: 1, column: 3, sourceUrl: "foo.dart"),
-                "qux"),
-            new SourceSpan(
-                new SourceLocation(8, line: 5, column: 0),
-                new SourceLocation(12, line: 9, column: 1),
-                "\n" * 4));
+      ..addSpan(
+          new SourceMapSpan.identifier(
+              new SourceLocation(1, line: 1, column: 3, sourceUrl: "foo.dart"),
+              "qux"),
+          new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+              new SourceLocation(12, line: 9, column: 1), "\n" * 4));
 
     var mapping = parseJson(builder.build("foo.dart.js.map"));
     var frame = _mapTrace(mapping, trace).frames.first;
@@ -138,19 +130,17 @@
   test("uses package: URIs for frames within packageRoot", () {
     var trace = new Trace.parse("foo.dart.js 10  foo");
     var builder = new SourceMapBuilder()
-        ..addSpan(
-            new SourceMapSpan.identifier(
-                new SourceLocation(1,
-                    line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
-                "qux"),
-            new SourceSpan(
-                new SourceLocation(8, line: 5, column: 0),
-                new SourceLocation(12, line: 9, column: 1),
-                "\n" * 4));
+      ..addSpan(
+          new SourceMapSpan.identifier(
+              new SourceLocation(1,
+                  line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
+              "qux"),
+          new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+              new SourceLocation(12, line: 9, column: 1), "\n" * 4));
 
     var mapping = parseJson(builder.build("foo.dart.js.map"));
-    var frame = _mapTrace(mapping, trace, packageRoot: "packages/")
-        .frames.first;
+    var frame =
+        _mapTrace(mapping, trace, packageRoot: "packages/").frames.first;
     expect(frame.uri, equals(Uri.parse("package:foo/foo.dart")));
     expect(frame.line, equals(2));
     expect(frame.column, equals(4));
@@ -159,15 +149,13 @@
   test("uses package: URIs for frames within packageResolver.packageRoot", () {
     var trace = new Trace.parse("foo.dart.js 10  foo");
     var builder = new SourceMapBuilder()
-        ..addSpan(
-            new SourceMapSpan.identifier(
-                new SourceLocation(1,
-                    line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
-                "qux"),
-            new SourceSpan(
-                new SourceLocation(8, line: 5, column: 0),
-                new SourceLocation(12, line: 9, column: 1),
-                "\n" * 4));
+      ..addSpan(
+          new SourceMapSpan.identifier(
+              new SourceLocation(1,
+                  line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
+              "qux"),
+          new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+              new SourceLocation(12, line: 9, column: 1), "\n" * 4));
 
     var mapping = parseJson(builder.build("foo.dart.js.map"));
     var mappedTrace = _mapTrace(mapping, trace,
@@ -182,21 +170,18 @@
       () {
     var trace = new Trace.parse("foo.dart.js 10  foo");
     var builder = new SourceMapBuilder()
-        ..addSpan(
-            new SourceMapSpan.identifier(
-                new SourceLocation(1,
-                    line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
-                "qux"),
-            new SourceSpan(
-                new SourceLocation(8, line: 5, column: 0),
-                new SourceLocation(12, line: 9, column: 1),
-                "\n" * 4));
+      ..addSpan(
+          new SourceMapSpan.identifier(
+              new SourceLocation(1,
+                  line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
+              "qux"),
+          new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+              new SourceLocation(12, line: 9, column: 1), "\n" * 4));
 
     var mapping = parseJson(builder.build("foo.dart.js.map"));
     var mappedTrace = _mapTrace(mapping, trace,
-        packageResolver: new SyncPackageResolver.config({
-          "foo": Uri.parse("packages/foo")
-        }));
+        packageResolver:
+            new SyncPackageResolver.config({"foo": Uri.parse("packages/foo")}));
     var frame = mappedTrace.frames.first;
     expect(frame.uri, equals(Uri.parse("package:foo/foo.dart")));
     expect(frame.line, equals(2));
@@ -206,15 +191,13 @@
   test("uses dart: URIs for frames within sdkRoot", () {
     var trace = new Trace.parse("foo.dart.js 10  foo");
     var builder = new SourceMapBuilder()
-        ..addSpan(
-            new SourceMapSpan.identifier(
-                new SourceLocation(1,
-                    line: 1, column: 3, sourceUrl: "sdk/lib/async/foo.dart"),
-                "qux"),
-            new SourceSpan(
-                new SourceLocation(8, line: 5, column: 0),
-                new SourceLocation(12, line: 9, column: 1),
-                "\n" * 4));
+      ..addSpan(
+          new SourceMapSpan.identifier(
+              new SourceLocation(1,
+                  line: 1, column: 3, sourceUrl: "sdk/lib/async/foo.dart"),
+              "qux"),
+          new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+              new SourceLocation(12, line: 9, column: 1), "\n" * 4));
 
     var mapping = parseJson(builder.build("foo.dart.js.map"));
     var frame = _mapTrace(mapping, trace, sdkRoot: "sdk/").frames.first;
@@ -265,8 +248,8 @@
 
     test("nested closures", () {
       expect(_prettify("foo__closure.call"), equals("foo.<fn>.<fn>"));
-      expect(_prettify("foo____closure.call"),
-          equals("foo.<fn>.<fn>.<fn>.<fn>"));
+      expect(
+          _prettify("foo____closure.call"), equals("foo.<fn>.<fn>.<fn>.<fn>"));
     });
 
     test(".call", () {
@@ -299,20 +282,28 @@
 /// Like [mapStackTrace], but is guaranteed to return a [Trace] so it can be
 /// inspected.
 Trace _mapTrace(Mapping sourceMap, StackTrace stackTrace,
-    {bool minified: false, SyncPackageResolver packageResolver, sdkRoot,
+    {bool minified: false,
+    SyncPackageResolver packageResolver,
+    sdkRoot,
     packageRoot}) {
   return new Trace.from(mapStackTrace(sourceMap, stackTrace,
-      minified: minified, packageResolver: packageResolver, sdkRoot: sdkRoot,
+      minified: minified,
+      packageResolver: packageResolver,
+      sdkRoot: sdkRoot,
       packageRoot: packageRoot));
 }
 
 /// Like [mapStackTrace], but is guaranteed to return a [Chain] so it can be
 /// inspected.
 Chain _mapChain(Mapping sourceMap, StackTrace stackTrace,
-    {bool minified: false, SyncPackageResolver packageResolver, sdkRoot,
+    {bool minified: false,
+    SyncPackageResolver packageResolver,
+    sdkRoot,
     packageRoot}) {
   return new Chain.forTrace(mapStackTrace(sourceMap, stackTrace,
-      minified: minified, packageResolver: packageResolver, sdkRoot: sdkRoot,
+      minified: minified,
+      packageResolver: packageResolver,
+      sdkRoot: sdkRoot,
       packageRoot: packageRoot));
 }
 
