diff --git a/src/allowlist-filter.cpp b/src/allowlist-filter.cpp
index 844bf56..64f9cf5 100644
--- a/src/allowlist-filter.cpp
+++ b/src/allowlist-filter.cpp
@@ -276,7 +276,7 @@
         coreBIOSDone = std::get<bool>(v);
         log<level::INFO>("Read CoreBiosDone",
                          entry("VALUE=%d", static_cast<int>(coreBIOSDone)));
-        },
+    },
         coreBiosDoneService, coreBiosDonePath,
         "org.freedesktop.DBus.Properties", "Get", hostMiscIntf, "CoreBiosDone");
 }
@@ -293,7 +293,7 @@
             std::find_if(propertyList.begin(), propertyList.end(),
                          [](const std::pair<std::string, ipmi::Value>& prop) {
             return prop.first == "CoreBiosDone";
-            });
+        });
 
         if (it != propertyList.end())
         {
@@ -397,7 +397,7 @@
                                              std::get<1>(value),
                                              std::get<2>(first))
                    : first < value;
-        });
+    });
 
     // no special handling for non-system-interface channels
     if (!(request->ctx->channel == ipmi::channelSystemIface ||
diff --git a/src/appcommands.cpp b/src/appcommands.cpp
index 8f00e54..ab032c7 100644
--- a/src/appcommands.cpp
+++ b/src/appcommands.cpp
@@ -109,7 +109,7 @@
                     "BMC device state updated");
             }
         }
-        });
+    });
 
     return 0;
 }
diff --git a/src/biosconfigcommands.cpp b/src/biosconfigcommands.cpp
index 92b1f41..16621e7 100644
--- a/src/biosconfigcommands.cpp
+++ b/src/biosconfigcommands.cpp
@@ -417,7 +417,7 @@
 
                 phosphor::logging::log<phosphor::logging::level::INFO>(
                     "sendAllAttributes: send all attributes - done");
-                },
+            },
                 service, biosConfigBaseMgrPath,
                 "org.freedesktop.DBus.Properties", "Set", biosConfigIntf,
                 "BaseBIOSTable",
diff --git a/src/firmware-update.cpp b/src/firmware-update.cpp
index 7e8f82f..9bde818 100644
--- a/src/firmware-update.cpp
+++ b/src/firmware-update.cpp
@@ -403,7 +403,7 @@
                     fwUpdateState = fwStateUpdateSuccess;
                 }
             }
-            });
+        });
     }
     uint8_t activationTimerTimeout()
     {
@@ -471,7 +471,7 @@
                     "async_method_call error: activateImage failed");
                 return;
             }
-            },
+        },
             "xyz.openbmc_project.Software.BMC.Updater", objPath,
             "org.freedesktop.DBus.Properties", "Set",
             "xyz.openbmc_project.Software.Activation", "RequestedActivation",
diff --git a/src/sensorcommands.cpp b/src/sensorcommands.cpp
index 95bb491..26b289b 100644
--- a/src/sensorcommands.cpp
+++ b/src/sensorcommands.cpp
@@ -97,7 +97,7 @@
     sdrLastAdd = std::chrono::duration_cast<std::chrono::seconds>(
                      std::chrono::system_clock::now().time_since_epoch())
                      .count();
-    });
+});
 
 static sdbusplus::bus::match_t sensorRemoved(
     *getSdBus(),
@@ -108,7 +108,7 @@
     sdrLastRemove = std::chrono::duration_cast<std::chrono::seconds>(
                         std::chrono::system_clock::now().time_since_epoch())
                         .count();
-    });
+});
 
 // this keeps track of deassertions for sensor event status command. A
 // deasertion can only happen if an assertion was seen first.
@@ -156,7 +156,7 @@
             }
         }
     }
-    });
+});
 
 static void getSensorMaxMin(const SensorMap& sensorMap, double& max,
                             double& min)
diff --git a/src/storagecommands.cpp b/src/storagecommands.cpp
index c58f82f..21aabdb 100644
--- a/src/storagecommands.cpp
+++ b/src/storagecommands.cpp
@@ -730,7 +730,7 @@
         }
 
         return true;
-        });
+    });
 
     if (entity == entities.end())
     {
