diff --git a/pldmtool/pldm_base_cmd.cpp b/pldmtool/pldm_base_cmd.cpp
index cbc4d43..ef2a1a5 100644
--- a/pldmtool/pldm_base_cmd.cpp
+++ b/pldmtool/pldm_base_cmd.cpp
@@ -127,9 +127,10 @@
             bitfield8_t b = types[i / 8];
             if (b.byte & (1 << i % 8))
             {
-                auto it = std::find_if(
-                    pldmTypes.begin(), pldmTypes.end(),
-                    [i](const auto& typePair) { return typePair.second == i; });
+                auto it = std::find_if(pldmTypes.begin(), pldmTypes.end(),
+                                       [i](const auto& typePair) {
+                    return typePair.second == i;
+                });
                 if (it != pldmTypes.end())
                 {
                     jarray["PLDM Type"] = it->first;
@@ -175,9 +176,9 @@
         uint8_t cc = 0, transferFlag = 0;
         uint32_t transferHandle = 0;
         ver32_t version;
-        auto rc =
-            decode_get_version_resp(responsePtr, payloadLength, &cc,
-                                    &transferHandle, &transferFlag, &version);
+        auto rc = decode_get_version_resp(responsePtr, payloadLength, &cc,
+                                          &transferHandle, &transferFlag,
+                                          &version);
         if (rc != PLDM_SUCCESS || cc != PLDM_SUCCESS)
         {
             std::cerr << "Response Message Error: "
@@ -187,9 +188,10 @@
         char buffer[16] = {0};
         ver2str(&version, buffer, sizeof(buffer));
         ordered_json data;
-        auto it = std::find_if(
-            pldmTypes.begin(), pldmTypes.end(),
-            [&](const auto& typePair) { return typePair.second == pldmType; });
+        auto it = std::find_if(pldmTypes.begin(), pldmTypes.end(),
+                               [&](const auto& typePair) {
+            return typePair.second == pldmType;
+        });
 
         if (it != pldmTypes.end())
         {
@@ -265,8 +267,8 @@
                                         PLDM_GET_COMMANDS_REQ_BYTES);
         auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
         ver32_t version{0xFF, 0xFF, 0xFF, 0xFF};
-        auto rc =
-            encode_get_commands_req(instanceId, pldmType, version, request);
+        auto rc = encode_get_commands_req(instanceId, pldmType, version,
+                                          request);
         return {rc, requestMsg};
     }
 
@@ -291,9 +293,10 @@
     template <typename CommandMap>
     void printCommand(CommandMap& commandMap, int i, ordered_json& jarray)
     {
-        auto it = std::find_if(
-            commandMap.begin(), commandMap.end(),
-            [i](const auto& typePair) { return typePair.second == i; });
+        auto it = std::find_if(commandMap.begin(), commandMap.end(),
+                               [i](const auto& typePair) {
+            return typePair.second == i;
+        });
         if (it != commandMap.end())
         {
             jarray["PLDM Command Code"] = i;
@@ -346,13 +349,13 @@
     auto base = app.add_subcommand("base", "base type command");
     base->require_subcommand(1);
 
-    auto getPLDMTypes =
-        base->add_subcommand("GetPLDMTypes", "get pldm supported types");
+    auto getPLDMTypes = base->add_subcommand("GetPLDMTypes",
+                                             "get pldm supported types");
     commands.push_back(
         std::make_unique<GetPLDMTypes>("base", "GetPLDMTypes", getPLDMTypes));
 
-    auto getPLDMVersion =
-        base->add_subcommand("GetPLDMVersion", "get version of a certain type");
+    auto getPLDMVersion = base->add_subcommand("GetPLDMVersion",
+                                               "get version of a certain type");
     commands.push_back(std::make_unique<GetPLDMVersion>(
         "base", "GetPLDMVersion", getPLDMVersion));
 
