[lldb][NFC] Refactor Fix-It filter for warnings
authorRaphael Isemann <teemperor@gmail.com>
Mon, 30 Mar 2020 09:52:20 +0000 (11:52 +0200)
committerRaphael Isemann <teemperor@gmail.com>
Mon, 30 Mar 2020 12:01:16 +0000 (14:01 +0200)
LLDB only automatically applies Fix-Its from errors, but not from warnings.

Currently we only store Fix-Its from errors and then later apply all Fix-Its
we stored. This moves the filter to the application phase, so that we now
store *all* Fix-Its but only apply Fix-Its from errors later on.

This is NFC preparation for an upcoming patch.

lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp

index e5de4b4..b3880ce 100644 (file)
@@ -214,16 +214,12 @@ public:
       auto new_diagnostic = std::make_unique<ClangDiagnostic>(
           stripped_output, severity, Info.getID());
 
-      // Don't store away warning fixits, since the compiler doesn't have
-      // enough context in an expression for the warning to be useful.
       // FIXME: Should we try to filter out FixIts that apply to our generated
       // code, and not the user's expression?
-      if (severity == eDiagnosticSeverityError) {
-        for (const clang::FixItHint &fixit : Info.getFixItHints()) {
-          if (fixit.isNull())
-            continue;
-          new_diagnostic->AddFixitHint(fixit);
-        }
+      for (const clang::FixItHint &fixit : Info.getFixItHints()) {
+        if (fixit.isNull())
+          continue;
+        new_diagnostic->AddFixitHint(fixit);
       }
 
       m_manager->AddDiagnostic(std::move(new_diagnostic));
@@ -1127,6 +1123,10 @@ bool ClangExpressionParser::RewriteExpression(
       continue;
     if (!diagnostic->HasFixIts())
       continue;
+    // Don't apply warning Fix-Its, since the compiler doesn't have enough
+    // context in an expression for the warning to be useful.
+    if (diagnostic->GetSeverity() != eDiagnosticSeverityError)
+      continue;
     for (const FixItHint &fixit : diagnostic->FixIts())
       ApplyFixIt(fixit, commit);
   }