validate incompatible rules (#1965)

diff --git a/test/all.dart b/test/all.dart
index e797842..95ae5f4 100644
--- a/test/all.dart
+++ b/test/all.dart
@@ -13,7 +13,7 @@
 import 'utils_test.dart' as utils_test;
 import 'validate_format_test.dart' as validate_format;
 import 'validate_headers_test.dart' as validate_headers;
-import 'validate_metadata.dart' as validate_metadata;
+import 'validate_incompatible_rules.dart' as validate_incompatible_rules;
 import 'version_test.dart' as version_test;
 
 void main() {
@@ -28,6 +28,6 @@
   utils_test.main();
   validate_format.main();
   validate_headers.main();
-  validate_metadata.main();
+  validate_incompatible_rules.main();
   version_test.main();
 }
diff --git a/test/validate_incompatible_rules.dart b/test/validate_incompatible_rules.dart
new file mode 100644
index 0000000..30634f3
--- /dev/null
+++ b/test/validate_incompatible_rules.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:linter/src/analyzer.dart';
+import 'package:linter/src/rules.dart';
+import 'package:test/test.dart';
+
+void main() {
+  group('check for incompatible rules:', () {
+    registerLintRules();
+    for (var rule in Analyzer.facade.registeredRules) {
+      for (var incompatibleRule in rule.incompatibleRules) {
+        test(rule.name, () async {
+          var referencedRule = Analyzer.facade.registeredRules
+              .firstWhere((r) => r.name == incompatibleRule);
+          expect(referencedRule, isNotNull,
+              reason:
+                  'No rule found for id: $incompatibleRule (check for typo?)');
+          expect(referencedRule.incompatibleRules, contains(rule.name),
+              reason:
+                  '$referencedRule should define ${rule.name} in `incompatibleRules` but does not.');
+        });
+      }
+    }
+  });
+}
diff --git a/test/validate_metadata.dart b/test/validate_metadata.dart
deleted file mode 100644
index 5be62fa..0000000
--- a/test/validate_metadata.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-void main() {
-// todo (pq): re-introduce check when analyzer >0.39.3-dev is published
-//  group('check for incompatible rules:', () {
-//    registerLintRules();
-//    for (var rule in Analyzer.facade.registeredRules) {
-//      test(rule.name, () async {
-//        for (var incompatibleRule in lintDetail.incompatibleRules) {
-//          final ruleDetail = lintCache.findDetailsById(incompatibleRule);
-//          expect(ruleDetail, isNotNull,
-//              reason:
-//                  'No rule found for id: $incompatibleRule (check for typo?)');
-//          expect(ruleDetail.incompatibleRules, contains(lintDetail.id),
-//              reason:
-//                  '${ruleDetail.id} should declare ${lintDetail.id} as `@IncompatibleWith` but does not.');
-//        }
-//      });
-//    }
-//  });
-}