>>> (indent 2)
  Iterable<DeclarationMirror> _sortedLibraryDeclarations(LibraryMirror lib) =>
      lib.declarations.values
          .where((d) => d is ClassMirror || d is MethodMirror)
          .toList()
    ..sort((a, b) {
      if (a.runtimeType == b.runtimeType) {
        return _declarationName(a).compareTo(_declarationName(b));
      }
      if (a is MethodMirror && b is ClassMirror) return -1;
      if (a is ClassMirror && b is MethodMirror) return 1;
      return 0;
    });
<<<
  Iterable<DeclarationMirror> _sortedLibraryDeclarations(LibraryMirror lib) =>
      lib.declarations.values
          .where((d) => d is ClassMirror || d is MethodMirror)
          .toList()
        ..sort((a, b) {
          if (a.runtimeType == b.runtimeType) {
            return _declarationName(a).compareTo(_declarationName(b));
          }
          if (a is MethodMirror && b is ClassMirror) return -1;
          if (a is ClassMirror && b is MethodMirror) return 1;
          return 0;
        });