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 5f2e759..7164122 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -1019,9 +1019,18 @@
   }
 
   bool _shouldSendError(protocol.AnalysisError error) {
+    // Non-TODOs are always shown.
     if (error.type.name != ErrorType.TODO.name) {
       return true;
     }
+
+    // TODOs that are upgraded from INFO are always shown.
+    if (error.severity.name != ErrorSeverity.INFO.name) {
+      return true;
+    }
+
+    // Otherwise, show TODOs based on client configuration (either showing all,
+    // or specific types of TODOs).
     if (analysisServer.clientConfiguration.global.showAllTodos) {
       return true;
     }
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index a825b00..994943f 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -444,6 +444,31 @@
     await verifyDiagnostics('final dynamicbar;');
   }
 
+  Future<void> test_todos_asWarnings() async {
+    newFile(analysisOptionsPath, '''
+analyzer:
+  errors:
+    # Increase the severity of TODOs.
+    todo: warning
+    fixme: warning
+''');
+
+    const contents = '''
+    // TODO: This
+    // FIXME: This
+    String a = "";
+    ''';
+    newFile(mainFilePath, contents);
+
+    final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
+    // Don't set showTodos in config, because they should show even without this
+    // setting if they are upgraded to warnings/errors.
+    await initialize();
+    final initialDiagnostics = await firstDiagnosticsUpdate;
+    expect(initialDiagnostics, hasLength(2));
+    expect(initialDiagnostics!.map((d) => d.code).toSet(), {'todo', 'fixme'});
+  }
+
   Future<void> test_todos_boolean() async {
     // TODOs only show up if there's also some code in the file.
     const contents = '''
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 3756ce2..b5ff3d4 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -147,9 +147,10 @@
     );
 
     server.onErrors.listen((FileAnalysisErrors fileErrors) {
-      // Record the issues found (but filter out to do comments).
-      errors.addAll(fileErrors.errors
-          .where((AnalysisError error) => error.type != 'TODO'));
+      // Record the issues found (but filter out to do comments unless they've
+      // been upgraded from INFO).
+      errors.addAll(fileErrors.errors.where((AnalysisError error) =>
+          error.type != 'TODO' || error.severity != 'INFO'));
     });
 
     await server.start();
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index 0513849..31a4dd4 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -38,6 +38,21 @@
 }
 ''';
 
+const String _todoAsWarningAnalysisOptions = '''
+analyzer:
+  errors:
+    # Increase the severity of TODOs.
+    todo: warning
+    fixme: warning
+''';
+
+const String _todoAsWarningCodeSnippet = '''
+void main() {
+  // TODO: Implement this
+  // FIXME: Fix this
+}
+''';
+
 void defineAnalysisError() {
   group('contextMessages', () {
     test('none', () {
@@ -356,6 +371,33 @@
     expect(result.stdout, contains('1 issue found.'));
   });
 
+  test('TODOs hidden by default', () async {
+    p = project(
+      mainSrc: _todoAsWarningCodeSnippet,
+    );
+    var result = await p.run(['analyze', p.dirPath]);
+
+    expect(result.exitCode, equals(0));
+    expect(result.stderr, isEmpty);
+    expect(result.stdout, contains('No issues found!'));
+  });
+
+  test('TODOs shown if > INFO', () async {
+    p = project(
+      mainSrc: _todoAsWarningCodeSnippet,
+      analysisOptions: _todoAsWarningAnalysisOptions,
+    );
+    var result = await p.run(['analyze', p.dirPath]);
+
+    expect(result.exitCode, equals(0));
+    expect(result.stderr, isEmpty);
+    expect(result.stdout, contains('lib/main.dart:2:6 '));
+    expect(result.stdout, contains('TODO: Implement this - todo'));
+    expect(result.stdout, contains('lib/main.dart:3:6 '));
+    expect(result.stdout, contains('FIXME: Fix this - fixme'));
+    expect(result.stdout, contains('2 issues found.'));
+  });
+
   test('--sdk-path value does not exist', () async {
     p = project();
     var result = await p.run(['analyze', '--sdk-path=bad']);
diff --git a/tools/VERSION b/tools/VERSION
index 5affc37..0355602 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 142
+PRERELEASE 143
 PRERELEASE_PATCH 0
\ No newline at end of file
