diff --git a/redfish-core/include/dbus_log_watcher.hpp b/redfish-core/include/dbus_log_watcher.hpp
index 6c0f2e0..a9682a0 100644
--- a/redfish-core/include/dbus_log_watcher.hpp
+++ b/redfish-core/include/dbus_log_watcher.hpp
@@ -12,9 +12,9 @@
     DbusEventLogMonitor();
     sdbusplus::bus::match_t dbusEventLogMonitor;
 
-    static bool
-        eventLogObjectFromDBus(const dbus::utility::DBusPropertiesMap& map,
-                               EventLogObjectsType& event);
+    static bool eventLogObjectFromDBus(
+        const dbus::utility::DBusPropertiesMap& map,
+        EventLogObjectsType& event);
 };
 
 class DbusTelemetryMonitor
diff --git a/redfish-core/include/error_messages.hpp b/redfish-core/include/error_messages.hpp
index 4307fe6..9e1ddb1 100644
--- a/redfish-core/include/error_messages.hpp
+++ b/redfish-core/include/error_messages.hpp
@@ -807,8 +807,8 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ResourceAtUriInUnknownFormat formatted to JSON */
-nlohmann::json
-    resourceAtUriInUnknownFormat(const boost::urls::url_view_base& arg1);
+nlohmann::json resourceAtUriInUnknownFormat(
+    const boost::urls::url_view_base& arg1);
 
 void resourceAtUriInUnknownFormat(crow::Response& res,
                                   const boost::urls::url_view_base& arg1);
@@ -837,8 +837,8 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message CouldNotEstablishConnection formatted to JSON */
-nlohmann::json
-    couldNotEstablishConnection(const boost::urls::url_view_base& arg1);
+nlohmann::json couldNotEstablishConnection(
+    const boost::urls::url_view_base& arg1);
 
 void couldNotEstablishConnection(crow::Response& res,
                                  const boost::urls::url_view_base& arg1);
@@ -1151,8 +1151,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ActionParameterValueConflict formatted to JSON */
-nlohmann::json
-    actionParameterValueConflict(std::string_view arg1, std::string_view arg2);
+nlohmann::json actionParameterValueConflict(std::string_view arg1,
+                                            std::string_view arg2);
 
 void actionParameterValueConflict(crow::Response& res, std::string_view arg1,
                                   std::string_view arg2);
@@ -1448,8 +1448,8 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message GenerateSecretKeyRequired formatted to JSON */
-nlohmann::json
-    generateSecretKeyRequired(const boost::urls::url_view_base& arg1);
+nlohmann::json generateSecretKeyRequired(
+    const boost::urls::url_view_base& arg1);
 
 void generateSecretKeyRequired(crow::Response& res,
                                const boost::urls::url_view_base& arg1);
diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index a5c22f4..5f29ca2 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -413,8 +413,8 @@
         return subValue;
     }
 
-    std::string
-        addSubscriptionInternal(const std::shared_ptr<Subscription>& subValue)
+    std::string addSubscriptionInternal(
+        const std::shared_ptr<Subscription>& subValue)
     {
         std::uniform_int_distribution<uint32_t> dist(0);
         bmcweb::OpenSSLGenerator gen;
@@ -458,9 +458,9 @@
         return id;
     }
 
-    std::string
-        addSSESubscription(const std::shared_ptr<Subscription>& subValue,
-                           std::string_view lastEventId)
+    std::string addSSESubscription(
+        const std::shared_ptr<Subscription>& subValue,
+        std::string_view lastEventId)
     {
         std::string id = addSubscriptionInternal(subValue);
 
@@ -497,8 +497,8 @@
         return id;
     }
 
-    std::string
-        addPushSubscription(const std::shared_ptr<Subscription>& subValue)
+    std::string addPushSubscription(
+        const std::shared_ptr<Subscription>& subValue)
     {
         std::string id = addSubscriptionInternal(subValue);
         subValue->deleter = [id]() {
@@ -595,8 +595,8 @@
         return true;
     }
 
-    static void
-        sendEventsToSubs(const std::vector<EventLogObjectsType>& eventRecords)
+    static void sendEventsToSubs(
+        const std::vector<EventLogObjectsType>& eventRecords)
     {
         for (const auto& it :
              EventServiceManager::getInstance().subscriptionsMap)
diff --git a/redfish-core/include/privileges.hpp b/redfish-core/include/privileges.hpp
index 970946a..264a743 100644
--- a/redfish-core/include/privileges.hpp
+++ b/redfish-core/include/privileges.hpp
@@ -146,8 +146,8 @@
      * the setSinglePrivilege is called, or the Privilege structure is destroyed
      *
      */
-    std::vector<std::string>
-        getActivePrivilegeNames(const PrivilegeType type) const
+    std::vector<std::string> getActivePrivilegeNames(
+        const PrivilegeType type) const
     {
         std::vector<std::string> activePrivileges;
 
diff --git a/redfish-core/include/query.hpp b/redfish-core/include/query.hpp
index 6b1e4d6..cbe84ab 100644
--- a/redfish-core/include/query.hpp
+++ b/redfish-core/include/query.hpp
@@ -182,9 +182,9 @@
 }
 
 // Sets up the Redfish Route. All parameters are handled by the default handler.
-[[nodiscard]] inline bool
-    setUpRedfishRoute(crow::App& app, const crow::Request& req,
-                      const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+[[nodiscard]] inline bool setUpRedfishRoute(
+    crow::App& app, const crow::Request& req,
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     // This route |delegated| is never used
     query_param::Query delegated;
diff --git a/redfish-core/include/redfish_aggregator.hpp b/redfish-core/include/redfish_aggregator.hpp
index 9535122..26ff934 100644
--- a/redfish-core/include/redfish_aggregator.hpp
+++ b/redfish-core/include/redfish_aggregator.hpp
@@ -573,9 +573,9 @@
         Resource,
     };
 
-    static void
-        startAggregation(AggregationType aggType, const crow::Request& thisReq,
-                         const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+    static void startAggregation(
+        AggregationType aggType, const crow::Request& thisReq,
+        const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
     {
         if (thisReq.method() != boost::beast::http::verb::get)
         {
@@ -921,10 +921,10 @@
 
     // Processes the response returned by a satellite BMC and loads its
     // contents into asyncResp
-    static void
-        processResponse(std::string_view prefix,
-                        const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                        crow::Response& resp)
+    static void processResponse(
+        std::string_view prefix,
+        const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+        crow::Response& resp)
     {
         // 429 and 502 mean we didn't actually send the request so don't
         // overwrite the response headers in that case
@@ -1247,9 +1247,9 @@
     // Entry point to Redfish Aggregation
     // Returns Result stating whether or not we still need to locally handle the
     // request
-    static Result
-        beginAggregation(const crow::Request& thisReq,
-                         const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+    static Result beginAggregation(
+        const crow::Request& thisReq,
+        const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
     {
         using crow::utility::OrMorePaths;
         using crow::utility::readUrlSegments;
diff --git a/redfish-core/include/registries_selector.hpp b/redfish-core/include/registries_selector.hpp
index 969589b..01160b7 100644
--- a/redfish-core/include/registries_selector.hpp
+++ b/redfish-core/include/registries_selector.hpp
@@ -51,8 +51,8 @@
     return std::nullopt;
 }
 
-inline std::span<const MessageEntry>
-    getRegistryFromPrefix(std::string_view registryName)
+inline std::span<const MessageEntry> getRegistryFromPrefix(
+    std::string_view registryName)
 {
     if (base::header.registryPrefix == registryName)
     {
diff --git a/redfish-core/include/resource_messages.hpp b/redfish-core/include/resource_messages.hpp
index 1665810..0c5fc6a 100644
--- a/redfish-core/include/resource_messages.hpp
+++ b/redfish-core/include/resource_messages.hpp
@@ -40,8 +40,8 @@
 nlohmann::json resourceErrorThresholdExceeded(std::string_view arg1,
                                               std::string_view arg2);
 
-nlohmann::json
-    resourceErrorThresholdCleared(std::string_view arg1, std::string_view arg2);
+nlohmann::json resourceErrorThresholdCleared(std::string_view arg1,
+                                             std::string_view arg2);
 
 nlohmann::json resourceWarningThresholdExceeded(std::string_view arg1,
                                                 std::string_view arg2);
@@ -52,11 +52,11 @@
 nlohmann::json resourceStatusChangedOK(std::string_view arg1,
                                        std::string_view arg2);
 
-nlohmann::json
-    resourceStatusChangedWarning(std::string_view arg1, std::string_view arg2);
+nlohmann::json resourceStatusChangedWarning(std::string_view arg1,
+                                            std::string_view arg2);
 
-nlohmann::json
-    resourceStatusChangedCritical(std::string_view arg1, std::string_view arg2);
+nlohmann::json resourceStatusChangedCritical(std::string_view arg1,
+                                             std::string_view arg2);
 
 nlohmann::json resourceStateChanged(std::string_view arg1,
                                     std::string_view arg2);
diff --git a/redfish-core/include/snmp_trap_event_clients.hpp b/redfish-core/include/snmp_trap_event_clients.hpp
index 4f6e1e6..4a799b7 100644
--- a/redfish-core/include/snmp_trap_event_clients.hpp
+++ b/redfish-core/include/snmp_trap_event_clients.hpp
@@ -60,9 +60,9 @@
         boost::urls::format("snmp://{}:{}", address, port);
 }
 
-inline void
-    getSnmpTrapClientdata(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                          const std::string& id, const std::string& objectPath)
+inline void getSnmpTrapClientdata(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, const std::string& id,
+    const std::string& objectPath)
 {
     asyncResp->res.jsonValue["@odata.type"] =
         "#EventDestination.v1_8_0.EventDestination";
@@ -175,9 +175,9 @@
     messages::created(asyncResp->res);
 }
 
-inline void
-    addSnmpTrapClient(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                      const std::string& host, uint16_t snmpTrapPort)
+inline void addSnmpTrapClient(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::string& host, uint16_t snmpTrapPort)
 {
     crow::connections::systemBus->async_method_call(
         [asyncResp,
@@ -205,9 +205,9 @@
     asyncResp->res.jsonValue["Members@odata.count"] = memberArray.size();
 }
 
-inline void
-    deleteSnmpTrapClient(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                         const std::string& param)
+inline void deleteSnmpTrapClient(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::string& param)
 {
     std::string_view snmpTrapId = param;
 
diff --git a/redfish-core/include/utils/json_utils.hpp b/redfish-core/include/utils/json_utils.hpp
index deb82d0..14160b7 100644
--- a/redfish-core/include/utils/json_utils.hpp
+++ b/redfish-core/include/utils/json_utils.hpp
@@ -651,8 +651,8 @@
                           std::forward<UnpackTypes&&>(in)...);
 }
 
-inline std::optional<nlohmann::json::object_t>
-    readJsonPatchHelper(const crow::Request& req, crow::Response& res)
+inline std::optional<nlohmann::json::object_t> readJsonPatchHelper(
+    const crow::Request& req, crow::Response& res)
 {
     nlohmann::json jsonRequest;
     if (!json_util::processJsonFromRequest(res, req, jsonRequest))
diff --git a/redfish-core/include/utils/pcie_util.hpp b/redfish-core/include/utils/pcie_util.hpp
index 059abbb..6b3426a 100644
--- a/redfish-core/include/utils/pcie_util.hpp
+++ b/redfish-core/include/utils/pcie_util.hpp
@@ -35,9 +35,9 @@
  * @return void
  */
 
-inline void
-    getPCIeDeviceList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                      const nlohmann::json::json_pointer& jsonKeyName)
+inline void getPCIeDeviceList(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const nlohmann::json::json_pointer& jsonKeyName)
 {
     static constexpr std::array<std::string_view, 1> pcieDeviceInterface = {
         "xyz.openbmc_project.Inventory.Item.PCIeDevice"};
@@ -49,8 +49,8 @@
         "/xyz/openbmc_project/inventory", jsonKeyName);
 }
 
-inline std::optional<pcie_slots::SlotTypes>
-    dbusSlotTypeToRf(const std::string& slotType)
+inline std::optional<pcie_slots::SlotTypes> dbusSlotTypeToRf(
+    const std::string& slotType)
 {
     if (slotType ==
         "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.FullLength")
@@ -103,8 +103,8 @@
     return pcie_slots::SlotTypes::Invalid;
 }
 
-inline std::optional<pcie_device::PCIeTypes>
-    redfishPcieGenerationFromDbus(const std::string& generationInUse)
+inline std::optional<pcie_device::PCIeTypes> redfishPcieGenerationFromDbus(
+    const std::string& generationInUse)
 {
     if (generationInUse ==
         "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Gen1")
diff --git a/redfish-core/include/utils/query_param.hpp b/redfish-core/include/utils/query_param.hpp
index 107f659..9b53f54 100644
--- a/redfish-core/include/utils/query_param.hpp
+++ b/redfish-core/include/utils/query_param.hpp
@@ -382,8 +382,8 @@
     return query.filter.has_value();
 }
 
-inline std::optional<Query>
-    parseParameters(boost::urls::params_view urlParams, crow::Response& res)
+inline std::optional<Query> parseParameters(boost::urls::params_view urlParams,
+                                            crow::Response& res)
 {
     Query ret{};
     for (const boost::urls::params_view::value_type& it : urlParams)
@@ -811,10 +811,10 @@
     }
 
   private:
-    static void
-        placeResultStatic(const std::shared_ptr<MultiAsyncResp>& multi,
-                          const nlohmann::json::json_pointer& locationToPlace,
-                          crow::Response& res)
+    static void placeResultStatic(
+        const std::shared_ptr<MultiAsyncResp>& multi,
+        const nlohmann::json::json_pointer& locationToPlace,
+        crow::Response& res)
     {
         multi->placeResult(locationToPlace, res);
     }
@@ -940,10 +940,10 @@
     recursiveSelect(intermediateResponse.jsonValue, trieRoot);
 }
 
-inline void
-    processAllParams(crow::App& app, const Query& query, const Query& delegated,
-                     std::function<void(crow::Response&)>& completionHandler,
-                     crow::Response& intermediateResponse)
+inline void processAllParams(
+    crow::App& app, const Query& query, const Query& delegated,
+    std::function<void(crow::Response&)>& completionHandler,
+    crow::Response& intermediateResponse)
 {
     if (!completionHandler)
     {
diff --git a/redfish-core/include/utils/sensor_utils.hpp b/redfish-core/include/utils/sensor_utils.hpp
index eaf8ade..733e95a 100644
--- a/redfish-core/include/utils/sensor_utils.hpp
+++ b/redfish-core/include/utils/sensor_utils.hpp
@@ -149,8 +149,8 @@
     return std::format("{}_{}", normalizedType, sensorName);
 }
 
-inline std::pair<std::string, std::string>
-    splitSensorNameAndType(std::string_view sensorId)
+inline std::pair<std::string, std::string> splitSensorNameAndType(
+    std::string_view sensorId)
 {
     size_t index = sensorId.find('_');
     if (index == std::string::npos)
diff --git a/redfish-core/include/utils/sw_utils.hpp b/redfish-core/include/utils/sw_utils.hpp
index 7a765c1..a803b51 100644
--- a/redfish-core/include/utils/sw_utils.hpp
+++ b/redfish-core/include/utils/sw_utils.hpp
@@ -42,8 +42,8 @@
 constexpr const char* bmcPurpose =
     "xyz.openbmc_project.Software.Version.VersionPurpose.BMC";
 
-inline std::optional<sdbusplus::message::object_path>
-    getFunctionalSoftwarePath(const std::string& swType)
+inline std::optional<sdbusplus::message::object_path> getFunctionalSoftwarePath(
+    const std::string& swType)
 {
     if (swType == bmcPurpose)
     {
@@ -452,10 +452,10 @@
     }
 }
 
-inline void
-    handleUpdateableObject(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                           const boost::system::error_code& ec,
-                           const dbus::utility::MapperGetObject& objectInfo)
+inline void handleUpdateableObject(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const boost::system::error_code& ec,
+    const dbus::utility::MapperGetObject& objectInfo)
 {
     if (ec)
     {
@@ -484,9 +484,9 @@
  * @param[i,o] asyncResp  Async response object
  * @param[i]   swId       The software ID
  */
-inline void
-    getSwUpdatableStatus(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                         const std::shared_ptr<std::string>& swId)
+inline void getSwUpdatableStatus(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::shared_ptr<std::string>& swId)
 {
     if constexpr (BMCWEB_REDFISH_UPDATESERVICE_USE_DBUS)
     {
diff --git a/redfish-core/include/utils/telemetry_utils.hpp b/redfish-core/include/utils/telemetry_utils.hpp
index d822d74..df71027 100644
--- a/redfish-core/include/utils/telemetry_utils.hpp
+++ b/redfish-core/include/utils/telemetry_utils.hpp
@@ -44,8 +44,8 @@
     return {triggersPath / id};
 }
 
-inline std::optional<std::string>
-    getTriggerIdFromDbusPath(const std::string& dbusPath)
+inline std::optional<std::string> getTriggerIdFromDbusPath(
+    const std::string& dbusPath)
 {
     sdbusplus::message::object_path converted(dbusPath);
 
@@ -166,8 +166,8 @@
     return "";
 }
 
-inline std::optional<nlohmann::json::array_t>
-    toRedfishCollectionFunctions(std::span<const std::string> dbusEnums)
+inline std::optional<nlohmann::json::array_t> toRedfishCollectionFunctions(
+    std::span<const std::string> dbusEnums)
 {
     nlohmann::json::array_t redfishEnums;
     redfishEnums.reserve(dbusEnums.size());
