diff --git a/CHANGELOG.md b/CHANGELOG.md
index e3e9f39..9e97e3a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 1.0.5
+
+* Support the latest version of `pkg/analyzer`.
+
 # 1.0.4
 
 * Ensure formatter throws an exception instead of introducing non-whitespace
diff --git a/bin/format.dart b/bin/format.dart
index 28dab2a..3899305 100644
--- a/bin/format.dart
+++ b/bin/format.dart
@@ -14,7 +14,7 @@
 import 'package:dart_style/src/source_code.dart';
 
 // Note: The following line of code is modified by tool/grind.dart.
-const version = "1.0.4";
+const version = "1.0.5";
 
 void main(List<String> args) {
   var parser = new ArgParser(allowTrailingOptions: true);
diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
index 0da685e..5023663 100644
--- a/lib/src/source_visitor.dart
+++ b/lib/src/source_visitor.dart
@@ -1198,14 +1198,14 @@
   visitGenericTypeAlias(GenericTypeAlias node) {
     visitNodes(node.metadata, between: newline, after: newline);
     _simpleStatement(node, () {
+      token(node.typedefKeyword);
+      space();
+
       // If the typedef's type parameters split, split after the "=" too,
       // mainly to ensure the function's type parameters and parameters get
       // end up on successive lines with the same indentation.
       builder.startRule();
 
-      token(node.typedefKeyword);
-      space();
-
       visit(node.name);
 
       visit(node.typeParameters);
diff --git a/pubspec.lock b/pubspec.lock
index 5ff28ee..e42179e 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -6,7 +6,7 @@
       name: analyzer
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.29.9"
+    version: "0.30.0"
   ansicolor:
     description:
       name: ansicolor
@@ -30,7 +30,7 @@
       name: barback
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.15.2+9"
+    version: "0.15.2+11"
   boolean_selector:
     description:
       name: boolean_selector
@@ -60,7 +60,7 @@
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.13.0"
+    version: "1.14.0"
   convert:
     description:
       name: convert
@@ -78,7 +78,13 @@
       name: csslib
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.13.4"
+    version: "0.13.5"
+  front_end:
+    description:
+      name: front_end
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.1.0-alpha.4"
   glob:
     description:
       name: glob
@@ -102,7 +108,7 @@
       name: http
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.11.3+12"
+    version: "0.11.3+13"
   http_multi_server:
     description:
       name: http_multi_server
@@ -127,6 +133,12 @@
       url: "https://pub.dartlang.org"
     source: hosted
     version: "0.6.1"
+  kernel:
+    description:
+      name: kernel
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.3.0-alpha.1"
   logging:
     description:
       name: logging
@@ -144,7 +156,7 @@
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.4"
+    version: "1.0.5"
   mime:
     description:
       name: mime
@@ -240,7 +252,7 @@
       name: source_maps
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.10.3"
+    version: "0.10.4"
   source_span:
     description:
       name: source_span
@@ -282,7 +294,7 @@
       name: test
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.20+3"
+    version: "0.12.20+12"
   typed_data:
     description:
       name: typed_data
diff --git a/pubspec.yaml b/pubspec.yaml
index ef5155b..4f212f0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,13 +1,13 @@
 name: dart_style
 # Note: See tool/grind.dart for how to bump the version.
-version: 1.0.4
+version: 1.0.5
 author: Dart Team <misc@dartlang.org>
 description: Opinionated, automatic Dart source code formatter.
 homepage: https://github.com/dart-lang/dart_style
 environment:
   sdk: ">=1.8.0 <2.0.0"
 dependencies:
-  analyzer: '^0.29.9'
+  analyzer: '^0.30.0'
   args: '>=0.12.1 <0.14.0'
   path: '>=1.0.0 <2.0.0'
   source_span: '>=1.1.1 <2.0.0'
diff --git a/test/regression/0600/0616.unit b/test/regression/0600/0616.unit
index 720a71e..2331b53 100644
--- a/test/regression/0600/0616.unit
+++ b/test/regression/0600/0616.unit
@@ -1,4 +1,4 @@
->>> (skip: published version of analyzer doesn't support function types yet)
+>>>
 import "package:expect/expect.dart";
 int Function() x = () => 42;
 int Function(int Function()) y = (int Function() x) => x();
diff --git a/test/regression/0600/0619.unit b/test/regression/0600/0619.unit
index 09a7a37..baac3bf 100644
--- a/test/regression/0600/0619.unit
+++ b/test/regression/0600/0619.unit
@@ -1,4 +1,4 @@
->>> (skip: published version of analyzer doesn't support function types yet)
+>>>
 typedef F<T> = void Function(T);
 <<<
 typedef F<T> = void Function(T);
\ No newline at end of file
diff --git a/test/splitting/members.unit b/test/splitting/members.unit
index ebca8c5..ecde98f 100644
--- a/test/splitting/members.unit
+++ b/test/splitting/members.unit
@@ -26,7 +26,7 @@
   VeryLongTypeAnnotation
       set veryLongSetter(v) {}
 }
->>> do not split after "covariant" in field (at least for now) (skip: published version of analyzer doesn't support 'covariant yet')
+>>> do not split after "covariant" in field (at least for now)
 class Foo {
   covariant var soMuchSoVeryLongFieldNameHere;
   covariant VeryLongTypeAnnotation field;
diff --git a/test/splitting/parameters.unit b/test/splitting/parameters.unit
index ccf01fd..c41e857 100644
--- a/test/splitting/parameters.unit
+++ b/test/splitting/parameters.unit
@@ -14,7 +14,7 @@
 method(int firstArgument,
         int argumentTwo) =>
     "very long body that must wrap";
->>> split before "covariant" (skip: published version of analyzer doesn't support 'covariant yet')
+>>> split before "covariant"
 class A {
   longMethod(covariant parameterNameHere) {}
 }
@@ -23,7 +23,7 @@
   longMethod(
       covariant parameterNameHere) {}
 }
->>> split before "covariant" with multiple parameters (skip: published version of analyzer doesn't support 'covariant yet')
+>>> split before "covariant" with multiple parameters
 class A {
   longMethod(covariant first, second, covariant int third(parameter), fourth) {}
 }
@@ -35,14 +35,15 @@
       covariant int third(parameter),
       fourth) {}
 }
->>> never split after "covariant" (at least for now) (skip: published version of analyzer doesn't support 'covariant yet')
+>>> never split after "covariant" (at least for now)
 class A {
   longMethod(covariant int veryLongParameterNameWow) {}
 }
 <<<
 class A {
   longMethod(
-      covariant int veryLongParameterNameWow) {}
+      covariant int
+          veryLongParameterNameWow) {}
 }
 >>> split between field type and name
 class Foo {
diff --git a/test/splitting/typedef.unit b/test/splitting/typedef.unit
index 3d09123..aa0760f 100644
--- a/test/splitting/typedef.unit
+++ b/test/splitting/typedef.unit
@@ -1,10 +1,10 @@
 40 columns                              |
->>> split type parameters (skip: published version of analyzer doesn't support function types yet)
+>>> split type parameters
 typedef G = T Function<TypeOne, TypeTwo, TypeThree>();
 <<<
 typedef G = T Function<TypeOne, TypeTwo,
     TypeThree>();
->>> split all type parameters (skip: published version of analyzer doesn't support function types yet)
+>>> split all type parameters
 typedef G = T Function<TypeOne, TypeTwo, TypeThree, TypeFour, TypeFive, TypeSix>();
 <<<
 typedef G = T Function<
@@ -14,17 +14,17 @@
     TypeFour,
     TypeFive,
     TypeSix>();
->>> split type and value parameters (skip: published version of analyzer doesn't support function types yet)
+>>> split type and value parameters
 typedef G = T Function<TypeOne, TypeTwo, TypeThree>(TypeOne one, TypeTwo two, TypeThree three);
 <<<
 typedef G = T Function<TypeOne, TypeTwo,
         TypeThree>(TypeOne one,
     TypeTwo two, TypeThree three);
->>> generic typedef parameters on one line (skip: published version of analyzer doesn't support function types yet)
+>>> generic typedef parameters on one line
 typedef Foo<T, S> = Function();
 <<<
 typedef Foo<T, S> = Function();
->>> generic typedef parameters that split (skip: published version of analyzer doesn't support function types yet)
+>>> generic typedef parameters that split
 typedef LongfunctionType<First, Second, Third, Fourth, Fifth, Sixth> = Function(First first, Second second, Third third, Fourth fourth);
 <<<
 typedef LongfunctionType<First, Second,
@@ -34,7 +34,7 @@
         Second second,
         Third third,
         Fourth fourth);
->>> both type parameter lists split (skip: published version of analyzer doesn't support function types yet)
+>>> both type parameter lists split
 typedef LongfunctionType<First, Second, Third, Fourth, Fifth, Sixth> = Function<Seventh>(First first, Second second, Third third, Fourth fourth);
 <<<
 typedef LongfunctionType<First, Second,
@@ -44,7 +44,7 @@
         Second second,
         Third third,
         Fourth fourth);
->>> all three parameter lists split (skip: published version of analyzer doesn't support function types yet)
+>>> all three parameter lists split
 typedef LongfunctionType<First, Second, Third, Fourth, Fifth, Sixth> = Function<Seventh, Eighth, Ninth, Tenth, Eleventh, Twelfth, Thirteenth>(First first, Second second, Third third, Fourth fourth);
 <<<
 typedef LongfunctionType<First, Second,
diff --git a/test/whitespace/classes.unit b/test/whitespace/classes.unit
index 3e088fa..968e422 100644
--- a/test/whitespace/classes.unit
+++ b/test/whitespace/classes.unit
@@ -100,7 +100,7 @@
   set g(value) => null;
   var h = 1;
 }
->>> covariant field (skip: published version of analyzer doesn't support 'covariant yet')
+>>>
 class Foo {
  covariant    var bar;
   covariant    int baz;
diff --git a/test/whitespace/metadata.unit b/test/whitespace/metadata.unit
index ce92c11..ac0525c 100644
--- a/test/whitespace/metadata.unit
+++ b/test/whitespace/metadata.unit
@@ -254,7 +254,7 @@
     @Annotation
     @VeryLongMetadataAnnotation
         covariant longParameter) {}
->>> metadata on function typedef (skip: published version of analyzer doesn't support function types yet)
+>>> metadata on function typedef
 @foo typedef Fn = Function();
 <<<
 @foo
diff --git a/test/whitespace/methods.unit b/test/whitespace/methods.unit
index 35c09ca..5573794 100644
--- a/test/whitespace/methods.unit
+++ b/test/whitespace/methods.unit
@@ -35,7 +35,7 @@
     return file;
   }
 }
->>> covariant (skip: published version of analyzer doesn't support 'covariant yet')
+>>> covariant
 class A {
   pos(    covariant  int a,covariant    b  );
   opt([ covariant int a,covariant    b  ]);
@@ -49,7 +49,7 @@
   named({covariant int a, covariant b});
   fn(covariant int f(bool b));
 }
->>> covariant in initializing formal (not valid, but dartfmt should accept) (skip: published version of analyzer doesn't support 'covariant yet')
+>>> covariant in initializing formal (not valid, but dartfmt should accept)
 class A {
   A(   covariant   this.foo);
 }
diff --git a/test/whitespace/typedef.unit b/test/whitespace/typedef.unit
index 40f982d..71d697c 100644
--- a/test/whitespace/typedef.unit
+++ b/test/whitespace/typedef.unit
@@ -3,21 +3,21 @@
 typedef Foo  <  T  ,S  >(T t,S s);
 <<<
 typedef Foo<T, S>(T t, S s);
->>> non-generic in typedef (skip: published version of analyzer doesn't support function types yet)
+>>> non-generic in typedef
 typedef   SomeFunc=ReturnType  Function(int param,   double other);
 <<<
 typedef SomeFunc = ReturnType Function(
     int param, double other);
->>> generic in typedef (skip: published version of analyzer doesn't support function types yet)
+>>> generic in typedef
 typedef Generic = T Function<T>(T param, double other);
 <<<
 typedef Generic = T Function<T>(
     T param, double other);
->>> no return type (skip: published version of analyzer doesn't support function types yet)
+>>> no return type
 typedef SomeFunc = Function();
 <<<
 typedef SomeFunc = Function();
->>> nested (skip: published version of analyzer doesn't support function types yet)
+>>> nested
 typedef SomeFunc = Function(int first, Function(int first, bool second, String third) second, String third);
 <<<
 typedef SomeFunc = Function(
@@ -26,15 +26,15 @@
             String third)
         second,
     String third);
->>> without param names (skip: published version of analyzer doesn't support function types yet)
+>>> without param names
 typedef F = Function(int, bool, String);
 <<<
 typedef F = Function(int, bool, String);
->>> generic (skip: published version of analyzer doesn't support function types yet)
+>>> generic
 typedef    Foo < A ,B>=Function ( A a,   B b );
 <<<
 typedef Foo<A, B> = Function(A a, B b);
->>> generic function (skip: published version of analyzer doesn't support function types yet)
+>>> generic function
 typedef    Foo  =Function  < A ,B  >   ( A a,B b );
 <<<
 typedef Foo = Function<A, B>(A a, B b);
\ No newline at end of file
