diff --git a/phosphor-regulators/src/actions/action_environment.hpp b/phosphor-regulators/src/actions/action_environment.hpp
index 265a7bf..f49219a 100644
--- a/phosphor-regulators/src/actions/action_environment.hpp
+++ b/phosphor-regulators/src/actions/action_environment.hpp
@@ -72,8 +72,7 @@
      */
     explicit ActionEnvironment(const IDMap& idMap, const std::string& deviceID,
                                Services& services) :
-        idMap{idMap},
-        deviceID{deviceID}, services{services}
+        idMap{idMap}, deviceID{deviceID}, services{services}
     {}
 
     /**
@@ -219,8 +218,8 @@
     {
         if (ruleDepth >= maxRuleDepth)
         {
-            throw std::runtime_error("Maximum rule depth exceeded by rule " +
-                                     ruleID + '.');
+            throw std::runtime_error(
+                "Maximum rule depth exceeded by rule " + ruleID + '.');
         }
         ++ruleDepth;
     }
diff --git a/phosphor-regulators/src/actions/compare_vpd_action.hpp b/phosphor-regulators/src/actions/compare_vpd_action.hpp
index 110b8b5..e8538f4 100644
--- a/phosphor-regulators/src/actions/compare_vpd_action.hpp
+++ b/phosphor-regulators/src/actions/compare_vpd_action.hpp
@@ -55,8 +55,7 @@
     explicit CompareVPDAction(const std::string& fru,
                               const std::string& keyword,
                               const std::vector<uint8_t>& value) :
-        fru{fru},
-        keyword{keyword}, value{value}
+        fru{fru}, keyword{keyword}, value{value}
     {}
 
     /**
diff --git a/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp b/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
index 0459880..e5aab39 100644
--- a/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
+++ b/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
@@ -56,8 +56,7 @@
      */
     explicit I2CCompareByteAction(uint8_t reg, uint8_t value,
                                   uint8_t mask = 0xFF) :
-        reg{reg},
-        value{value}, mask{mask}
+        reg{reg}, value{value}, mask{mask}
     {}
 
     /**
diff --git a/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp b/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp
index 2fdd5ff..ba8ab20 100644
--- a/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp
+++ b/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp
@@ -81,8 +81,7 @@
     explicit I2CCompareBytesAction(uint8_t reg,
                                    const std::vector<uint8_t>& values,
                                    const std::vector<uint8_t>& masks) :
-        reg{reg},
-        values{values}, masks{masks}
+        reg{reg}, values{values}, masks{masks}
     {
         // Values vector must not be empty
         if (values.size() < 1)
diff --git a/phosphor-regulators/src/actions/i2c_write_byte_action.hpp b/phosphor-regulators/src/actions/i2c_write_byte_action.hpp
index 3f9e1f6..4bc291f 100644
--- a/phosphor-regulators/src/actions/i2c_write_byte_action.hpp
+++ b/phosphor-regulators/src/actions/i2c_write_byte_action.hpp
@@ -55,8 +55,7 @@
      */
     explicit I2CWriteByteAction(uint8_t reg, uint8_t value,
                                 uint8_t mask = 0xFF) :
-        reg{reg},
-        value{value}, mask{mask}
+        reg{reg}, value{value}, mask{mask}
     {}
 
     /**
diff --git a/phosphor-regulators/src/actions/i2c_write_bytes_action.hpp b/phosphor-regulators/src/actions/i2c_write_bytes_action.hpp
index edf2b2e..fdb5887 100644
--- a/phosphor-regulators/src/actions/i2c_write_bytes_action.hpp
+++ b/phosphor-regulators/src/actions/i2c_write_bytes_action.hpp
@@ -58,8 +58,7 @@
      */
     explicit I2CWriteBytesAction(uint8_t reg,
                                  const std::vector<uint8_t>& values) :
-        reg{reg},
-        values{values}, masks{}
+        reg{reg}, values{values}, masks{}
     {
         // Values vector must not be empty
         if (values.size() < 1)
@@ -86,8 +85,7 @@
     explicit I2CWriteBytesAction(uint8_t reg,
                                  const std::vector<uint8_t>& values,
                                  const std::vector<uint8_t>& masks) :
-        reg{reg},
-        values{values}, masks{masks}
+        reg{reg}, values{values}, masks{masks}
     {
         // Values vector must not be empty
         if (values.size() < 1)
diff --git a/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp b/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
index a94775d..896830c 100644
--- a/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
+++ b/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
@@ -49,8 +49,8 @@
                 break;
             case pmbus_utils::SensorDataFormat::linear_16:
                 int8_t exponentValue = getExponentValue(environment, interface);
-                sensorValue = pmbus_utils::convertFromVoutLinear(value,
-                                                                 exponentValue);
+                sensorValue =
+                    pmbus_utils::convertFromVoutLinear(value, exponentValue);
                 break;
         }
 
diff --git a/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
index 38c5d8f..12776a3 100644
--- a/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
+++ b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
@@ -69,8 +69,7 @@
     explicit PMBusReadSensorAction(SensorType type, uint8_t command,
                                    pmbus_utils::SensorDataFormat format,
                                    std::optional<int8_t> exponent) :
-        type{type},
-        command{command}, format{format}, exponent{exponent}
+        type{type}, command{command}, format{format}, exponent{exponent}
     {}
 
     /**
diff --git a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
index 55ed89d..ca1756f 100644
--- a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
+++ b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
@@ -41,8 +41,8 @@
         int8_t exponentValue = getExponentValue(environment, interface);
 
         // Convert volts value to linear data format
-        uint16_t linearValue = pmbus_utils::convertToVoutLinear(voltsValue,
-                                                                exponentValue);
+        uint16_t linearValue =
+            pmbus_utils::convertToVoutLinear(voltsValue, exponentValue);
 
         // Write linear format value to VOUT_COMMAND.  I2CInterface method
         // writes low-order byte first as required by PMBus.
diff --git a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp
index e77ced1..e15d032 100644
--- a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp
+++ b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp
@@ -87,12 +87,11 @@
      * @param isVerified Specifies whether the updated value of VOUT_COMMAND is
      *                   verified by reading it from the device.
      */
-    explicit PMBusWriteVoutCommandAction(std::optional<double> volts,
-                                         pmbus_utils::VoutDataFormat format,
-                                         std::optional<int8_t> exponent,
-                                         bool isVerified) :
-        volts{volts},
-        format{format}, exponent{exponent}, isWriteVerified{isVerified}
+    explicit PMBusWriteVoutCommandAction(
+        std::optional<double> volts, pmbus_utils::VoutDataFormat format,
+        std::optional<int8_t> exponent, bool isVerified) :
+        volts{volts}, format{format}, exponent{exponent},
+        isWriteVerified{isVerified}
     {
         // Currently only linear format is supported
         if (format != pmbus_utils::VoutDataFormat::linear)
diff --git a/phosphor-regulators/src/chassis.cpp b/phosphor-regulators/src/chassis.cpp
index a8c8ed6..585063f 100644
--- a/phosphor-regulators/src/chassis.cpp
+++ b/phosphor-regulators/src/chassis.cpp
@@ -51,8 +51,8 @@
 void Chassis::closeDevices(Services& services)
 {
     // Log debug message in journal
-    services.getJournal().logDebug("Closing devices in chassis " +
-                                   std::to_string(number));
+    services.getJournal().logDebug(
+        "Closing devices in chassis " + std::to_string(number));
 
     // Close devices
     for (std::unique_ptr<Device>& device : devices)
@@ -64,8 +64,8 @@
 void Chassis::configure(Services& services, System& system)
 {
     // Log info message in journal; important for verifying success of boot
-    services.getJournal().logInfo("Configuring chassis " +
-                                  std::to_string(number));
+    services.getJournal().logInfo(
+        "Configuring chassis " + std::to_string(number));
 
     // Configure devices
     for (std::unique_ptr<Device>& device : devices)
diff --git a/phosphor-regulators/src/chassis.hpp b/phosphor-regulators/src/chassis.hpp
index dc86ed0..e14e74c 100644
--- a/phosphor-regulators/src/chassis.hpp
+++ b/phosphor-regulators/src/chassis.hpp
@@ -69,13 +69,13 @@
     explicit Chassis(unsigned int number, const std::string& inventoryPath,
                      std::vector<std::unique_ptr<Device>> devices =
                          std::vector<std::unique_ptr<Device>>{}) :
-        number{number},
-        inventoryPath{inventoryPath}, devices{std::move(devices)}
+        number{number}, inventoryPath{inventoryPath},
+        devices{std::move(devices)}
     {
         if (number < 1)
         {
-            throw std::invalid_argument{"Invalid chassis number: " +
-                                        std::to_string(number)};
+            throw std::invalid_argument{
+                "Invalid chassis number: " + std::to_string(number)};
         }
     }
 
diff --git a/phosphor-regulators/src/config_file_parser.cpp b/phosphor-regulators/src/config_file_parser.cpp
index ede608b..4bb8bd8 100644
--- a/phosphor-regulators/src/config_file_parser.cpp
+++ b/phosphor-regulators/src/config_file_parser.cpp
@@ -214,8 +214,8 @@
     ++propertyCount;
 
     // Required inventory_path property
-    const json& inventoryPathElement = getRequiredProperty(element,
-                                                           "inventory_path");
+    const json& inventoryPathElement =
+        getRequiredProperty(element, "inventory_path");
     std::string inventoryPath = parseInventoryPath(inventoryPathElement);
     ++propertyCount;
 
@@ -356,8 +356,8 @@
     ++propertyCount;
 
     // Required is_regulator property
-    const json& isRegulatorElement = getRequiredProperty(element,
-                                                         "is_regulator");
+    const json& isRegulatorElement =
+        getRequiredProperty(element, "is_regulator");
     bool isRegulator = parseBoolean(isRegulatorElement);
     ++propertyCount;
 
@@ -367,8 +367,8 @@
     ++propertyCount;
 
     // Required i2c_interface property
-    const json& i2cInterfaceElement = getRequiredProperty(element,
-                                                          "i2c_interface");
+    const json& i2cInterfaceElement =
+        getRequiredProperty(element, "i2c_interface");
     std::unique_ptr<i2c::I2CInterface> i2cInterface =
         parseI2CInterface(i2cInterfaceElement);
     ++propertyCount;
diff --git a/phosphor-regulators/src/configuration.hpp b/phosphor-regulators/src/configuration.hpp
index d0f7a44..d802665 100644
--- a/phosphor-regulators/src/configuration.hpp
+++ b/phosphor-regulators/src/configuration.hpp
@@ -72,8 +72,7 @@
      */
     explicit Configuration(std::optional<double> volts,
                            std::vector<std::unique_ptr<Action>> actions) :
-        volts{volts},
-        actions{std::move(actions)}
+        volts{volts}, actions{std::move(actions)}
     {}
 
     /**
diff --git a/phosphor-regulators/src/dbus_sensor.cpp b/phosphor-regulators/src/dbus_sensor.cpp
index 31932b2..8dd760a 100644
--- a/phosphor-regulators/src/dbus_sensor.cpp
+++ b/phosphor-regulators/src/dbus_sensor.cpp
@@ -70,8 +70,7 @@
                        SensorType type, double value, const std::string& rail,
                        const std::string& deviceInventoryPath,
                        const std::string& chassisInventoryPath) :
-    bus{bus},
-    name{name}, type{type}, rail{rail}
+    bus{bus}, name{name}, type{type}, rail{rail}
 {
     // Get sensor properties that are based on the sensor type
     std::string objectPath;
diff --git a/phosphor-regulators/src/dbus_sensor.hpp b/phosphor-regulators/src/dbus_sensor.hpp
index 1a4bfe0..e5898de 100644
--- a/phosphor-regulators/src/dbus_sensor.hpp
+++ b/phosphor-regulators/src/dbus_sensor.hpp
@@ -64,10 +64,9 @@
  * Define simple name for the sdbusplus object_t class that implements all
  * the necessary D-Bus interfaces via templates/multiple inheritance.
  */
-using DBusSensorObject =
-    sdbusplus::server::object_t<ValueInterface, OperationalStatusInterface,
-                                AvailabilityInterface,
-                                AssociationDefinitionsInterface>;
+using DBusSensorObject = sdbusplus::server::object_t<
+    ValueInterface, OperationalStatusInterface, AvailabilityInterface,
+    AssociationDefinitionsInterface>;
 
 /**
  * Define simple name for the generated C++ enum that implements the
diff --git a/phosphor-regulators/src/dbus_sensors.cpp b/phosphor-regulators/src/dbus_sensors.cpp
index c9b4c2b..446815c 100644
--- a/phosphor-regulators/src/dbus_sensors.cpp
+++ b/phosphor-regulators/src/dbus_sensors.cpp
@@ -92,9 +92,9 @@
     else
     {
         // Sensor doesn't exist; create it and add it to the map
-        auto sensor = std::make_unique<DBusSensor>(bus, sensorName, type, value,
-                                                   rail, deviceInventoryPath,
-                                                   chassisInventoryPath);
+        auto sensor = std::make_unique<DBusSensor>(
+            bus, sensorName, type, value, rail, deviceInventoryPath,
+            chassisInventoryPath);
         sensors.emplace(sensorName, std::move(sensor));
     }
 }
diff --git a/phosphor-regulators/src/device.hpp b/phosphor-regulators/src/device.hpp
index 1815680..88e3075 100644
--- a/phosphor-regulators/src/device.hpp
+++ b/phosphor-regulators/src/device.hpp
@@ -72,8 +72,7 @@
         std::unique_ptr<PhaseFaultDetection> phaseFaultDetection = nullptr,
         std::vector<std::unique_ptr<Rail>> rails =
             std::vector<std::unique_ptr<Rail>>{}) :
-        id{id},
-        isRegulatorDevice{isRegulator}, fru{fru},
+        id{id}, isRegulatorDevice{isRegulator}, fru{fru},
         i2cInterface{std::move(i2cInterface)},
         presenceDetection{std::move(presenceDetection)},
         configuration{std::move(configuration)},
diff --git a/phosphor-regulators/src/ffdc_file.cpp b/phosphor-regulators/src/ffdc_file.cpp
index 7f528d6..a3c3ad2 100644
--- a/phosphor-regulators/src/ffdc_file.cpp
+++ b/phosphor-regulators/src/ffdc_file.cpp
@@ -35,8 +35,8 @@
     int fd = open(tempFile.getPath().c_str(), O_RDWR);
     if (fd == -1)
     {
-        throw std::runtime_error{std::string{"Unable to open FFDC file: "} +
-                                 strerror(errno)};
+        throw std::runtime_error{
+            std::string{"Unable to open FFDC file: "} + strerror(errno)};
     }
 
     // Store file descriptor in FileDescriptor object
@@ -49,8 +49,8 @@
     // Returns -1 if close failed.
     if (descriptor.close() == -1)
     {
-        throw std::runtime_error{std::string{"Unable to close FFDC file: "} +
-                                 strerror(errno)};
+        throw std::runtime_error{
+            std::string{"Unable to close FFDC file: "} + strerror(errno)};
     }
 
     // Delete temporary file.  Does nothing if file was already deleted.
diff --git a/phosphor-regulators/src/id_map.cpp b/phosphor-regulators/src/id_map.cpp
index 0f7d3ac..f5132b2 100644
--- a/phosphor-regulators/src/id_map.cpp
+++ b/phosphor-regulators/src/id_map.cpp
@@ -28,8 +28,8 @@
     const std::string& id = device.getID();
     if (deviceMap.count(id) != 0)
     {
-        throw std::invalid_argument{"Unable to add device: Duplicate ID \"" +
-                                    id + '"'};
+        throw std::invalid_argument{
+            "Unable to add device: Duplicate ID \"" + id + '"'};
     }
     deviceMap[id] = &device;
 }
@@ -39,8 +39,8 @@
     const std::string& id = rail.getID();
     if (railMap.count(id) != 0)
     {
-        throw std::invalid_argument{"Unable to add rail: Duplicate ID \"" + id +
-                                    '"'};
+        throw std::invalid_argument{
+            "Unable to add rail: Duplicate ID \"" + id + '"'};
     }
     railMap[id] = &rail;
 }
@@ -50,8 +50,8 @@
     const std::string& id = rule.getID();
     if (ruleMap.count(id) != 0)
     {
-        throw std::invalid_argument{"Unable to add rule: Duplicate ID \"" + id +
-                                    '"'};
+        throw std::invalid_argument{
+            "Unable to add rule: Duplicate ID \"" + id + '"'};
     }
     ruleMap[id] = &rule;
 }
diff --git a/phosphor-regulators/src/id_map.hpp b/phosphor-regulators/src/id_map.hpp
index c466f23..1da7433 100644
--- a/phosphor-regulators/src/id_map.hpp
+++ b/phosphor-regulators/src/id_map.hpp
@@ -84,8 +84,8 @@
         auto it = deviceMap.find(id);
         if (it == deviceMap.end())
         {
-            throw std::invalid_argument{"Unable to find device with ID \"" +
-                                        id + '"'};
+            throw std::invalid_argument{
+                "Unable to find device with ID \"" + id + '"'};
         }
         return *(it->second);
     }
@@ -103,8 +103,8 @@
         auto it = railMap.find(id);
         if (it == railMap.end())
         {
-            throw std::invalid_argument{"Unable to find rail with ID \"" + id +
-                                        '"'};
+            throw std::invalid_argument{
+                "Unable to find rail with ID \"" + id + '"'};
         }
         return *(it->second);
     }
@@ -122,8 +122,8 @@
         auto it = ruleMap.find(id);
         if (it == ruleMap.end())
         {
-            throw std::invalid_argument{"Unable to find rule with ID \"" + id +
-                                        '"'};
+            throw std::invalid_argument{
+                "Unable to find rule with ID \"" + id + '"'};
         }
         return *(it->second);
     }
diff --git a/phosphor-regulators/src/journal.cpp b/phosphor-regulators/src/journal.cpp
index 716a999..94a9f52 100644
--- a/phosphor-regulators/src/journal.cpp
+++ b/phosphor-regulators/src/journal.cpp
@@ -54,9 +54,8 @@
     sd_journal* journal{nullptr};
 };
 
-std::vector<std::string>
-    SystemdJournal::getMessages(const std::string& field,
-                                const std::string& fieldValue, unsigned int max)
+std::vector<std::string> SystemdJournal::getMessages(
+    const std::string& field, const std::string& fieldValue, unsigned int max)
 {
     // Sleep 100ms; otherwise recent journal entries sometimes not available
     using namespace std::chrono_literals;
@@ -67,8 +66,8 @@
     int rc = sd_journal_open(&journal, SD_JOURNAL_LOCAL_ONLY);
     if (rc < 0)
     {
-        throw std::runtime_error{std::string{"Failed to open journal: "} +
-                                 strerror(-rc)};
+        throw std::runtime_error{
+            std::string{"Failed to open journal: "} + strerror(-rc)};
     }
 
     // Create object to automatically close journal
@@ -79,8 +78,8 @@
     rc = sd_journal_add_match(journal, match.c_str(), 0);
     if (rc < 0)
     {
-        throw std::runtime_error{std::string{"Failed to add journal match: "} +
-                                 strerror(-rc)};
+        throw std::runtime_error{
+            std::string{"Failed to add journal match: "} + strerror(-rc)};
     }
 
     // Loop through matching entries from newest to oldest
diff --git a/phosphor-regulators/src/journal.hpp b/phosphor-regulators/src/journal.hpp
index 2199c8c..c004031 100644
--- a/phosphor-regulators/src/journal.hpp
+++ b/phosphor-regulators/src/journal.hpp
@@ -55,9 +55,9 @@
      *            matching messages.
      * @return matching messages from the journal
      */
-    virtual std::vector<std::string> getMessages(const std::string& field,
-                                                 const std::string& fieldValue,
-                                                 unsigned int max = 0) = 0;
+    virtual std::vector<std::string>
+        getMessages(const std::string& field, const std::string& fieldValue,
+                    unsigned int max = 0) = 0;
 
     /**
      * Logs a debug message in the system journal.
@@ -119,9 +119,9 @@
     virtual ~SystemdJournal() = default;
 
     /** @copydoc Journal::getMessages() */
-    virtual std::vector<std::string> getMessages(const std::string& field,
-                                                 const std::string& fieldValue,
-                                                 unsigned int max) override;
+    virtual std::vector<std::string>
+        getMessages(const std::string& field, const std::string& fieldValue,
+                    unsigned int max) override;
 
     /** @copydoc Journal::logDebug(const std::string&) */
     virtual void logDebug(const std::string& message) override
diff --git a/phosphor-regulators/src/manager.cpp b/phosphor-regulators/src/manager.cpp
index b08c96b..bd16776 100644
--- a/phosphor-regulators/src/manager.cpp
+++ b/phosphor-regulators/src/manager.cpp
@@ -321,8 +321,8 @@
         if (!pathName.empty())
         {
             // Log info message in journal; config file path is important
-            services.getJournal().logInfo("Loading configuration file " +
-                                          pathName.string());
+            services.getJournal().logInfo(
+                "Loading configuration file " + pathName.string());
 
             // Parse the config file
             std::vector<std::unique_ptr<Rule>> rules{};
@@ -331,8 +331,8 @@
 
             // Store config file information in a new System object.  The old
             // System object, if any, is automatically deleted.
-            system = std::make_unique<System>(std::move(rules),
-                                              std::move(chassis));
+            system =
+                std::make_unique<System>(std::move(rules), std::move(chassis));
         }
     }
     catch (const std::exception& e)
diff --git a/phosphor-regulators/src/phase_fault_detection.cpp b/phosphor-regulators/src/phase_fault_detection.cpp
index 4ca276b..f501d9d 100644
--- a/phosphor-regulators/src/phase_fault_detection.cpp
+++ b/phosphor-regulators/src/phase_fault_detection.cpp
@@ -83,10 +83,9 @@
     }
 }
 
-void PhaseFaultDetection::checkForPhaseFault(PhaseFaultType faultType,
-                                             Services& services,
-                                             Device& regulator,
-                                             ActionEnvironment& environment)
+void PhaseFaultDetection::checkForPhaseFault(
+    PhaseFaultType faultType, Services& services, Device& regulator,
+    ActionEnvironment& environment)
 {
     // Find ErrorType that corresponds to PhaseFaultType; used by ErrorHistory
     ErrorType errorType = toErrorType(faultType);
diff --git a/phosphor-regulators/src/phase_fault_detection.hpp b/phosphor-regulators/src/phase_fault_detection.hpp
index 6a84102..2c286b6 100644
--- a/phosphor-regulators/src/phase_fault_detection.hpp
+++ b/phosphor-regulators/src/phase_fault_detection.hpp
@@ -77,8 +77,7 @@
      */
     explicit PhaseFaultDetection(std::vector<std::unique_ptr<Action>> actions,
                                  const std::string& deviceID = "") :
-        actions{std::move(actions)},
-        deviceID{deviceID}
+        actions{std::move(actions)}, deviceID{deviceID}
     {}
 
     /**
diff --git a/phosphor-regulators/src/pmbus_error.hpp b/phosphor-regulators/src/pmbus_error.hpp
index ac2a0a5..b901457 100644
--- a/phosphor-regulators/src/pmbus_error.hpp
+++ b/phosphor-regulators/src/pmbus_error.hpp
@@ -47,8 +47,8 @@
      */
     explicit PMBusError(const std::string& error, const std::string& deviceID,
                         const std::string& inventoryPath) :
-        error{"PMBusError: " + error},
-        deviceID{deviceID}, inventoryPath{inventoryPath}
+        error{"PMBusError: " + error}, deviceID{deviceID},
+        inventoryPath{inventoryPath}
     {}
 
     /**
diff --git a/phosphor-regulators/src/presence_detection.cpp b/phosphor-regulators/src/presence_detection.cpp
index 74c241b..7d4ac92 100644
--- a/phosphor-regulators/src/presence_detection.cpp
+++ b/phosphor-regulators/src/presence_detection.cpp
@@ -52,8 +52,8 @@
         {
             // Log error messages in journal
             services.getJournal().logError(exception_utils::getMessages(e));
-            services.getJournal().logError("Unable to determine presence of " +
-                                           device.getID());
+            services.getJournal().logError(
+                "Unable to determine presence of " + device.getID());
 
             // Create error log entry
             error_logging_utils::logError(std::current_exception(),
diff --git a/phosphor-regulators/src/rail.hpp b/phosphor-regulators/src/rail.hpp
index 70b3e3d..5877bc0 100644
--- a/phosphor-regulators/src/rail.hpp
+++ b/phosphor-regulators/src/rail.hpp
@@ -61,8 +61,7 @@
         const std::string& id,
         std::unique_ptr<Configuration> configuration = nullptr,
         std::unique_ptr<SensorMonitoring> sensorMonitoring = nullptr) :
-        id{id},
-        configuration{std::move(configuration)},
+        id{id}, configuration{std::move(configuration)},
         sensorMonitoring{std::move(sensorMonitoring)}
     {}
 
diff --git a/phosphor-regulators/src/regsctl/main.cpp b/phosphor-regulators/src/regsctl/main.cpp
index 6f03016..9f65c8b 100644
--- a/phosphor-regulators/src/regsctl/main.cpp
+++ b/phosphor-regulators/src/regsctl/main.cpp
@@ -39,12 +39,12 @@
         // Add dbus methods group
         auto methods = app.add_option_group("Methods");
         // Configure method
-        CLI::App* config = methods->add_subcommand("config",
-                                                   "Configure regulators");
+        CLI::App* config =
+            methods->add_subcommand("config", "Configure regulators");
         config->set_help_flag("-h,--help", "Configure regulators method help");
         // Monitor method
-        CLI::App* monitor = methods->add_subcommand("monitor",
-                                                    "Monitor regulators");
+        CLI::App* monitor =
+            methods->add_subcommand("monitor", "Monitor regulators");
         monitor->set_help_flag("-h,--help", "Monitor regulators method help");
         monitor->add_flag("-e,--enable", monitorEnable,
                           "Enable regulator monitoring");
diff --git a/phosphor-regulators/src/regsctl/utility.hpp b/phosphor-regulators/src/regsctl/utility.hpp
index b64eab5..b1a1418 100644
--- a/phosphor-regulators/src/regsctl/utility.hpp
+++ b/phosphor-regulators/src/regsctl/utility.hpp
@@ -23,8 +23,8 @@
 auto callMethod(const std::string& method, Args&&... args)
 {
     auto bus = sdbusplus::bus::new_default();
-    auto reqMsg = bus.new_method_call(busName, objPath, interface,
-                                      method.c_str());
+    auto reqMsg =
+        bus.new_method_call(busName, objPath, interface, method.c_str());
     reqMsg.append(std::forward<Args>(args)...);
 
     // Set timeout to 6 minutes; some regulator methods take over 5 minutes
diff --git a/phosphor-regulators/src/rule.hpp b/phosphor-regulators/src/rule.hpp
index ddfaa62..f774af8 100644
--- a/phosphor-regulators/src/rule.hpp
+++ b/phosphor-regulators/src/rule.hpp
@@ -58,8 +58,7 @@
      */
     explicit Rule(const std::string& id,
                   std::vector<std::unique_ptr<Action>> actions) :
-        id{id},
-        actions{std::move(actions)}
+        id{id}, actions{std::move(actions)}
     {}
 
     /**
diff --git a/phosphor-regulators/src/system.hpp b/phosphor-regulators/src/system.hpp
index accd7f0..02a33eb 100644
--- a/phosphor-regulators/src/system.hpp
+++ b/phosphor-regulators/src/system.hpp
@@ -54,8 +54,7 @@
      */
     explicit System(std::vector<std::unique_ptr<Rule>> rules,
                     std::vector<std::unique_ptr<Chassis>> chassis) :
-        rules{std::move(rules)},
-        chassis{std::move(chassis)}
+        rules{std::move(rules)}, chassis{std::move(chassis)}
     {
         buildIDMap();
     }
diff --git a/phosphor-regulators/src/write_verification_error.hpp b/phosphor-regulators/src/write_verification_error.hpp
index 6a7420d..4a42187 100644
--- a/phosphor-regulators/src/write_verification_error.hpp
+++ b/phosphor-regulators/src/write_verification_error.hpp
@@ -51,8 +51,8 @@
     explicit WriteVerificationError(const std::string& error,
                                     const std::string& deviceID,
                                     const std::string& inventoryPath) :
-        error{"WriteVerificationError: " + error},
-        deviceID{deviceID}, inventoryPath{inventoryPath}
+        error{"WriteVerificationError: " + error}, deviceID{deviceID},
+        inventoryPath{inventoryPath}
     {}
 
     /**
