Filter TODOs out of LSP diagnostics

Change-Id: I4a089be3919e0a2ed6c1e54e712ba7f1c9d835aa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105762
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index 301e631..de88f0f 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -32,6 +32,7 @@
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
 import 'package:analysis_server/src/utilities/null_string_sink.dart';
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
@@ -601,7 +602,9 @@
         final serverErrors = protocol.mapEngineErrors(
             result.session.analysisContext.analysisOptions,
             result.lineInfo,
-            result.errors,
+            result.errors
+                .where((e) => e.errorCode.type != ErrorType.TODO)
+                .toList(),
             toDiagnostic);
 
         analysisServer.publishDiagnostics(result.path, serverErrors);
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 06ba649..88a6e62 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -81,4 +81,19 @@
     // transmitted.
     expect(diagnostics, isNull);
   }
+
+  test_todos() async {
+    // TODOs only show up if there's also some code in the file.
+    const initialContents = '''
+    // TODO: This
+    String a = "";
+    ''';
+    newFile(mainFilePath, content: initialContents);
+
+    final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
+    await initialize();
+    final initialDiagnostics = await firstDiagnosticsUpdate;
+    // TODOs should not be sent by LSP.
+    expect(initialDiagnostics, hasLength(0));
+  }
 }