diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..0711aca
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,43 @@
+include: package:pedantic/analysis_options.yaml
+analyzer:
+  strong-mode:
+    implicit-casts: false
+linter:
+  rules:
+    - avoid_empty_else
+    - avoid_init_to_null
+    - avoid_null_checks_in_equality_operators
+    - avoid_unused_constructor_parameters
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    - constant_identifier_names
+    - control_flow_in_finally
+    - directives_ordering
+    - empty_catches
+    - empty_constructor_bodies
+    - empty_statements
+    - hash_and_equals
+    - implementation_imports
+    - iterable_contains_unrelated_type
+    - library_names
+    - library_prefixes
+    - list_remove_unrelated_type
+    - non_constant_identifier_names
+    - overridden_fields
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - prefer_equal_for_default_values
+    - prefer_final_fields
+    - prefer_generic_function_type_aliases
+    - prefer_is_not_empty
+    - slash_for_doc_comments
+    - test_types_in_equals
+    - throw_in_finally
+    - type_init_formals
+    - unnecessary_brace_in_string_interps
+    - unnecessary_const
+    - unnecessary_new
+    - unrelated_type_equality_checks
+    - valid_regexps
diff --git a/lib/shelf_web_socket.dart b/lib/shelf_web_socket.dart
index 7ce32ee..ba689d8 100644
--- a/lib/shelf_web_socket.dart
+++ b/lib/shelf_web_socket.dart
@@ -45,15 +45,9 @@
     {Iterable<String> protocols,
     Iterable<String> allowedOrigins,
     Duration pingInterval}) {
-  if (protocols != null) protocols = protocols.toSet();
-  if (allowedOrigins != null) {
-    allowedOrigins =
-        allowedOrigins.map((origin) => origin.toLowerCase()).toSet();
-  }
-
   if (onConnection is! _BinaryFunction) {
     if (protocols != null) {
-      throw new ArgumentError("If protocols is non-null, onConnection must "
+      throw ArgumentError("If protocols is non-null, onConnection must "
           "take two arguments, the WebSocket and the protocol.");
     }
 
@@ -61,7 +55,10 @@
     onConnection = (webSocket, _) => innerOnConnection(webSocket);
   }
 
-  return new WebSocketHandler(
-          onConnection, protocols, allowedOrigins, pingInterval)
-      .handle;
+  return WebSocketHandler(
+    onConnection,
+    protocols?.toSet(),
+    allowedOrigins?.map((origin) => origin.toLowerCase())?.toSet(),
+    pingInterval,
+  ).handle;
 }
diff --git a/lib/src/web_socket_handler.dart b/lib/src/web_socket_handler.dart
index 90b66e0..8762f0a 100644
--- a/lib/src/web_socket_handler.dart
+++ b/lib/src/web_socket_handler.dart
@@ -54,7 +54,7 @@
     if (key == null) return _badRequest('missing Sec-WebSocket-Key header.');
 
     if (!request.canHijack) {
-      throw new ArgumentError("webSocketHandler may only be used with a server "
+      throw ArgumentError("webSocketHandler may only be used with a server "
           "that supports request hijacking.");
     }
 
@@ -79,7 +79,7 @@
       sink.add("\r\n");
 
       _onConnection(
-          new WebSocketChannel(channel, pingInterval: _pingInterval), protocol);
+          WebSocketChannel(channel, pingInterval: _pingInterval), protocol);
     });
 
     // [request.hijack] is guaranteed to throw a [HijackException], so we'll
@@ -124,7 +124,7 @@
   Response _htmlResponse(int statusCode, String title, String message) {
     title = htmlEscape.convert(title);
     message = htmlEscape.convert(message);
-    return new Response(statusCode, body: """
+    return Response(statusCode, body: """
       <!doctype html>
       <html>
         <head><title>$title</title></head>
diff --git a/test/web_socket_test.dart b/test/web_socket_test.dart
index 43abce1..a640317 100644
--- a/test/web_socket_test.dart
+++ b/test/web_socket_test.dart
@@ -178,7 +178,7 @@
 }
 
 Matcher hasStatus(int status) => completion(predicate((response) {
-      expect(response, new TypeMatcher<http.Response>());
+      expect(response, TypeMatcher<http.Response>());
       expect(response.statusCode, equals(status));
       return true;
     }));
