diff --git a/src/estoraged.cpp b/src/estoraged.cpp
index 95f3057..b604a7c 100644
--- a/src/estoraged.cpp
+++ b/src/estoraged.cpp
@@ -58,28 +58,26 @@
     volumeInterface->register_method(
         "FormatLuks", [this](const std::vector<uint8_t>& password,
                              Volume::FilesystemType type) {
-            this->formatLuks(password, type);
-        });
-    volumeInterface->register_method("Erase",
-                                     [this](Volume::EraseMethod eraseType) {
-        this->erase(eraseType);
+        this->formatLuks(password, type);
     });
+    volumeInterface->register_method(
+        "Erase",
+        [this](Volume::EraseMethod eraseType) { this->erase(eraseType); });
     volumeInterface->register_method("Lock", [this]() { this->lock(); });
-    volumeInterface->register_method("Unlock",
-                                     [this](std::vector<uint8_t>& password) {
-        this->unlock(password);
-    });
+    volumeInterface->register_method(
+        "Unlock",
+        [this](std::vector<uint8_t>& password) { this->unlock(password); });
     volumeInterface->register_method(
         "ChangePassword", [this](const std::vector<uint8_t>& oldPassword,
                                  const std::vector<uint8_t>& newPassword) {
-            this->changePassword(oldPassword, newPassword);
-        });
+        this->changePassword(oldPassword, newPassword);
+    });
     volumeInterface->register_property_r(
         "Locked", lockedProperty, sdbusplus::vtable::property_::emits_change,
         [this](bool& value) {
         value = this->isLocked();
         return value;
-        });
+    });
 
     /* Add Drive interface. */
     driveInterface = objectServer.add_interface(
@@ -94,7 +92,7 @@
         [this](bool& value) {
         value = this->isLocked();
         return value;
-        });
+    });
 
     driveInterface->register_property_r(
         "EncryptionStatus", encryptionStatus,
@@ -102,7 +100,7 @@
         [this](Drive::DriveEncryptionState& value) {
         value = this->findEncryptionStatus();
         return value;
-        });
+    });
 
     embeddedLocationInterface = objectServer.add_interface(
         objectPath, "xyz.openbmc_project.Inventory.Connector.Embedded");
diff --git a/src/getConfig.cpp b/src/getConfig.cpp
index 79579b1..f752b77 100644
--- a/src/getConfig.cpp
+++ b/src/getConfig.cpp
@@ -43,7 +43,7 @@
         }
 
         self->respData[path] = std::move(data);
-        },
+    },
         owner, path, "org.freedesktop.DBus.Properties", "GetAll",
         emmcConfigInterface);
 }
@@ -75,7 +75,7 @@
                 }
             }
         }
-        },
+    },
         mapper::busName, mapper::path, mapper::interface, mapper::subtree, "/",
         0, std::vector<const char*>(1, emmcConfigInterface));
 }
diff --git a/src/main.cpp b/src/main.cpp
index d278724..e5f9d09 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -102,7 +102,7 @@
                       "REDFISH_MESSAGE_ID",
                       std::string("OpenBMC.0.1.CreateStorageObjects"));
         }
-        });
+    });
     getter->getConfiguration();
 }
 
diff --git a/src/test/erase/pattern_test.cpp b/src/test/erase/pattern_test.cpp
index e8ea6ce..b3cdfee 100644
--- a/src/test/erase/pattern_test.cpp
+++ b/src/test/erase/pattern_test.cpp
@@ -112,47 +112,41 @@
     // test write pattern with short blocks
     EXPECT_CALL(mock, write(_))
         .WillOnce(Invoke([](std::span<const std::byte> x) {
-            std::copy_n(x.begin(), shortData1.size(), shortData1.begin());
-            return shortData1;
-        }))
-        .RetiresOnSaturation();
+        std::copy_n(x.begin(), shortData1.size(), shortData1.begin());
+        return shortData1;
+    })).RetiresOnSaturation();
     EXPECT_CALL(mock, write(_))
         .WillOnce(Invoke([](std::span<const std::byte> x) {
-            std::copy_n(x.begin(), restOfData.size(), restOfData.begin());
-            return restOfData;
-        }))
-        .RetiresOnSaturation();
+        std::copy_n(x.begin(), restOfData.size(), restOfData.begin());
+        return restOfData;
+    })).RetiresOnSaturation();
     EXPECT_CALL(mock, write(_))
         .WillOnce(Invoke([](std::span<const std::byte> x) {
-            std::copy_n(x.begin(), shortData2.size(), shortData2.begin());
-            return shortData2;
-        }))
-        .RetiresOnSaturation();
+        std::copy_n(x.begin(), shortData2.size(), shortData2.begin());
+        return shortData2;
+    })).RetiresOnSaturation();
 
     // test read pattern
     EXPECT_CALL(mock, read(_))
         .WillOnce(Invoke([](std::span<std::byte> x) {
-            std::copy_n(shortData1.begin(), shortData1.size(), x.data());
-            std::span ret(shortData1);
-            return ret;
-        }))
-        .RetiresOnSaturation();
+        std::copy_n(shortData1.begin(), shortData1.size(), x.data());
+        std::span ret(shortData1);
+        return ret;
+    })).RetiresOnSaturation();
 
     EXPECT_CALL(mock, read(_))
         .WillOnce(Invoke([](std::span<std::byte> x) {
-            std::copy_n(restOfData.begin(), restOfData.size(), x.data());
-            std::span ret(restOfData);
-            return ret;
-        }))
-        .RetiresOnSaturation();
+        std::copy_n(restOfData.begin(), restOfData.size(), x.data());
+        std::span ret(restOfData);
+        return ret;
+    })).RetiresOnSaturation();
 
     EXPECT_CALL(mock, read(_))
         .WillOnce(Invoke([](std::span<std::byte> x) {
-            std::copy_n(shortData2.begin(), shortData2.size(), x.data());
-            std::span ret(shortData2);
-            return ret;
-        }))
-        .RetiresOnSaturation();
+        std::copy_n(shortData2.begin(), shortData2.size(), x.data());
+        std::span ret(shortData2);
+        return ret;
+    })).RetiresOnSaturation();
 
     EXPECT_NO_THROW(pass.writePattern(size, mock));
     EXPECT_NO_THROW(pass.verifyPattern(size, mock));
