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}
     {}
 
     /**
diff --git a/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp b/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
index c90c09e..ce661c3 100644
--- a/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
+++ b/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
@@ -216,10 +216,11 @@
         CompareVPDAction action{
             "/xyz/openbmc_project/inventory/system/chassis/disk_backplane",
             "CCIN", std::vector<uint8_t>{0x01, 0xA3, 0x0, 0xFF}};
-        EXPECT_EQ(action.toString(), "compare_vpd: { fru: "
-                                     "/xyz/openbmc_project/inventory/system/"
-                                     "chassis/disk_backplane, keyword: "
-                                     "CCIN, value: [ 0x1, 0xA3, 0x0, 0xFF ] }");
+        EXPECT_EQ(action.toString(),
+                  "compare_vpd: { fru: "
+                  "/xyz/openbmc_project/inventory/system/"
+                  "chassis/disk_backplane, keyword: "
+                  "CCIN, value: [ 0x1, 0xA3, 0x0, 0xFF ] }");
     }
 
     // Test where value vector is empty
@@ -227,9 +228,10 @@
         CompareVPDAction action{
             "/xyz/openbmc_project/inventory/system/chassis/disk_backplane",
             "CCIN", std::vector<uint8_t>{}};
-        EXPECT_EQ(action.toString(), "compare_vpd: { fru: "
-                                     "/xyz/openbmc_project/inventory/system/"
-                                     "chassis/disk_backplane, keyword: "
-                                     "CCIN, value: [  ] }");
+        EXPECT_EQ(action.toString(),
+                  "compare_vpd: { fru: "
+                  "/xyz/openbmc_project/inventory/system/"
+                  "chassis/disk_backplane, keyword: "
+                  "CCIN, value: [  ] }");
     }
 }
diff --git a/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp b/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp
index 609026e..165b57b 100644
--- a/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp
+++ b/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp
@@ -109,14 +109,15 @@
         // Test where actual bit value is equal to expected bit value.
         // Test all bits in register value 0x96 == 1001 0110).
         {
-            I2CCompareBitAction actions[] = {I2CCompareBitAction{0x7C, 7, 1},
-                                             I2CCompareBitAction{0x7C, 6, 0},
-                                             I2CCompareBitAction{0x7C, 5, 0},
-                                             I2CCompareBitAction{0x7C, 4, 1},
-                                             I2CCompareBitAction{0x7C, 3, 0},
-                                             I2CCompareBitAction{0x7C, 2, 1},
-                                             I2CCompareBitAction{0x7C, 1, 1},
-                                             I2CCompareBitAction{0x7C, 0, 0}};
+            I2CCompareBitAction actions[] = {
+                I2CCompareBitAction{0x7C, 7, 1},
+                I2CCompareBitAction{0x7C, 6, 0},
+                I2CCompareBitAction{0x7C, 5, 0},
+                I2CCompareBitAction{0x7C, 4, 1},
+                I2CCompareBitAction{0x7C, 3, 0},
+                I2CCompareBitAction{0x7C, 2, 1},
+                I2CCompareBitAction{0x7C, 1, 1},
+                I2CCompareBitAction{0x7C, 0, 0}};
             for (I2CCompareBitAction& action : actions)
             {
                 EXPECT_EQ(action.execute(env), true);
@@ -126,14 +127,15 @@
         // Test where actual bit value is not equal to expected bit value.
         // Test all bits in register value 0x96 == 1001 0110).
         {
-            I2CCompareBitAction actions[] = {I2CCompareBitAction{0x7C, 7, 0},
-                                             I2CCompareBitAction{0x7C, 6, 1},
-                                             I2CCompareBitAction{0x7C, 5, 1},
-                                             I2CCompareBitAction{0x7C, 4, 0},
-                                             I2CCompareBitAction{0x7C, 3, 1},
-                                             I2CCompareBitAction{0x7C, 2, 0},
-                                             I2CCompareBitAction{0x7C, 1, 0},
-                                             I2CCompareBitAction{0x7C, 0, 1}};
+            I2CCompareBitAction actions[] = {
+                I2CCompareBitAction{0x7C, 7, 0},
+                I2CCompareBitAction{0x7C, 6, 1},
+                I2CCompareBitAction{0x7C, 5, 1},
+                I2CCompareBitAction{0x7C, 4, 0},
+                I2CCompareBitAction{0x7C, 3, 1},
+                I2CCompareBitAction{0x7C, 2, 0},
+                I2CCompareBitAction{0x7C, 1, 0},
+                I2CCompareBitAction{0x7C, 0, 1}};
             for (I2CCompareBitAction& action : actions)
             {
                 EXPECT_EQ(action.execute(env), false);
diff --git a/phosphor-regulators/test/actions/set_device_action_tests.cpp b/phosphor-regulators/test/actions/set_device_action_tests.cpp
index 139abd1..2651f13 100644
--- a/phosphor-regulators/test/actions/set_device_action_tests.cpp
+++ b/phosphor-regulators/test/actions/set_device_action_tests.cpp
@@ -53,8 +53,8 @@
     idMap.addDevice(reg1);
 
     // Create Device regulator2 and add to IDMap
-    i2cInterface = i2c::create(1, 0x72,
-                               i2c::I2CInterface::InitialState::CLOSED);
+    i2cInterface =
+        i2c::create(1, 0x72, i2c::I2CInterface::InitialState::CLOSED);
     Device reg2{
         "regulator2", true,
         "/xyz/openbmc_project/inventory/system/chassis/motherboard/reg2",
diff --git a/phosphor-regulators/test/chassis_tests.cpp b/phosphor-regulators/test/chassis_tests.cpp
index 7963430..f5892bf 100644
--- a/phosphor-regulators/test/chassis_tests.cpp
+++ b/phosphor-regulators/test/chassis_tests.cpp
@@ -293,11 +293,11 @@
             EXPECT_CALL(*i2cInterface, close).Times(1);
 
             // Create Device
-            auto device =
-                std::make_unique<Device>("vdd0_reg", true,
-                                         "/xyz/openbmc_project/inventory/"
-                                         "system/chassis/motherboard/vdd0_reg",
-                                         std::move(i2cInterface));
+            auto device = std::make_unique<Device>(
+                "vdd0_reg", true,
+                "/xyz/openbmc_project/inventory/"
+                "system/chassis/motherboard/vdd0_reg",
+                std::move(i2cInterface));
             devices.emplace_back(std::move(device));
         }
 
@@ -309,11 +309,11 @@
             EXPECT_CALL(*i2cInterface, close).Times(1);
 
             // Create Device
-            auto device =
-                std::make_unique<Device>("vdd1_reg", true,
-                                         "/xyz/openbmc_project/inventory/"
-                                         "system/chassis/motherboard/vdd1_reg",
-                                         std::move(i2cInterface));
+            auto device = std::make_unique<Device>(
+                "vdd1_reg", true,
+                "/xyz/openbmc_project/inventory/"
+                "system/chassis/motherboard/vdd1_reg",
+                std::move(i2cInterface));
             devices.emplace_back(std::move(device));
         }
 
diff --git a/phosphor-regulators/test/device_tests.cpp b/phosphor-regulators/test/device_tests.cpp
index 5aaa2fe..021a02a 100644
--- a/phosphor-regulators/test/device_tests.cpp
+++ b/phosphor-regulators/test/device_tests.cpp
@@ -74,8 +74,8 @@
         std::vector<std::unique_ptr<Rule>> rules{};
         std::vector<std::unique_ptr<Chassis>> chassisVec{};
         chassisVec.emplace_back(std::move(chassis));
-        this->system = std::make_unique<System>(std::move(rules),
-                                                std::move(chassisVec));
+        this->system =
+            std::make_unique<System>(std::move(rules), std::move(chassisVec));
     }
 
   protected:
@@ -455,8 +455,8 @@
             EXPECT_CALL(*action, execute).Times(0);
             std::vector<std::unique_ptr<Action>> actions{};
             actions.emplace_back(std::move(action));
-            configuration = std::make_unique<Configuration>(volts,
-                                                            std::move(actions));
+            configuration =
+                std::make_unique<Configuration>(volts, std::move(actions));
         }
 
         // Create Device
@@ -516,8 +516,8 @@
                 std::make_unique<Configuration>(volts, std::move(actions));
 
             // Create Rail
-            auto rail = std::make_unique<Rail>("vdd0",
-                                               std::move(configuration));
+            auto rail =
+                std::make_unique<Rail>("vdd0", std::move(configuration));
             rails.emplace_back(std::move(rail));
         }
 
@@ -533,8 +533,8 @@
                 std::make_unique<Configuration>(volts, std::move(actions));
 
             // Create Rail
-            auto rail = std::make_unique<Rail>("vio0",
-                                               std::move(configuration));
+            auto rail =
+                std::make_unique<Rail>("vio0", std::move(configuration));
             rails.emplace_back(std::move(rail));
         }
 
diff --git a/phosphor-regulators/test/id_map_tests.cpp b/phosphor-regulators/test/id_map_tests.cpp
index 6c8d1ca..15ace68 100644
--- a/phosphor-regulators/test/id_map_tests.cpp
+++ b/phosphor-regulators/test/id_map_tests.cpp
@@ -68,8 +68,8 @@
     // Test where device ID already exists in map
     try
     {
-        i2cInterface = i2c::create(1, 0x72,
-                                   i2c::I2CInterface::InitialState::CLOSED);
+        i2cInterface =
+            i2c::create(1, 0x72, i2c::I2CInterface::InitialState::CLOSED);
         Device device2{"vio_reg", true,
                        "/xyz/openbmc_project/inventory/system/chassis/"
                        "motherboard/vio_reg2",
diff --git a/phosphor-regulators/test/phase_fault_detection_tests.cpp b/phosphor-regulators/test/phase_fault_detection_tests.cpp
index d7fa5f3..c85970c 100644
--- a/phosphor-regulators/test/phase_fault_detection_tests.cpp
+++ b/phosphor-regulators/test/phase_fault_detection_tests.cpp
@@ -108,8 +108,8 @@
         std::vector<std::unique_ptr<Rule>> rules{};
         std::vector<std::unique_ptr<Chassis>> chassisVec{};
         chassisVec.emplace_back(std::move(chassis));
-        this->system = std::make_unique<System>(std::move(rules),
-                                                std::move(chassisVec));
+        this->system =
+            std::make_unique<System>(std::move(rules), std::move(chassisVec));
     }
 
   protected:
diff --git a/phosphor-regulators/test/system_tests.cpp b/phosphor-regulators/test/system_tests.cpp
index 6cff029..1ea34b3 100644
--- a/phosphor-regulators/test/system_tests.cpp
+++ b/phosphor-regulators/test/system_tests.cpp
@@ -102,8 +102,8 @@
     // Create Chassis that contains Device
     std::vector<std::unique_ptr<Device>> devices{};
     devices.emplace_back(std::move(device));
-    auto chassis = std::make_unique<Chassis>(1, chassisInvPath,
-                                             std::move(devices));
+    auto chassis =
+        std::make_unique<Chassis>(1, chassisInvPath, std::move(devices));
     Chassis* chassisPtr = chassis.get();
 
     // Create System that contains Chassis
@@ -157,8 +157,8 @@
     // Create Chassis that contains Device
     std::vector<std::unique_ptr<Device>> devices{};
     devices.emplace_back(std::move(device));
-    auto chassis = std::make_unique<Chassis>(1, chassisInvPath,
-                                             std::move(devices));
+    auto chassis =
+        std::make_unique<Chassis>(1, chassisInvPath, std::move(devices));
 
     // Create System that contains Chassis
     std::vector<std::unique_ptr<Rule>> rules{};
diff --git a/phosphor-regulators/test/test_utils.hpp b/phosphor-regulators/test/test_utils.hpp
index e04dd6d..b3df87a 100644
--- a/phosphor-regulators/test/test_utils.hpp
+++ b/phosphor-regulators/test/test_utils.hpp
@@ -55,9 +55,8 @@
  * @param railIDs rail IDs (optional)
  * @return Device object
  */
-inline std::unique_ptr<Device>
-    createDevice(const std::string& id,
-                 const std::vector<std::string>& railIDs = {})
+inline std::unique_ptr<Device> createDevice(
+    const std::string& id, const std::vector<std::string>& railIDs = {})
 {
     // Create Rails (if any)
     std::vector<std::unique_ptr<Rail>> rails{};
