You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by sz...@apache.org on 2021/06/14 14:51:37 UTC

[nifi-minifi-cpp] branch main updated (8ec4932 -> 922b6e7)

This is an automated email from the ASF dual-hosted git repository.

szaszm pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git.


    from 8ec4932  MINIFICPP-1589 Adapt Azure tests to naming conventions to fix failures
     new fb04567  MINIFICPP-1557 Fix CPU usage percentage calculation
     new 186f163  MINIFICPP-1567 enable linter checks in extensions (part 1)
     new 922b6e7  MINIFICPP-1567 enable linter checks in extensions (part 2)

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 extensions/bustache/ApplyTemplate.cpp              |   4 +-
 extensions/bustache/ApplyTemplate.h                |   8 +-
 extensions/bustache/CMakeLists.txt                 |   1 +
 extensions/bustache/TemplateLoader.h               |   8 +-
 extensions/civetweb/CMakeLists.txt                 |   2 +-
 extensions/civetweb/processors/ListenHTTP.cpp      |   5 +
 extensions/civetweb/processors/ListenHTTP.h        |  13 +-
 extensions/coap/CMakeLists.txt                     |   2 +-
 extensions/coap/COAPLoader.h                       |   8 +-
 .../coap/controllerservice/CoapConnector.cpp       |   6 +-
 extensions/coap/controllerservice/CoapConnector.h  |  17 +-
 extensions/coap/controllerservice/CoapMessaging.h  |  14 +-
 extensions/coap/controllerservice/CoapResponse.h   |  11 +-
 extensions/coap/nanofi/coap_functions.h            |   2 -
 extensions/coap/nanofi/coap_message.h              |   5 +-
 extensions/coap/nanofi/coap_server.h               |   5 +-
 extensions/coap/protocols/CoapC2Protocol.cpp       |   2 +-
 extensions/coap/protocols/CoapC2Protocol.h         |  11 +-
 extensions/coap/server/CoapServer.cpp              |   2 +
 extensions/coap/server/CoapServer.h                |  28 +-
 extensions/coap/tests/CoapC2VerifyHeartbeat.cpp    |   6 +-
 extensions/coap/tests/CoapIntegrationBase.h        |  11 +-
 extensions/expression-language/CMakeLists.txt      |   1 +
 extensions/expression-language/Driver.h            |   8 +-
 extensions/expression-language/Expression.cpp      |  19 +-
 .../ExpressionContextBuilder.cpp                   |   5 +
 .../expression-language/ExpressionContextBuilder.h |   6 +-
 extensions/expression-language/ExpressionLoader.h  |   9 +-
 .../expression-language/ProcessContextExpr.cpp     |   2 +
 .../expression-language/ProcessContextExpr.h       |   9 +-
 extensions/expression-language/common/Value.h      |  11 +-
 .../impl/expression/Expression.h                   |  20 +-
 .../tests/ExpressionLanguageTests.cpp              | 719 ++++++++++-----------
 .../tests/RouteOnAttributeTests.cpp                |   1 -
 .../integration/UpdateAttributeIntegrationTest.cpp |   7 -
 extensions/gps/CMakeLists.txt                      |   1 +
 extensions/gps/GetGPS.cpp                          |  28 +-
 extensions/gps/GetGPS.h                            |  21 +-
 extensions/gps/GetGPSLoader.h                      |   9 +-
 extensions/http-curl/CMakeLists.txt                |   1 +
 extensions/http-curl/HTTPCurlLoader.h              |  10 +-
 extensions/http-curl/client/HTTPCallback.h         |  10 +-
 extensions/http-curl/client/HTTPClient.cpp         |  18 +-
 extensions/http-curl/client/HTTPClient.h           |  13 +-
 extensions/http-curl/client/HTTPStream.cpp         |   6 +-
 extensions/http-curl/client/HTTPStream.h           |   7 +-
 extensions/http-curl/processors/InvokeHTTP.cpp     |   9 -
 extensions/http-curl/processors/InvokeHTTP.h       |   9 +-
 extensions/http-curl/protocols/AgentPrinter.cpp    |   6 -
 extensions/http-curl/protocols/AgentPrinter.h      |  13 +-
 extensions/http-curl/protocols/RESTReceiver.h      |  12 +-
 extensions/http-curl/protocols/RESTSender.cpp      |   5 -
 extensions/http-curl/protocols/RESTSender.h        |  11 +-
 extensions/http-curl/sitetosite/HTTPProtocol.h     |  28 +-
 extensions/http-curl/sitetosite/HTTPTransaction.h  |   4 +
 extensions/http-curl/sitetosite/PeersEntity.h      |  10 +-
 .../http-curl/tests/C2DescribeManifestTest.cpp     |   2 +-
 extensions/http-curl/tests/C2NullConfiguration.cpp |   2 +-
 .../C2VerifyResourceConsumptionInHeartbeat.cpp     |   7 +-
 .../http-curl/tests/C2VerifyServeResults.cpp       |   4 +-
 extensions/http-curl/tests/CivetStream.h           |  12 +-
 extensions/http-curl/tests/HTTPHandlers.h          |  64 +-
 extensions/http-curl/tests/HTTPIntegrationBase.h   |  13 +-
 extensions/http-curl/tests/HTTPSiteToSiteTests.cpp |   2 +-
 .../http-curl/tests/HttpGetIntegrationTest.cpp     |   1 -
 .../http-curl/tests/HttpPostIntegrationTest.cpp    |   2 +-
 extensions/http-curl/tests/ServerAwareHandler.h    |   9 +-
 extensions/http-curl/tests/SiteToSiteRestTest.cpp  |   2 +-
 extensions/http-curl/tests/TestServer.h            |  11 +-
 .../http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp |   4 +-
 .../http-curl/tests/unit/HTTPClientTests.cpp       |   9 +-
 .../http-curl/tests/unit/InvokeHTTPTests.cpp       |   5 -
 extensions/usb-camera/CMakeLists.txt               |   1 +
 extensions/usb-camera/GetUSBCamera.cpp             |   3 +
 extensions/usb-camera/GetUSBCamera.h               |  10 +-
 extensions/windows-event-log/Bookmark.cpp          |  17 +-
 extensions/windows-event-log/Bookmark.h            |  16 +-
 extensions/windows-event-log/CMakeLists.txt        |   1 +
 .../CollectorInitiatedSubscription.cpp             |  26 +-
 .../CollectorInitiatedSubscription.h               |  21 +-
 .../windows-event-log/ConsumeWindowsEventLog.cpp   |  33 +-
 .../windows-event-log/ConsumeWindowsEventLog.h     |  35 +-
 extensions/windows-event-log/SupportedProperty.h   |  12 +-
 extensions/windows-event-log/TailEventLog.cpp      |  24 +-
 extensions/windows-event-log/TailEventLog.h        |  23 +-
 .../tests/CWELCustomProviderTests.cpp              |   3 +-
 extensions/windows-event-log/tests/CWELTestUtils.h |   6 +
 .../tests/MetadataWalkerTests.cpp                  | 100 +--
 .../tests/custom-provider/CPPLINT.cfg              |   1 +
 extensions/windows-event-log/wel/JSONUtils.h       |   6 +-
 .../windows-event-log/wel/MetadataWalker.cpp       |  34 +-
 extensions/windows-event-log/wel/MetadataWalker.h  |  25 +-
 .../windows-event-log/wel/UnicodeConversion.h      |  36 +-
 .../windows-event-log/wel/WindowsEventLog.cpp      |  33 +-
 extensions/windows-event-log/wel/WindowsEventLog.h |  49 +-
 extensions/windows-event-log/wel/XMLString.h       |  31 +-
 libminifi/include/io/ClientSocket.h                |   4 +-
 libminifi/src/utils/ProcessCpuUsageTracker.cpp     |  11 +-
 libminifi/src/utils/SystemCpuUsageTracker.cpp      |  16 +-
 libminifi/test/unit/CpuUsageTest.cpp               |   2 +-
 100 files changed, 957 insertions(+), 990 deletions(-)
 create mode 100644 extensions/windows-event-log/tests/custom-provider/CPPLINT.cfg

[nifi-minifi-cpp] 01/03: MINIFICPP-1557 Fix CPU usage percentage calculation

Posted by sz...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

szaszm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit fb04567a0c3c4f29271742369a98d171a162549d
Author: Gabor Gyimesi <ga...@gmail.com>
AuthorDate: Mon Jun 14 15:27:53 2021 +0200

    MINIFICPP-1557 Fix CPU usage percentage calculation
    
    Closes #1101
    
    Signed-off-by: Marton Szasz <sz...@gmail.com>
---
 extensions/http-curl/tests/HTTPHandlers.h      | 11 ++++++++---
 libminifi/src/utils/ProcessCpuUsageTracker.cpp | 11 +++++++++--
 libminifi/src/utils/SystemCpuUsageTracker.cpp  | 16 ++++++++++++----
 libminifi/test/unit/CpuUsageTest.cpp           |  2 +-
 4 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/extensions/http-curl/tests/HTTPHandlers.h b/extensions/http-curl/tests/HTTPHandlers.h
index e410f3b..f13e2be 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -27,6 +27,7 @@
 #include "CivetStream.h"
 #include "io/CRCStream.h"
 #include "rapidjson/document.h"
+#include "rapidjson/error/en.h"
 #include "HTTPUtils.h"
 #include "ServerAwareHandler.h"
 #include "utils/gsl.h"
@@ -422,11 +423,15 @@ class HeartbeatHandler : public ServerAwareHandler {
 
   void verify(struct mg_connection *conn) {
     auto post_data = readPayload(conn);
+    if (!isServerRunning()) {
+      return;
+    }
     if (!IsNullOrEmpty(post_data)) {
       rapidjson::Document root;
-      rapidjson::ParseResult ok = root.Parse(post_data.data(), post_data.size());
-      assert(ok);
-      (void)ok;  // unused in release builds
+      rapidjson::ParseResult result = root.Parse(post_data.data(), post_data.size());
+      if (!result) {
+        throw std::runtime_error(fmt::format("JSON parse error: {0}\n JSON data: {1}", std::string(rapidjson::GetParseError_En(result.Code())), post_data));
+      }
       std::string operation = root["operation"].GetString();
       if (operation == "heartbeat") {
         handleHeartbeat(root, conn);
diff --git a/libminifi/src/utils/ProcessCpuUsageTracker.cpp b/libminifi/src/utils/ProcessCpuUsageTracker.cpp
index c970c18..3a9eade 100644
--- a/libminifi/src/utils/ProcessCpuUsageTracker.cpp
+++ b/libminifi/src/utils/ProcessCpuUsageTracker.cpp
@@ -22,6 +22,7 @@
 #endif
 
 #include <thread>
+#include <algorithm>
 
 namespace org {
 namespace apache {
@@ -68,10 +69,13 @@ bool ProcessCpuUsageTracker::isCurrentQuerySameAsPrevious() const {
 
 double ProcessCpuUsageTracker::getProcessCpuUsageBetweenLastTwoQueries() const {
   clock_t cpu_times_diff = cpu_times_ - previous_cpu_times_;
+  if (cpu_times_diff == 0) {
+    return -1.0;
+  }
   clock_t sys_cpu_times_diff = sys_cpu_times_ - previous_sys_cpu_times_;
   clock_t user_cpu_times_diff = user_cpu_times_ - previous_user_cpu_times_;
   double percent = static_cast<double>(sys_cpu_times_diff + user_cpu_times_diff) / static_cast<double>(cpu_times_diff);
-  percent = percent / std::thread::hardware_concurrency();
+  percent = percent / (std::max)(uint32_t{1}, std::thread::hardware_concurrency());
   return percent;
 }
 
@@ -123,10 +127,13 @@ void ProcessCpuUsageTracker::queryCpuTimes() {
 
 double ProcessCpuUsageTracker::getProcessCpuUsageBetweenLastTwoQueries() const {
   uint64_t cpu_times_diff = cpu_times_ - previous_cpu_times_;
+  if (cpu_times_diff == 0) {
+    return -1.0;
+  }
   uint64_t sys_cpu_times_diff = sys_cpu_times_ - previous_sys_cpu_times_;
   uint64_t user_cpu_times_diff = user_cpu_times_ - previous_user_cpu_times_;
   double percent = static_cast<double>(sys_cpu_times_diff + user_cpu_times_diff) / static_cast<double>(cpu_times_diff);
-  percent = percent / std::thread::hardware_concurrency();
+  percent = percent / (std::max)(uint32_t{1}, std::thread::hardware_concurrency());
   return percent;
 }
 #endif
diff --git a/libminifi/src/utils/SystemCpuUsageTracker.cpp b/libminifi/src/utils/SystemCpuUsageTracker.cpp
index d7b5ec7..9ca5344 100644
--- a/libminifi/src/utils/SystemCpuUsageTracker.cpp
+++ b/libminifi/src/utils/SystemCpuUsageTracker.cpp
@@ -75,8 +75,11 @@ double SystemCpuUsageTracker::getCpuUsageBetweenLastTwoQueries() const {
   uint64_t total_user_low_diff = total_user_low_ - previous_total_user_low_;
   uint64_t total_system_diff = total_sys_ - previous_total_sys_;
   uint64_t total_idle_diff = total_idle_ - previous_total_idle_;
-  uint64_t total_diff =  total_user_diff + total_user_low_diff + total_system_diff;
-  double percent = static_cast<double>(total_diff)/static_cast<double>(total_diff+total_idle_diff);
+  uint64_t total_diff = total_user_diff + total_user_low_diff + total_system_diff;
+  if (total_diff + total_idle_diff == 0) {
+    return -1.0;
+  }
+  double percent = static_cast<double>(total_diff) / static_cast<double>(total_diff + total_idle_diff);
 
   return percent;
 }
@@ -126,6 +129,9 @@ double SystemCpuUsageTracker::getCpuUsageBetweenLastTwoQueries() const {
   uint64_t total_sys_diff = total_sys_ - previous_total_sys_;
   uint64_t total_idle_diff = total_idle_ - previous_total_idle_;
   uint64_t total_diff = total_user_diff + total_sys_diff;
+  if (total_diff == 0) {
+    return -1.0;
+  }
   double percent = static_cast<double>(total_diff - total_idle_diff) / static_cast<double>(total_diff);
 
   return percent;
@@ -176,8 +182,10 @@ bool SystemCpuUsageTracker::isCurrentQuerySameAsPrevious() const {
 double SystemCpuUsageTracker::getCpuUsageBetweenLastTwoQueries() const {
   uint64_t total_ticks_since_last_time = total_ticks_-previous_total_ticks_;
   uint64_t idle_ticks_since_last_time  = idle_ticks_-previous_idle_ticks_;
-
-  double percent = static_cast<double>(total_ticks_since_last_time-idle_ticks_since_last_time)/static_cast<double>(total_ticks_since_last_time);
+  if (total_ticks_since_last_time == 0) {
+    return -1.0;
+  }
+  double percent = static_cast<double>(total_ticks_since_last_time - idle_ticks_since_last_time) / static_cast<double>(total_ticks_since_last_time);
 
   return percent;
 }
diff --git a/libminifi/test/unit/CpuUsageTest.cpp b/libminifi/test/unit/CpuUsageTest.cpp
index d9e6c06..c8ac357 100644
--- a/libminifi/test/unit/CpuUsageTest.cpp
+++ b/libminifi/test/unit/CpuUsageTest.cpp
@@ -49,7 +49,7 @@ TEST_CASE("Test System CPU Utilization", "[testcpuusage]") {
 
   org::apache::nifi::minifi::utils::SystemCpuUsageTracker hostTracker;
   org::apache::nifi::minifi::utils::ProcessCpuUsageTracker processTracker;
-  int vCores = std::thread::hardware_concurrency();
+  auto vCores = (std::max)(uint32_t{1}, std::thread::hardware_concurrency());
   auto test_start = std::chrono::system_clock::now();
   for (int i = 0; i < number_of_rounds; ++i) {
     {

[nifi-minifi-cpp] 03/03: MINIFICPP-1567 enable linter checks in extensions (part 2)

Posted by sz...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

szaszm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit 922b6e7adecdc0a79cc2b26ebbb77293175b3ac6
Author: Martin Zink <ma...@protonmail.com>
AuthorDate: Mon Jun 14 16:43:41 2021 +0200

    MINIFICPP-1567 enable linter checks in extensions (part 2)
    
    extensions: expression-language, gps, http-curl, usb-camera
    
    Closes #1097
    
    Signed-off-by: Marton Szasz <sz...@gmail.com>
---
 extensions/expression-language/CMakeLists.txt      |   1 +
 extensions/expression-language/Driver.h            |   8 +-
 extensions/expression-language/Expression.cpp      |  19 +-
 .../ExpressionContextBuilder.cpp                   |   5 +
 .../expression-language/ExpressionContextBuilder.h |   6 +-
 extensions/expression-language/ExpressionLoader.h  |   9 +-
 .../expression-language/ProcessContextExpr.cpp     |   2 +
 .../expression-language/ProcessContextExpr.h       |   9 +-
 extensions/expression-language/common/Value.h      |  11 +-
 .../impl/expression/Expression.h                   |  20 +-
 .../tests/ExpressionLanguageTests.cpp              | 719 ++++++++++-----------
 .../tests/RouteOnAttributeTests.cpp                |   1 -
 .../integration/UpdateAttributeIntegrationTest.cpp |   7 -
 extensions/gps/CMakeLists.txt                      |   1 +
 extensions/gps/GetGPS.cpp                          |  28 +-
 extensions/gps/GetGPS.h                            |  21 +-
 extensions/gps/GetGPSLoader.h                      |   9 +-
 extensions/http-curl/CMakeLists.txt                |   1 +
 extensions/http-curl/HTTPCurlLoader.h              |  10 +-
 extensions/http-curl/client/HTTPCallback.h         |  10 +-
 extensions/http-curl/client/HTTPClient.cpp         |  18 +-
 extensions/http-curl/client/HTTPClient.h           |  13 +-
 extensions/http-curl/client/HTTPStream.cpp         |   6 +-
 extensions/http-curl/client/HTTPStream.h           |   7 +-
 extensions/http-curl/processors/InvokeHTTP.cpp     |   9 -
 extensions/http-curl/processors/InvokeHTTP.h       |   9 +-
 extensions/http-curl/protocols/AgentPrinter.cpp    |   6 -
 extensions/http-curl/protocols/AgentPrinter.h      |  13 +-
 extensions/http-curl/protocols/RESTReceiver.h      |  12 +-
 extensions/http-curl/protocols/RESTSender.cpp      |   5 -
 extensions/http-curl/protocols/RESTSender.h        |  11 +-
 extensions/http-curl/sitetosite/HTTPProtocol.h     |  28 +-
 extensions/http-curl/sitetosite/HTTPTransaction.h  |   4 +
 extensions/http-curl/sitetosite/PeersEntity.h      |  10 +-
 .../http-curl/tests/C2DescribeManifestTest.cpp     |   2 +-
 extensions/http-curl/tests/C2NullConfiguration.cpp |   2 +-
 .../C2VerifyResourceConsumptionInHeartbeat.cpp     |   7 +-
 .../http-curl/tests/C2VerifyServeResults.cpp       |   4 +-
 extensions/http-curl/tests/CivetStream.h           |  12 +-
 extensions/http-curl/tests/HTTPHandlers.h          |  53 +-
 extensions/http-curl/tests/HTTPIntegrationBase.h   |  13 +-
 extensions/http-curl/tests/HTTPSiteToSiteTests.cpp |   2 +-
 .../http-curl/tests/HttpGetIntegrationTest.cpp     |   1 -
 .../http-curl/tests/HttpPostIntegrationTest.cpp    |   2 +-
 extensions/http-curl/tests/ServerAwareHandler.h    |   9 +-
 extensions/http-curl/tests/SiteToSiteRestTest.cpp  |   2 +-
 extensions/http-curl/tests/TestServer.h            |  11 +-
 .../http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp |   4 +-
 .../http-curl/tests/unit/HTTPClientTests.cpp       |   9 +-
 .../http-curl/tests/unit/InvokeHTTPTests.cpp       |   5 -
 extensions/usb-camera/CMakeLists.txt               |   1 +
 extensions/usb-camera/GetUSBCamera.cpp             |   3 +
 extensions/usb-camera/GetUSBCamera.h               |  10 +-
 53 files changed, 547 insertions(+), 653 deletions(-)

diff --git a/extensions/expression-language/CMakeLists.txt b/extensions/expression-language/CMakeLists.txt
index 69fa438..046cc45 100644
--- a/extensions/expression-language/CMakeLists.txt
+++ b/extensions/expression-language/CMakeLists.txt
@@ -104,3 +104,4 @@ target_link_libraries(minifi-expression-language-extensions date::tz RapidJSON C
 SET (EXPRESSION-LANGUAGE-EXTENSIONS minifi-expression-language-extensions PARENT_SCOPE)
 
 register_extension(minifi-expression-language-extensions)
+register_extension_linter(minifi-expression-language-extensions-linter)
diff --git a/extensions/expression-language/Driver.h b/extensions/expression-language/Driver.h
index 71dbbe4..c04d78c 100644
--- a/extensions/expression-language/Driver.h
+++ b/extensions/expression-language/Driver.h
@@ -15,13 +15,11 @@
  * limitations under the License.
  */
 
-#ifndef __EXPRESSION_LANGUAGE_DRIVER_H__
-#define __EXPRESSION_LANGUAGE_DRIVER_H__
+#pragma once
 
 #include <string>
 #include <map>
-#include <sstream>
-#include <expression/Expression.h>
+#include "expression/Expression.h"
 
 #undef yyFlexLexer
 #include <FlexLexer.h>
@@ -57,5 +55,3 @@ class Driver : public yyFlexLexer {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* __EXPRESSION_LANGUAGE_DRIVER_H__ */
diff --git a/extensions/expression-language/Expression.cpp b/extensions/expression-language/Expression.cpp
index 1b96f96..a420562 100644
--- a/extensions/expression-language/Expression.cpp
+++ b/extensions/expression-language/Expression.cpp
@@ -21,15 +21,17 @@
 #include <iomanip>
 #include <random>
 #include <algorithm>
+#include <regex>
+#include <functional>
+#include <string>
 
 #include "rapidjson/reader.h"
 #include "rapidjson/writer.h"
 #include "rapidjson/document.h"
 
-#include <utils/StringUtils.h>
-#include <utils/OsUtils.h>
-#include <expression/Expression.h>
-#include <regex>
+#include "utils/StringUtils.h"
+#include "utils/OsUtils.h"
+#include "expression/Expression.h"
 
 #ifndef DISABLE_CURL
 #ifdef WIN32
@@ -58,7 +60,6 @@
 #include <unistd.h>
 #endif
 
-#include "utils/StringUtils.h"
 #include "Driver.h"
 
 #ifdef EXPRESSION_LANGUAGE_USE_DATE
@@ -640,8 +641,7 @@ Value expr_toDate(const std::vector<Value> &args) {
 
 #else
 
-Value expr_format(const std::vector<Value>& args)
-{
+Value expr_format(const std::vector<Value>& args) {
   const std::chrono::milliseconds dur(args.at(0).asUnsignedLong());
   const std::chrono::time_point<std::chrono::system_clock> dt(dur);
   const auto unix_time = std::chrono::system_clock::to_time_t(dt);
@@ -686,8 +686,7 @@ Value expr_toDate(const std::vector<Value>&) {
 #endif  // EXPRESSION_LANGUAGE_USE_DATE
 
 Value expr_now(const std::vector<Value>& /*args*/) {
-  using namespace std::chrono;
-  int64_t unix_time_ms{duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count()};
+  int64_t unix_time_ms{std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()};
   return Value(unix_time_ms);
 }
 
@@ -751,7 +750,7 @@ Value expr_urlDecode(const std::vector<Value> &args) {
     int out_len;
     char *output = curl_easy_unescape(curl, arg_0.c_str(), static_cast<int>(arg_0.length()), &out_len);
     if (output != nullptr) {
-      auto result = std::string(output, static_cast<unsigned long>(out_len));
+      auto result = std::string(output, static_cast<size_t>(out_len));
       curl_free(output);
       curl_easy_cleanup(curl);
       return Value(result);
diff --git a/extensions/expression-language/ExpressionContextBuilder.cpp b/extensions/expression-language/ExpressionContextBuilder.cpp
index 9823e84..d546f1e 100644
--- a/extensions/expression-language/ExpressionContextBuilder.cpp
+++ b/extensions/expression-language/ExpressionContextBuilder.cpp
@@ -17,6 +17,11 @@
 
 #include "ExpressionContextBuilder.h"
 
+#include <memory>
+#include <string>
+
+#include "ProcessContextExpr.h"
+
 namespace org {
 namespace apache {
 namespace nifi {
diff --git a/extensions/expression-language/ExpressionContextBuilder.h b/extensions/expression-language/ExpressionContextBuilder.h
index 1b39aa8..ea20681 100644
--- a/extensions/expression-language/ExpressionContextBuilder.h
+++ b/extensions/expression-language/ExpressionContextBuilder.h
@@ -18,8 +18,10 @@
 #ifndef EXTENSIONS_EXPRESSION_LANGUAGE_EXPRESSIONCONTEXTBUILDER_H_
 #define EXTENSIONS_EXPRESSION_LANGUAGE_EXPRESSIONCONTEXTBUILDER_H_
 
+#include <string>
+#include <memory>
+
 #include "core/ProcessContextBuilder.h"
-#include "ProcessContextExpr.h"
 
 namespace org {
 namespace apache {
@@ -39,7 +41,7 @@ class ExpressionContextBuilder : public core::ProcessContextBuilder {
  public:
   ExpressionContextBuilder(const std::string &name, const minifi::utils::Identifier &uuid);
 
-  ExpressionContextBuilder(const std::string &name);
+  explicit ExpressionContextBuilder(const std::string &name);
 
   virtual ~ExpressionContextBuilder();
 
diff --git a/extensions/expression-language/ExpressionLoader.h b/extensions/expression-language/ExpressionLoader.h
index 9d07096..e593e03 100644
--- a/extensions/expression-language/ExpressionLoader.h
+++ b/extensions/expression-language/ExpressionLoader.h
@@ -15,12 +15,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_EXPRESSIONLOADER_H_
-#define EXTENSIONS_EXPRESSIONLOADER_H_
+#pragma once
+#include <vector>
+#include <string>
+#include <memory>
+
 #include "core/ClassLoader.h"
 #include "utils/StringUtils.h"
 #include "ExpressionContextBuilder.h"
-#include "core/controller/ControllerServiceProvider.h"
 
 /**
  * Object factory class loader for this extension.
@@ -66,4 +68,3 @@ class ExpressionObjectFactory : public core::ObjectFactory {
 extern "C" {
 DLL_EXPORT void *createExpressionFactory(void);
 }
-#endif /* EXTENSIONS_EXPRESSIONLOADER_H_ */
diff --git a/extensions/expression-language/ProcessContextExpr.cpp b/extensions/expression-language/ProcessContextExpr.cpp
index 6b21dd8..08e515b 100644
--- a/extensions/expression-language/ProcessContextExpr.cpp
+++ b/extensions/expression-language/ProcessContextExpr.cpp
@@ -17,6 +17,8 @@
 
 #include "ProcessContextExpr.h"
 #include <memory>
+#include <string>
+
 namespace org {
 namespace apache {
 namespace nifi {
diff --git a/extensions/expression-language/ProcessContextExpr.h b/extensions/expression-language/ProcessContextExpr.h
index 297ce74..192433d 100644
--- a/extensions/expression-language/ProcessContextExpr.h
+++ b/extensions/expression-language/ProcessContextExpr.h
@@ -15,9 +15,13 @@
  * limitations under the License.
  */
 
+#pragma once
+
 #include <ProcessContext.h>
 #include <memory>
-#include <impl/expression/Expression.h>
+#include <map>
+#include <string>
+#include "impl/expression/Expression.h"
 
 namespace org {
 namespace apache {
@@ -33,7 +37,6 @@ namespace core {
  */
 class ProcessContextExpr : public core::ProcessContext {
  public:
-
   /**
    std::forward of argument list did not work on all platform.
    **/
@@ -61,8 +64,8 @@ class ProcessContextExpr : public core::ProcessContext {
   bool getProperty(const Property &property, std::string &value, const std::shared_ptr<FlowFile> &flow_file) override;
 
   bool getDynamicProperty(const Property &property, std::string &value, const std::shared_ptr<FlowFile> &flow_file) override;
- protected:
 
+ protected:
   std::map<std::string, org::apache::nifi::minifi::expression::Expression> expressions_;
   std::map<std::string, org::apache::nifi::minifi::expression::Expression> dynamic_property_expressions_;
 
diff --git a/extensions/expression-language/common/Value.h b/extensions/expression-language/common/Value.h
index 1cb2e5e..885775a 100644
--- a/extensions/expression-language/common/Value.h
+++ b/extensions/expression-language/common/Value.h
@@ -20,9 +20,9 @@
 #include <iomanip>
 #include <limits>
 #include <algorithm>
+#include <utility>
 
-#ifndef NIFI_MINIFI_CPP_VALUE_H
-#define NIFI_MINIFI_CPP_VALUE_H
+#pragma once
 
 namespace org {
 namespace apache {
@@ -36,7 +36,6 @@ namespace expression {
  */
 class Value {
  public:
-
   /**
    * Construct a default (NULL) value
    */
@@ -79,11 +78,11 @@ class Value {
 
   bool isNull() const {
     return is_null_;
-  };
+  }
 
   bool isString() const {
     return is_string_;
-  };
+  }
 
   bool isDecimal() const {
     if (is_long_double_) {
@@ -260,5 +259,3 @@ class Value {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif  // NIFI_MINIFI_CPP_VALUE_H
diff --git a/extensions/expression-language/impl/expression/Expression.h b/extensions/expression-language/impl/expression/Expression.h
index f66f81d..6e1234e 100644
--- a/extensions/expression-language/impl/expression/Expression.h
+++ b/extensions/expression-language/impl/expression/Expression.h
@@ -15,8 +15,7 @@
  * limitations under the License.
  */
 
-#ifndef EXTENSIONS_EXPRESSIONLANGUAGE_IMPL_EXPRESSION_H
-#define EXTENSIONS_EXPRESSIONLANGUAGE_IMPL_EXPRESSION_H
+#pragma once
 
 #define EXPRESSION_LANGUAGE_USE_REGEX
 
@@ -32,13 +31,15 @@
 #undef EXPRESSION_LANGUAGE_USE_DATE
 #endif
 
-#include "common/Value.h"
-#include <FlowFile.h>
-#include <VariableRegistry.h>
-
 #include <string>
 #include <memory>
 #include <functional>
+#include <utility>
+#include <vector>
+
+#include "common/Value.h"
+#include "FlowFile.h"
+#include "VariableRegistry.h"
 
 namespace org {
 namespace apache {
@@ -49,12 +50,12 @@ namespace expression {
 struct Parameters {
   std::weak_ptr<core::FlowFile> flow_file;
   std::weak_ptr<core::VariableRegistry> registry_;
-  Parameters(std::shared_ptr<core::VariableRegistry> reg, std::shared_ptr<core::FlowFile> ff = nullptr)
+  explicit Parameters(std::shared_ptr<core::VariableRegistry> reg, std::shared_ptr<core::FlowFile> ff = nullptr)
       : registry_(reg) {
     flow_file = ff;
   }
 
-  Parameters(std::shared_ptr<core::FlowFile> ff = nullptr) {
+  explicit Parameters(std::shared_ptr<core::FlowFile> ff = nullptr) {
     flow_file = ff;
   }
 };
@@ -68,7 +69,6 @@ static const std::function<Value(const Parameters &params, const std::vector<Exp
  */
 class Expression {
  public:
-
   Expression() {
     val_fn_ = NOOP_FN;
   }
@@ -199,5 +199,3 @@ Expression make_function_composition(const Expression &arg, const std::vector<st
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif  // EXTENSIONS_EXPRESSIONLANGUAGE_IMPL_EXPRESSION_H
diff --git a/extensions/expression-language/tests/ExpressionLanguageTests.cpp b/extensions/expression-language/tests/ExpressionLanguageTests.cpp
index 91eefdb..22e9bbe 100644
--- a/extensions/expression-language/tests/ExpressionLanguageTests.cpp
+++ b/extensions/expression-language/tests/ExpressionLanguageTests.cpp
@@ -40,102 +40,102 @@
 
 namespace expression = org::apache::nifi::minifi::expression;
 
-TEST_CASE("Trivial static expression", "[expressionLanguageTestTrivialStaticExpr]") {  // NOLINT
-  REQUIRE("a" == expression::make_static("a")({ }).asString());
+TEST_CASE("Trivial static expression", "[expressionLanguageTestTrivialStaticExpr]") {
+  REQUIRE("a" == expression::make_static("a")(expression::Parameters{ }).asString());
 }
 
-TEST_CASE("Text expression", "[expressionLanguageTestTextExpression]") {  // NOLINT
+TEST_CASE("Text expression", "[expressionLanguageTestTextExpression]") {
   auto expr = expression::compile("text");
-  REQUIRE("text" == expr({ }).asString());
+  REQUIRE("text" == expr(expression::Parameters{ }).asString());
 }
 
-TEST_CASE("Text expression with escaped dollar", "[expressionLanguageTestEscapedDollar]") {  // NOLINT
+TEST_CASE("Text expression with escaped dollar", "[expressionLanguageTestEscapedDollar]") {
   auto expr = expression::compile("te$$xt");
-  REQUIRE("te$xt" == expr({ }).asString());
+  REQUIRE("te$xt" == expr(expression::Parameters{ }).asString());
 }
 
-TEST_CASE("Attribute expression", "[expressionLanguageTestAttributeExpression]") {  // NOLINT
+TEST_CASE("Attribute expression", "[expressionLanguageTestAttributeExpression]") {
   auto flow_file = std::make_shared<core::FlowFile>();
   flow_file->addAttribute("attr_a", "__attr_value_a__");
   auto expr = expression::compile("text_before${attr_a}text_after");
-  REQUIRE("text_before__attr_value_a__text_after" == expr({ flow_file }).asString());
+  REQUIRE("text_before__attr_value_a__text_after" == expr(expression::Parameters{ flow_file }).asString());
 }
 
-TEST_CASE("Attribute expression (Null)", "[expressionLanguageTestAttributeExpressionNull]") {  // NOLINT
+TEST_CASE("Attribute expression (Null)", "[expressionLanguageTestAttributeExpressionNull]") {
   auto expr = expression::compile("text_before${attr_a}text_after");
   std::shared_ptr<core::FlowFile> flow_file = nullptr;
-  REQUIRE("text_beforetext_after" == expr( { flow_file }).asString());
+  REQUIRE("text_beforetext_after" == expr(expression::Parameters{ flow_file }).asString());
 }
 
-TEST_CASE("Multi-attribute expression", "[expressionLanguageTestMultiAttributeExpression]") {  // NOLINT
+TEST_CASE("Multi-attribute expression", "[expressionLanguageTestMultiAttributeExpression]") {
   auto flow_file = std::make_shared<core::FlowFile>();
   flow_file->addAttribute("attr_a", "__attr_value_a__");
   flow_file->addAttribute("attr_b", "__attr_value_b__");
   auto expr = expression::compile("text_before${attr_a}text_between${attr_b}text_after");
-  REQUIRE("text_before__attr_value_a__text_between__attr_value_b__text_after" == expr({ flow_file }).asString());
+  REQUIRE("text_before__attr_value_a__text_between__attr_value_b__text_after" == expr(expression::Parameters{ flow_file }).asString());
 }
 
 TEST_CASE("Multi-flowfile attribute expression",
-    "[expressionLanguageTestMultiFlowfileAttributeExpression]") {  // NOLINT
+    "[expressionLanguageTestMultiFlowfileAttributeExpression]") {
   auto expr = expression::compile("text_before${attr_a}text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr_a", "__flow_a_attr_value_a__");
-  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 
   auto flow_file_b = std::make_shared<core::FlowFile>();
   flow_file_b->addAttribute("attr_a", "__flow_b_attr_value_a__");
-  REQUIRE("text_before__flow_b_attr_value_a__text_after" == expr({ flow_file_b }).asString());
+  REQUIRE("text_before__flow_b_attr_value_a__text_after" == expr(expression::Parameters{ flow_file_b }).asString());
 }
 
-TEST_CASE("Attribute expression with whitespace", "[expressionLanguageTestAttributeExpressionWhitespace]") {  // NOLINT
+TEST_CASE("Attribute expression with whitespace", "[expressionLanguageTestAttributeExpressionWhitespace]") {
   auto flow_file = std::make_shared<core::FlowFile>();
   flow_file->addAttribute("attr_a", "__attr_value_a__");
   auto expr = expression::compile("text_before${\n\tattr_a \r}text_after");
-  REQUIRE("text_before__attr_value_a__text_after" == expr({ flow_file }).asString());
+  REQUIRE("text_before__attr_value_a__text_after" == expr(expression::Parameters{ flow_file }).asString());
 }
 
-TEST_CASE("Special characters expression", "[expressionLanguageTestSpecialCharactersExpression]") {  // NOLINT
+TEST_CASE("Special characters expression", "[expressionLanguageTestSpecialCharactersExpression]") {
   auto expr = expression::compile("text_before|{}()[],:;\\/*#'\" \t\r\n${attr_a}}()text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr_a", "__flow_a_attr_value_a__");
-  REQUIRE("text_before|{}()[],:;\\/*#'\" \t\r\n__flow_a_attr_value_a__}()text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before|{}()[],:;\\/*#'\" \t\r\n__flow_a_attr_value_a__}()text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("UTF-8 characters expression", "[expressionLanguageTestUTF8Expression]") {  // NOLINT
+TEST_CASE("UTF-8 characters expression", "[expressionLanguageTestUTF8Expression]") {
   auto expr = expression::compile("text_before¥£€¢₡₢₣₤₥₦₧₨₩₪₫₭₮₯₹${attr_a}text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr_a", "__flow_a_attr_value_a__");
-  REQUIRE("text_before¥£€¢₡₢₣₤₥₦₧₨₩₪₫₭₮₯₹__flow_a_attr_value_a__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before¥£€¢₡₢₣₤₥₦₧₨₩₪₫₭₮₯₹__flow_a_attr_value_a__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("UTF-8 characters attribute", "[expressionLanguageTestUTF8Attribute]") {  // NOLINT
+TEST_CASE("UTF-8 characters attribute", "[expressionLanguageTestUTF8Attribute]") {
   auto expr = expression::compile("text_before${attr_a}text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr_a", "__¥£€¢₡₢₣₤₥₦₧₨₩₪₫₭₮₯₹__");
-  REQUIRE("text_before__¥£€¢₡₢₣₤₥₦₧₨₩₪₫₭₮₯₹__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before__¥£€¢₡₢₣₤₥₦₧₨₩₪₫₭₮₯₹__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Single quoted attribute expression", "[expressionLanguageTestSingleQuotedAttributeExpression]") {  // NOLINT
+TEST_CASE("Single quoted attribute expression", "[expressionLanguageTestSingleQuotedAttributeExpression]") {
   auto expr = expression::compile("text_before${'|{}()[],:;\\\\/*# \t\r\n$'}text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("|{}()[],:;\\/*# \t\r\n$", "__flow_a_attr_value_a__");
-  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Double quoted attribute expression", "[expressionLanguageTestDoubleQuotedAttributeExpression]") {  // NOLINT
+TEST_CASE("Double quoted attribute expression", "[expressionLanguageTestDoubleQuotedAttributeExpression]") {
   auto expr = expression::compile("text_before${\"|{}()[],:;\\\\/*# \t\r\n$\"}text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("|{}()[],:;\\/*# \t\r\n$", "__flow_a_attr_value_a__");
-  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Hostname function", "[expressionLanguageTestHostnameFunction]") {  // NOLINT
+TEST_CASE("Hostname function", "[expressionLanguageTestHostnameFunction]") {
   auto expr = expression::compile("text_before${\n\t hostname ()\n\t }text_after");
 
   char hostname[1024];
@@ -146,35 +146,35 @@ TEST_CASE("Hostname function", "[expressionLanguageTestHostnameFunction]") {  //
   expected.append("text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
-  REQUIRE(expected == expr( { flow_file_a }).asString());
+  REQUIRE(expected == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("ToUpper function", "[expressionLanguageTestToUpperFunction]") {  // NOLINT
+TEST_CASE("ToUpper function", "[expressionLanguageTestToUpperFunction]") {
   auto expr = expression::compile(R"(text_before${
                                        attr_a : toUpper()
                                      }text_after)");
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr_a", "__flow_a_attr_value_a__");
-  REQUIRE("text_before__FLOW_A_ATTR_VALUE_A__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before__FLOW_A_ATTR_VALUE_A__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("ToUpper function w/o whitespace", "[expressionLanguageTestToUpperFunctionWithoutWhitespace]") {  // NOLINT
+TEST_CASE("ToUpper function w/o whitespace", "[expressionLanguageTestToUpperFunctionWithoutWhitespace]") {
   auto expr = expression::compile(R"(text_before${attr_a:toUpper()}text_after)");
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr_a", "__flow_a_attr_value_a__");
-  REQUIRE("text_before__FLOW_A_ATTR_VALUE_A__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before__FLOW_A_ATTR_VALUE_A__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("ToLower function", "[expressionLanguageTestToLowerFunction]") {  // NOLINT
+TEST_CASE("ToLower function", "[expressionLanguageTestToLowerFunction]") {
   auto expr = expression::compile(R"(text_before${
                                        attr_a : toLower()
                                      }text_after)");
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr_a", "__FLOW_A_ATTR_VALUE_A__");
-  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before__flow_a_attr_value_a__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("GetFile PutFile dynamic attribute", "[expressionLanguageTestGetFilePutFileDynamicAttribute]") {  // NOLINT
+TEST_CASE("GetFile PutFile dynamic attribute", "[expressionLanguageTestGetFilePutFileDynamicAttribute]") {
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
@@ -244,1013 +244,1010 @@ TEST_CASE("GetFile PutFile dynamic attribute", "[expressionLanguageTestGetFilePu
   REQUIRE(LogTestController::getInstance().contains("key:prop_attr value:custom_value_added"));
 }
 
-TEST_CASE("Substring 2 arg", "[expressionLanguageSubstring2]") {  // NOLINT
+TEST_CASE("Substring 2 arg", "[expressionLanguageSubstring2]") {
   auto expr = expression::compile("text_before${attr:substring(6, 8)}text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "__flow_a_attr_value_a__");
-  REQUIRE("text_before_a_attr_text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before_a_attr_text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Substring 1 arg", "[expressionLanguageSubstring1]") {  // NOLINT
+TEST_CASE("Substring 1 arg", "[expressionLanguageSubstring1]") {
   auto expr = expression::compile("text_before${attr:substring(6)}text_after");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "__flow_a_attr_value_a__");
-  REQUIRE("text_before_a_attr_value_a__text_after" == expr({ flow_file_a }).asString());
+  REQUIRE("text_before_a_attr_value_a__text_after" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Substring Before", "[expressionLanguageSubstringBefore]") {  // NOLINT
+TEST_CASE("Substring Before", "[expressionLanguageSubstringBefore]") {
   auto expr = expression::compile("${attr:substringBefore('attr_value_a__')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "__flow_a_attr_value_a__");
-  REQUIRE("__flow_a_" == expr({ flow_file_a }).asString());
+  REQUIRE("__flow_a_" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Substring Before Last", "[expressionLanguageSubstringBeforeLast]") {  // NOLINT
+TEST_CASE("Substring Before Last", "[expressionLanguageSubstringBeforeLast]") {
   auto expr = expression::compile("${attr:substringBeforeLast('_a')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "__flow_a_attr_value_a__");
-  REQUIRE("__flow_a_attr_value" == expr({ flow_file_a }).asString());
+  REQUIRE("__flow_a_attr_value" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Substring After", "[expressionLanguageSubstringAfter]") {  // NOLINT
+TEST_CASE("Substring After", "[expressionLanguageSubstringAfter]") {
   auto expr = expression::compile("${attr:substringAfter('__flow_a')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "__flow_a_attr_value_a__");
-  REQUIRE("_attr_value_a__" == expr({ flow_file_a }).asString());
+  REQUIRE("_attr_value_a__" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Substring After Last", "[expressionLanguageSubstringAfterLast]") {  // NOLINT
+TEST_CASE("Substring After Last", "[expressionLanguageSubstringAfterLast]") {
   auto expr = expression::compile("${attr:substringAfterLast('_a')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "__flow_a_attr_value_a__");
-  REQUIRE("__" == expr({ flow_file_a }).asString());
+  REQUIRE("__" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Get Delimited", "[expressionLanguageGetDelimited]") {  // NOLINT
+TEST_CASE("Get Delimited", "[expressionLanguageGetDelimited]") {
   auto expr = expression::compile("${attr:getDelimitedField(2)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "\"Jacobson, John\", 32, Mr.");
-  REQUIRE(" 32" == expr({ flow_file_a }).asString());
+  REQUIRE(" 32" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Get Delimited 2", "[expressionLanguageGetDelimited2]") {  // NOLINT
+TEST_CASE("Get Delimited 2", "[expressionLanguageGetDelimited2]") {
   auto expr = expression::compile("${attr:getDelimitedField(1)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "\"Jacobson, John\", 32, Mr.");
-  REQUIRE("\"Jacobson, John\"" == expr({ flow_file_a }).asString());
+  REQUIRE("\"Jacobson, John\"" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Get Delimited 3", "[expressionLanguageGetDelimited3]") {  // NOLINT
+TEST_CASE("Get Delimited 3", "[expressionLanguageGetDelimited3]") {
   auto expr = expression::compile("${attr:getDelimitedField(1, ',', '\\\"', '\\\\', 'true')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "\"Jacobson, John\", 32, Mr.");
-  REQUIRE("Jacobson, John" == expr({ flow_file_a }).asString());
+  REQUIRE("Jacobson, John" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Starts With", "[expressionLanguageStartsWith]") {  // NOLINT
+TEST_CASE("Starts With", "[expressionLanguageStartsWith]") {
   auto expr = expression::compile("${attr:startsWith('a brand')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "A BRAND TEST");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Starts With 2", "[expressionLanguageStartsWith2]") {  // NOLINT
+TEST_CASE("Starts With 2", "[expressionLanguageStartsWith2]") {
   auto expr = expression::compile("${attr:startsWith('a brand')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand TEST");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Ends With", "[expressionLanguageEndsWith]") {  // NOLINT
+TEST_CASE("Ends With", "[expressionLanguageEndsWith]") {
   auto expr = expression::compile("${attr:endsWith('txt')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.TXT");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Ends With 2", "[expressionLanguageEndsWith2]") {  // NOLINT
+TEST_CASE("Ends With 2", "[expressionLanguageEndsWith2]") {
   auto expr = expression::compile("${attr:endsWith('TXT')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.TXT");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Contains", "[expressionLanguageContains]") {  // NOLINT
+TEST_CASE("Contains", "[expressionLanguageContains]") {
   auto expr = expression::compile("${attr:contains('new')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Contains 2", "[expressionLanguageContains2]") {  // NOLINT
+TEST_CASE("Contains 2", "[expressionLanguageContains2]") {
   auto expr = expression::compile("${attr:contains('NEW')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("In", "[expressionLanguageIn]") {  // NOLINT
+TEST_CASE("In", "[expressionLanguageIn]") {
   auto expr = expression::compile("${attr:in('PAUL', 'JOHN', 'MIKE')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "JOHN");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("In 2", "[expressionLanguageIn2]") {  // NOLINT
+TEST_CASE("In 2", "[expressionLanguageIn2]") {
   auto expr = expression::compile("${attr:in('RED', 'GREEN', 'BLUE')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "JOHN");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Substring Before No Args", "[expressionLanguageSubstringBeforeNoArgs]") {  // NOLINT
+TEST_CASE("Substring Before No Args", "[expressionLanguageSubstringBeforeNoArgs]") {
   REQUIRE_THROWS_WITH(expression::compile("${attr:substringBefore()}"), "Expression language function substringBefore called with 1 argument(s), but 2 are required");
 }
 
-TEST_CASE("Substring After No Args", "[expressionLanguageSubstringAfterNoArgs]") {  // NOLINT
-  REQUIRE_THROWS_WITH(expression::compile("${attr:substringAfter()}")
-  ;
-                      ,
-                      "Expression language function substringAfter called with 1 argument(s), but 2 are required");
+TEST_CASE("Substring After No Args", "[expressionLanguageSubstringAfterNoArgs]") {
+  REQUIRE_THROWS_WITH(expression::compile("${attr:substringAfter()}"), "Expression language function substringAfter called with 1 argument(s), but 2 are required");
 }
 
 #ifdef EXPRESSION_LANGUAGE_USE_REGEX
 
-TEST_CASE("Replace", "[expressionLanguageReplace]") {  // NOLINT
+TEST_CASE("Replace", "[expressionLanguageReplace]") {
   auto expr = expression::compile("${attr:replace('.', '_')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("a brand new filename_txt" == expr({ flow_file_a }).asString());
+  REQUIRE("a brand new filename_txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace 2", "[expressionLanguageReplace2]") {  // NOLINT
+TEST_CASE("Replace 2", "[expressionLanguageReplace2]") {
   auto expr = expression::compile("${attr:replace(' ', '.')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("a.brand.new.filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("a.brand.new.filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace First", "[expressionLanguageReplaceFirst]") {  // NOLINT
+TEST_CASE("Replace First", "[expressionLanguageReplaceFirst]") {
   auto expr = expression::compile("${attr:replaceFirst('a', 'the')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("the brand new filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("the brand new filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace First Regex", "[expressionLanguageReplaceFirstRegex]") {  // NOLINT
+TEST_CASE("Replace First Regex", "[expressionLanguageReplaceFirstRegex]") {
   auto expr = expression::compile("${attr:replaceFirst('[br]', 'g')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("a grand new filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("a grand new filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace All", "[expressionLanguageReplaceAll]") {  // NOLINT
+TEST_CASE("Replace All", "[expressionLanguageReplaceAll]") {
   auto expr = expression::compile("${attr:replaceAll('\\\\..*', '')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("a brand new filename" == expr({ flow_file_a }).asString());
+  REQUIRE("a brand new filename" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace All 2", "[expressionLanguageReplaceAll2]") {  // NOLINT
+TEST_CASE("Replace All 2", "[expressionLanguageReplaceAll2]") {
   auto expr = expression::compile("${attr:replaceAll('a brand (new)', '$1')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("new filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("new filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace All 3", "[expressionLanguageReplaceAll3]") {  // NOLINT
+TEST_CASE("Replace All 3", "[expressionLanguageReplaceAll3]") {
   auto expr = expression::compile("${attr:replaceAll('XYZ', 'ZZZ')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("a brand new filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("a brand new filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace Null", "[expressionLanguageReplaceNull]") {  // NOLINT
+TEST_CASE("Replace Null", "[expressionLanguageReplaceNull]") {
   auto expr = expression::compile("${attr:replaceNull('abc')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("a brand new filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("a brand new filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace Null 2", "[expressionLanguageReplaceNull2]") {  // NOLINT
+TEST_CASE("Replace Null 2", "[expressionLanguageReplaceNull2]") {
   auto expr = expression::compile("${attr:replaceNull('abc')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr2", "a brand new filename.txt");
-  REQUIRE("abc" == expr({ flow_file_a }).asString());
+  REQUIRE("abc" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace Empty", "[expressionLanguageReplaceEmpty]") {  // NOLINT
+TEST_CASE("Replace Empty", "[expressionLanguageReplaceEmpty]") {
   auto expr = expression::compile("${attr:replaceEmpty('abc')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("a brand new filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("a brand new filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace Empty 2", "[expressionLanguageReplaceEmpty2]") {  // NOLINT
+TEST_CASE("Replace Empty 2", "[expressionLanguageReplaceEmpty2]") {
   auto expr = expression::compile("${attr:replaceEmpty('abc')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "  \t  \r  \n  ");
-  REQUIRE("abc" == expr({ flow_file_a }).asString());
+  REQUIRE("abc" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Replace Empty 3", "[expressionLanguageReplaceEmpty2]") {  // NOLINT
+TEST_CASE("Replace Empty 3", "[expressionLanguageReplaceEmpty2]") {
   auto expr = expression::compile("${attr:replaceEmpty('abc')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr2", "test");
-  REQUIRE("abc" == expr({ flow_file_a }).asString());
+  REQUIRE("abc" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Matches", "[expressionLanguageMatches]") {  // NOLINT
+TEST_CASE("Matches", "[expressionLanguageMatches]") {
   auto expr = expression::compile("${attr:matches('^(Ct|Bt|At):.*t$')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "At:est");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Matches 2", "[expressionLanguageMatches2]") {  // NOLINT
+TEST_CASE("Matches 2", "[expressionLanguageMatches2]") {
   auto expr = expression::compile("${attr:matches('^(Ct|Bt|At):.*t$')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "At:something");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Matches 3", "[expressionLanguageMatches3]") {  // NOLINT
+TEST_CASE("Matches 3", "[expressionLanguageMatches3]") {
   auto expr = expression::compile("${attr:matches('(Ct|Bt|At):.*t')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", " At:est");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Find", "[expressionLanguageFind]") {  // NOLINT
+TEST_CASE("Find", "[expressionLanguageFind]") {
   auto expr = expression::compile("${attr:find('a [Bb]rand [Nn]ew')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Find 2", "[expressionLanguageFind2]") {  // NOLINT
+TEST_CASE("Find 2", "[expressionLanguageFind2]") {
   auto expr = expression::compile("${attr:find('Brand.*')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Find 3", "[expressionLanguageFind3]") {  // NOLINT
+TEST_CASE("Find 3", "[expressionLanguageFind3]") {
   auto expr = expression::compile("${attr:find('brand')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("IndexOf", "[expressionLanguageIndexOf]") {  // NOLINT
+TEST_CASE("IndexOf", "[expressionLanguageIndexOf]") {
   auto expr = expression::compile("${attr:indexOf('a.*txt')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("-1" == expr({ flow_file_a }).asString());
+  REQUIRE("-1" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("IndexOf2", "[expressionLanguageIndexOf2]") {  // NOLINT
+TEST_CASE("IndexOf2", "[expressionLanguageIndexOf2]") {
   auto expr = expression::compile("${attr:indexOf('.')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("20" == expr({ flow_file_a }).asString());
+  REQUIRE("20" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("IndexOf3", "[expressionLanguageIndexOf3]") {  // NOLINT
+TEST_CASE("IndexOf3", "[expressionLanguageIndexOf3]") {
   auto expr = expression::compile("${attr:indexOf('a')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("0" == expr({ flow_file_a }).asString());
+  REQUIRE("0" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("IndexOf4", "[expressionLanguageIndexOf4]") {  // NOLINT
+TEST_CASE("IndexOf4", "[expressionLanguageIndexOf4]") {
   auto expr = expression::compile("${attr:indexOf(' ')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("1" == expr({ flow_file_a }).asString());
+  REQUIRE("1" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LastIndexOf", "[expressionLanguageLastIndexOf]") {  // NOLINT
+TEST_CASE("LastIndexOf", "[expressionLanguageLastIndexOf]") {
   auto expr = expression::compile("${attr:lastIndexOf('a.*txt')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("-1" == expr({ flow_file_a }).asString());
+  REQUIRE("-1" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LastIndexOf2", "[expressionLanguageLastIndexOf2]") {  // NOLINT
+TEST_CASE("LastIndexOf2", "[expressionLanguageLastIndexOf2]") {
   auto expr = expression::compile("${attr:lastIndexOf('.')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("20" == expr({ flow_file_a }).asString());
+  REQUIRE("20" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LastIndexOf3", "[expressionLanguageLastIndexOf3]") {  // NOLINT
+TEST_CASE("LastIndexOf3", "[expressionLanguageLastIndexOf3]") {
   auto expr = expression::compile("${attr:lastIndexOf('a')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("17" == expr({ flow_file_a }).asString());
+  REQUIRE("17" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LastIndexOf4", "[expressionLanguageLastIndexOf4]") {  // NOLINT
+TEST_CASE("LastIndexOf4", "[expressionLanguageLastIndexOf4]") {
   auto expr = expression::compile("${attr:lastIndexOf(' ')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "a brand new filename.txt");
-  REQUIRE("11" == expr({ flow_file_a }).asString());
+  REQUIRE("11" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
 #endif  // EXPRESSION_LANGUAGE_USE_REGEX
 
-TEST_CASE("Plus Integer", "[expressionLanguagePlusInteger]") {  // NOLINT
+TEST_CASE("Plus Integer", "[expressionLanguagePlusInteger]") {
   auto expr = expression::compile("${attr:plus(13)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11");
-  REQUIRE("24" == expr({ flow_file_a }).asString());
+  REQUIRE("24" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Plus Decimal", "[expressionLanguagePlusDecimal]") {  // NOLINT
+TEST_CASE("Plus Decimal", "[expressionLanguagePlusDecimal]") {
   auto expr = expression::compile("${attr:plus(-13.34567)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11.1");
-  REQUIRE("-2.24567" == expr({ flow_file_a }).asString());
+  REQUIRE("-2.24567" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Plus Exponent", "[expressionLanguagePlusExponent]") {  // NOLINT
+TEST_CASE("Plus Exponent", "[expressionLanguagePlusExponent]") {
   auto expr = expression::compile("${attr:plus(10e+6)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11");
-  REQUIRE("10000011" == expr({ flow_file_a }).asString());
+  REQUIRE("10000011" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Plus Exponent 2", "[expressionLanguagePlusExponent2]") {  // NOLINT
+TEST_CASE("Plus Exponent 2", "[expressionLanguagePlusExponent2]") {
   auto expr = expression::compile("${attr:plus(10e+6)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11.345678901234");
-  REQUIRE("10000011.345678901234351" == expr({ flow_file_a }).asString());
+  REQUIRE("10000011.345678901234351" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Minus Integer", "[expressionLanguageMinusInteger]") {  // NOLINT
+TEST_CASE("Minus Integer", "[expressionLanguageMinusInteger]") {
   auto expr = expression::compile("${attr:minus(13)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11");
-  REQUIRE("-2" == expr({ flow_file_a }).asString());
+  REQUIRE("-2" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Minus Decimal", "[expressionLanguageMinusDecimal]") {  // NOLINT
+TEST_CASE("Minus Decimal", "[expressionLanguageMinusDecimal]") {
   auto expr = expression::compile("${attr:minus(-13.34567)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11.1");
-  REQUIRE("24.44567" == expr({ flow_file_a }).asString());
+  REQUIRE("24.44567" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Multiply Integer", "[expressionLanguageMultiplyInteger]") {  // NOLINT
+TEST_CASE("Multiply Integer", "[expressionLanguageMultiplyInteger]") {
   auto expr = expression::compile("${attr:multiply(13)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11");
-  REQUIRE("143" == expr({ flow_file_a }).asString());
+  REQUIRE("143" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Multiply Decimal", "[expressionLanguageMultiplyDecimal]") {  // NOLINT
+TEST_CASE("Multiply Decimal", "[expressionLanguageMultiplyDecimal]") {
   auto expr = expression::compile("${attr:multiply(-13.34567)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11.1");
-  REQUIRE("-148.136937" == expr({ flow_file_a }).asString());
+  REQUIRE("-148.136937" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Divide Integer", "[expressionLanguageDivideInteger]") {  // NOLINT
+TEST_CASE("Divide Integer", "[expressionLanguageDivideInteger]") {
   auto expr = expression::compile("${attr:divide(13)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11");
-  REQUIRE("0.846153846153846" == expr({ flow_file_a }).asString());
+  REQUIRE("0.846153846153846" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Divide Decimal", "[expressionLanguageDivideDecimal]") {  // NOLINT
+TEST_CASE("Divide Decimal", "[expressionLanguageDivideDecimal]") {
   auto expr = expression::compile("${attr:divide(-13.34567)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "11.1");
-  REQUIRE("-0.831730441409086" == expr({ flow_file_a }).asString());
+  REQUIRE("-0.831730441409086" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("To Radix", "[expressionLanguageToRadix]") {  // NOLINT
+TEST_CASE("To Radix", "[expressionLanguageToRadix]") {
   auto expr = expression::compile("${attr:toRadix(2,16)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "10");
-  REQUIRE("0000000000001010" == expr({ flow_file_a }).asString());
+  REQUIRE("0000000000001010" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("To Radix 2", "[expressionLanguageToRadix2]") {  // NOLINT
+TEST_CASE("To Radix 2", "[expressionLanguageToRadix2]") {
   auto expr = expression::compile("${attr:toRadix(16)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "13");
-  REQUIRE("d" == expr({ flow_file_a }).asString());
+  REQUIRE("d" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("To Radix 3", "[expressionLanguageToRadix3]") {  // NOLINT
+TEST_CASE("To Radix 3", "[expressionLanguageToRadix3]") {
   auto expr = expression::compile("${attr:toRadix(23,8)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "-2347");
-  REQUIRE("-000004a1" == expr({ flow_file_a }).asString());
+  REQUIRE("-000004a1" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("From Radix", "[expressionLanguageFromRadix]") {  // NOLINT
+TEST_CASE("From Radix", "[expressionLanguageFromRadix]") {
   auto expr = expression::compile("${attr:fromRadix(2)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "0000000000001010");
-  REQUIRE("10" == expr({ flow_file_a }).asString());
+  REQUIRE("10" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("From Radix 2", "[expressionLanguageFromRadix2]") {  // NOLINT
+TEST_CASE("From Radix 2", "[expressionLanguageFromRadix2]") {
   auto expr = expression::compile("${attr:fromRadix(16)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "d");
-  REQUIRE("13" == expr({ flow_file_a }).asString());
+  REQUIRE("13" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("From Radix 3", "[expressionLanguageFromRadix3]") {  // NOLINT
+TEST_CASE("From Radix 3", "[expressionLanguageFromRadix3]") {
   auto expr = expression::compile("${attr:fromRadix(23)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "-000004a1");
-  REQUIRE("-2347" == expr({ flow_file_a }).asString());
+  REQUIRE("-2347" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Random", "[expressionLanguageRandom]") {  // NOLINT
+TEST_CASE("Random", "[expressionLanguageRandom]") {
   auto expr = expression::compile("${random()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
-  auto result = expr( { flow_file_a }).asSignedLong();
+  auto result = expr(expression::Parameters{ flow_file_a }).asSignedLong();
   REQUIRE(result > 0);
 }
 
-TEST_CASE("Chained call", "[expressionChainedCall]") {  // NOLINT
+TEST_CASE("Chained call", "[expressionChainedCall]") {
   auto expr = expression::compile("${attr:multiply(3):plus(1)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE("22" == expr({ flow_file_a }).asString());
+  REQUIRE("22" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Chained call 2", "[expressionChainedCall2]") {  // NOLINT
+TEST_CASE("Chained call 2", "[expressionChainedCall2]") {
   auto expr = expression::compile("${literal(10):multiply(2):plus(1):multiply(2)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
-  REQUIRE(42 == expr( { flow_file_a }).asSignedLong());
+  REQUIRE(42 == expr(expression::Parameters{ flow_file_a }).asSignedLong());
 }
 
-TEST_CASE("Chained call 3", "[expressionChainedCall3]") {  // NOLINT
+TEST_CASE("Chained call 3", "[expressionChainedCall3]") {
   auto expr = expression::compile("${literal(10):multiply(2):plus(${attr:multiply(2)}):multiply(${attr})}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE("238" == expr({ flow_file_a }).asString());
+  REQUIRE("238" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LiteralBool", "[expressionLiteralBool]") {  // NOLINT
+TEST_CASE("LiteralBool", "[expressionLiteralBool]") {
   auto expr = expression::compile("${literal(true)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE(true == expr({ flow_file_a }).asBoolean());
+  REQUIRE(true == expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("LiteralBool 2", "[expressionLiteralBool2]") {  // NOLINT
+TEST_CASE("LiteralBool 2", "[expressionLiteralBool2]") {
   auto expr = expression::compile("${literal(false)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE(false == expr({ flow_file_a }).asBoolean());
+  REQUIRE(false == expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Is Null", "[expressionIsNull]") {  // NOLINT
+TEST_CASE("Is Null", "[expressionIsNull]") {
   auto expr = expression::compile("${filename:isNull()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Is Null 2", "[expressionIsNull2]") {  // NOLINT
+TEST_CASE("Is Null 2", "[expressionIsNull2]") {
   auto expr = expression::compile("${filename:isNull()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "7");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Not Null", "[expressionNotNull]") {  // NOLINT
+TEST_CASE("Not Null", "[expressionNotNull]") {
   auto expr = expression::compile("${filename:notNull()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Not Null 2", "[expressionNotNull2]") {  // NOLINT
+TEST_CASE("Not Null 2", "[expressionNotNull2]") {
   auto expr = expression::compile("${filename:notNull()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "7");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Is Empty", "[expressionIsEmpty]") {  // NOLINT
+TEST_CASE("Is Empty", "[expressionIsEmpty]") {
   auto expr = expression::compile("${filename:isEmpty()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Is Empty 2", "[expressionIsEmpty2]") {  // NOLINT
+TEST_CASE("Is Empty 2", "[expressionIsEmpty2]") {
   auto expr = expression::compile("${attr:isEmpty()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "7");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Is Empty 3", "[expressionIsEmpty3]") {  // NOLINT
+TEST_CASE("Is Empty 3", "[expressionIsEmpty3]") {
   auto expr = expression::compile("${attr:isEmpty()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", " \t\r\n ");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Is Empty 4", "[expressionIsEmpty4]") {  // NOLINT
+TEST_CASE("Is Empty 4", "[expressionIsEmpty4]") {
   auto expr = expression::compile("${attr:isEmpty()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Is Empty 5", "[expressionIsEmpty5]") {  // NOLINT
+TEST_CASE("Is Empty 5", "[expressionIsEmpty5]") {
   auto expr = expression::compile("${attr:isEmpty()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", " \t\r\n a \t\r\n ");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Equals", "[expressionEquals]") {  // NOLINT
+TEST_CASE("Equals", "[expressionEquals]") {
   auto expr = expression::compile("${attr:equals('hello.txt')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "hello.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Equals 2", "[expressionEquals2]") {  // NOLINT
+TEST_CASE("Equals 2", "[expressionEquals2]") {
   auto expr = expression::compile("${attr:equals('hello.txt')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "helllo.txt");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Equals 3", "[expressionEquals3]") {  // NOLINT
+TEST_CASE("Equals 3", "[expressionEquals3]") {
   auto expr = expression::compile("${attr:plus(5):equals(6)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Equals Ignore Case", "[expressionEqualsIgnoreCase]") {  // NOLINT
+TEST_CASE("Equals Ignore Case", "[expressionEqualsIgnoreCase]") {
   auto expr = expression::compile("${attr:equalsIgnoreCase('hElLo.txt')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "hello.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Equals Ignore Case 2", "[expressionEqualsIgnoreCase2]") {  // NOLINT
+TEST_CASE("Equals Ignore Case 2", "[expressionEqualsIgnoreCase2]") {
   auto expr = expression::compile("${attr:plus(5):equalsIgnoreCase(6)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("GT", "[expressionGT]") {  // NOLINT
+TEST_CASE("GT", "[expressionGT]") {
   auto expr = expression::compile("${attr:plus(5):gt(5)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("GT2", "[expressionGT2]") {  // NOLINT
+TEST_CASE("GT2", "[expressionGT2]") {
   auto expr = expression::compile("${attr:plus(5.1):gt(6.05)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("GT3", "[expressionGT3]") {  // NOLINT
+TEST_CASE("GT3", "[expressionGT3]") {
   auto expr = expression::compile("${attr:plus(5.1):gt(6.15)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("GE", "[expressionGE]") {  // NOLINT
+TEST_CASE("GE", "[expressionGE]") {
   auto expr = expression::compile("${attr:plus(5):ge(6)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("GE2", "[expressionGE2]") {  // NOLINT
+TEST_CASE("GE2", "[expressionGE2]") {
   auto expr = expression::compile("${attr:plus(5.1):ge(6.05)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("GE3", "[expressionGE3]") {  // NOLINT
+TEST_CASE("GE3", "[expressionGE3]") {
   auto expr = expression::compile("${attr:plus(5.1):ge(6.15)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LT", "[expressionLT]") {  // NOLINT
+TEST_CASE("LT", "[expressionLT]") {
   auto expr = expression::compile("${attr:plus(5):lt(5)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LT2", "[expressionLT2]") {  // NOLINT
+TEST_CASE("LT2", "[expressionLT2]") {
   auto expr = expression::compile("${attr:plus(5.1):lt(6.05)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LT3", "[expressionLT3]") {  // NOLINT
+TEST_CASE("LT3", "[expressionLT3]") {
   auto expr = expression::compile("${attr:plus(5.1):lt(6.15)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LE", "[expressionLE]") {  // NOLINT
+TEST_CASE("LE", "[expressionLE]") {
   auto expr = expression::compile("${attr:plus(5):le(6)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LE2", "[expressionLE2]") {  // NOLINT
+TEST_CASE("LE2", "[expressionLE2]") {
   auto expr = expression::compile("${attr:plus(5.1):le(6.05)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("LE3", "[expressionLE3]") {  // NOLINT
+TEST_CASE("LE3", "[expressionLE3]") {
   auto expr = expression::compile("${attr:plus(5.1):le(6.15)}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("attr", "1");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("And", "[expressionAnd]") {  // NOLINT
+TEST_CASE("And", "[expressionAnd]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename} ):and(${filename:substring(0, 2):equals('an')})}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "an example file.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("And 2", "[expressionAnd2]") {  // NOLINT
+TEST_CASE("And 2", "[expressionAnd2]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename} ):and(${filename:substring(0, 2):equals('ab')})}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "an example file.txt");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Or", "[expressionOr]") {  // NOLINT
+TEST_CASE("Or", "[expressionOr]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename} ):or(${filename:substring(0, 2):equals('an')})}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "an example file.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Or 2", "[expressionOr2]") {  // NOLINT
+TEST_CASE("Or 2", "[expressionOr2]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename} ):or(${filename:substring(0, 2):equals('ab')})}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "an example file.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Not", "[expressionNot]") {  // NOLINT
+TEST_CASE("Not", "[expressionNot]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename} ):and(${filename:substring(0, 2):equals('an')}):not()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "an example file.txt");
-  REQUIRE("false" == expr({ flow_file_a }).asString());
+  REQUIRE("false" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Not 2", "[expressionNot2]") {  // NOLINT
+TEST_CASE("Not 2", "[expressionNot2]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename} ):and(${filename:substring(0, 2):equals('ab')}):not()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "an example file.txt");
-  REQUIRE("true" == expr({ flow_file_a }).asString());
+  REQUIRE("true" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("If Else", "[expressionIfElse]") {  // NOLINT
+TEST_CASE("If Else", "[expressionIfElse]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename}):ifElse('yes', 'no')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "an example file.txt");
-  REQUIRE("yes" == expr({ flow_file_a }).asString());
+  REQUIRE("yes" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("If Else 2", "[expressionIfElse2]") {  // NOLINT
+TEST_CASE("If Else 2", "[expressionIfElse2]") {
   auto expr = expression::compile("${filename:toLower():equals( ${filename}):ifElse('yes', 'no')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("filename", "An example file.txt");
-  REQUIRE("no" == expr({ flow_file_a }).asString());
+  REQUIRE("no" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode JSON", "[expressionEncodeJSON]") {  // NOLINT
+TEST_CASE("Encode JSON", "[expressionEncodeJSON]") {
   auto expr = expression::compile("${message:escapeJson()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "This is a \"test!\"");
-  REQUIRE("This is a \\\"test!\\\"" == expr({ flow_file_a }).asString());
+  REQUIRE("This is a \\\"test!\\\"" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode JSON", "[expressionDecodeJSON]") {  // NOLINT
+TEST_CASE("Decode JSON", "[expressionDecodeJSON]") {
   auto expr = expression::compile("${message:unescapeJson()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "This is a \\\"test!\\\"");
-  REQUIRE("This is a \"test!\"" == expr({ flow_file_a }).asString());
+  REQUIRE("This is a \"test!\"" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode Decode JSON", "[expressionEncodeDecodeJSON]") {  // NOLINT
+TEST_CASE("Encode Decode JSON", "[expressionEncodeDecodeJSON]") {
   auto expr = expression::compile("${message:escapeJson():unescapeJson()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "This is a \"test!\"");
-  REQUIRE("This is a \"test!\"" == expr({ flow_file_a }).asString());
+  REQUIRE("This is a \"test!\"" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode XML", "[expressionEncodeXML]") {  // NOLINT
+TEST_CASE("Encode XML", "[expressionEncodeXML]") {
   auto expr = expression::compile("${message:escapeXml()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "Zero > One < \"two!\" & 'true'");
-  REQUIRE("Zero &gt; One &lt; &quot;two!&quot; &amp; &apos;true&apos;" == expr({ flow_file_a }).asString());
+  REQUIRE("Zero &gt; One &lt; &quot;two!&quot; &amp; &apos;true&apos;" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode XML", "[expressionDecodeXML]") {  // NOLINT
+TEST_CASE("Decode XML", "[expressionDecodeXML]") {
   auto expr = expression::compile("${message:unescapeXml()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "Zero &gt; One &lt; &quot;two!&quot; &amp; &apos;true&apos;");
-  REQUIRE("Zero > One < \"two!\" & 'true'" == expr({ flow_file_a }).asString());
+  REQUIRE("Zero > One < \"two!\" & 'true'" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode Decode XML", "[expressionEncodeDecodeXML]") {  // NOLINT
+TEST_CASE("Encode Decode XML", "[expressionEncodeDecodeXML]") {
   auto expr = expression::compile("${message:escapeXml():unescapeXml()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "Zero > One < \"two!\" & 'true'");
-  REQUIRE("Zero > One < \"two!\" & 'true'" == expr({ flow_file_a }).asString());
+  REQUIRE("Zero > One < \"two!\" & 'true'" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode HTML3", "[expressionEncodeHTML3]") {  // NOLINT
+TEST_CASE("Encode HTML3", "[expressionEncodeHTML3]") {
   auto expr = expression::compile("${message:escapeHtml3()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "¥ & < «");
-  REQUIRE("&yen; &amp; &lt; &laquo;" == expr({ flow_file_a }).asString());
+  REQUIRE("&yen; &amp; &lt; &laquo;" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode HTML3", "[expressionDecodeHTML3]") {  // NOLINT
+TEST_CASE("Decode HTML3", "[expressionDecodeHTML3]") {
   auto expr = expression::compile("${message:unescapeHtml3()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "&yen; &amp; &lt; &laquo;");
-  REQUIRE("¥ & < «" == expr({ flow_file_a }).asString());
+  REQUIRE("¥ & < «" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode Decode HTML3", "[expressionEncodeDecodeHTML3]") {  // NOLINT
+TEST_CASE("Encode Decode HTML3", "[expressionEncodeDecodeHTML3]") {
   auto expr = expression::compile("${message:escapeHtml3():unescapeHtml3()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "&yen; &amp; &lt; &laquo;");
-  REQUIRE("&yen; &amp; &lt; &laquo;" == expr({ flow_file_a }).asString());
+  REQUIRE("&yen; &amp; &lt; &laquo;" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode HTML4", "[expressionEncodeHTML4]") {  // NOLINT
+TEST_CASE("Encode HTML4", "[expressionEncodeHTML4]") {
   auto expr = expression::compile("${message:escapeHtml4()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "¥ & Φ < «");
-  REQUIRE("&yen; &amp; &Phi; &lt; &laquo;" == expr({ flow_file_a }).asString());
+  REQUIRE("&yen; &amp; &Phi; &lt; &laquo;" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode HTML4", "[expressionDecodeHTML4]") {  // NOLINT
+TEST_CASE("Decode HTML4", "[expressionDecodeHTML4]") {
   auto expr = expression::compile("${message:unescapeHtml4()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "&yen; &iota; &amp; &lt; &laquo;");
-  REQUIRE("¥ ι & < «" == expr({ flow_file_a }).asString());
+  REQUIRE("¥ ι & < «" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode Decode HTML4", "[expressionEncodeDecodeHTML4]") {  // NOLINT
+TEST_CASE("Encode Decode HTML4", "[expressionEncodeDecodeHTML4]") {
   auto expr = expression::compile("${message:escapeHtml4():unescapeHtml4()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "&yen; &amp; &lt; &Pi; &laquo;");
-  REQUIRE("&yen; &amp; &lt; &Pi; &laquo;" == expr({ flow_file_a }).asString());
+  REQUIRE("&yen; &amp; &lt; &Pi; &laquo;" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode CSV", "[expressionEncodeCSV]") {  // NOLINT
+TEST_CASE("Encode CSV", "[expressionEncodeCSV]") {
   auto expr = expression::compile("${message:escapeCsv()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "Zero > One < \"two!\" & 'true'");
-  REQUIRE("\"Zero > One < \"\"two!\"\" & 'true'\"" == expr({ flow_file_a }).asString());
+  REQUIRE("\"Zero > One < \"\"two!\"\" & 'true'\"" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode CSV", "[expressionDecodeCSV]") {  // NOLINT
+TEST_CASE("Decode CSV", "[expressionDecodeCSV]") {
   auto expr = expression::compile("${message:unescapeCsv()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", R"("Zero > One < ""two!"" & 'true'")");
-  REQUIRE("Zero > One < \"two!\" & 'true'" == expr({ flow_file_a }).asString());
+  REQUIRE("Zero > One < \"two!\" & 'true'" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode CSV 2", "[expressionDecodeCSV2]") {  // NOLINT
+TEST_CASE("Decode CSV 2", "[expressionDecodeCSV2]") {
   auto expr = expression::compile("${message:unescapeCsv()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", R"("quoted")");
-  REQUIRE("\"quoted\"" == expr({ flow_file_a }).asString());
+  REQUIRE("\"quoted\"" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode Decode CSV", "[expressionEncodeDecodeCSV]") {  // NOLINT
+TEST_CASE("Encode Decode CSV", "[expressionEncodeDecodeCSV]") {
   auto expr = expression::compile("${message:escapeCsv():unescapeCsv()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "Zero > One < \"two!\" & 'true'");
-  REQUIRE("Zero > One < \"two!\" & 'true'" == expr({ flow_file_a }).asString());
+  REQUIRE("Zero > One < \"two!\" & 'true'" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
 #ifndef WIN32
 #ifndef DISABLE_CURL
-TEST_CASE("Encode URL", "[expressionEncodeURL]") {  // NOLINT
+TEST_CASE("Encode URL", "[expressionEncodeURL]") {
   auto expr = expression::compile("${message:urlEncode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "some value with spaces");
-  REQUIRE("some%20value%20with%20spaces" == expr({ flow_file_a }).asString());
+  REQUIRE("some%20value%20with%20spaces" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode URL", "[expressionDecodeURL]") {  // NOLINT
+TEST_CASE("Decode URL", "[expressionDecodeURL]") {
   auto expr = expression::compile("${message:urlDecode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "some%20value%20with%20spaces");
-  REQUIRE("some value with spaces" == expr({ flow_file_a }).asString());
+  REQUIRE("some value with spaces" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode Decode URL", "[expressionEncodeDecodeURL]") {  // NOLINT
+TEST_CASE("Encode Decode URL", "[expressionEncodeDecodeURL]") {
   auto expr = expression::compile("${message:urlEncode():urlDecode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "some value with spaces");
-  REQUIRE("some value with spaces" == expr({ flow_file_a }).asString());
+  REQUIRE("some value with spaces" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 #else
-TEST_CASE("Encode URL", "[expressionEncodeURLExcept]") {  // NOLINT
+TEST_CASE("Encode URL", "[expressionEncodeURLExcept]") {
   auto expr = expression::compile("${message:urlEncode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "some value with spaces");
-  REQUIRE_THROWS(expr({flow_file_a}).asString());
+  REQUIRE_THROWS(expr(expression::Parameters{flow_file_a}).asString());
 }
 
-TEST_CASE("Decode URL", "[expressionDecodeURLExcept]") {  // NOLINT
+TEST_CASE("Decode URL", "[expressionDecodeURLExcept]") {
   auto expr = expression::compile("${message:urlDecode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "some%20value%20with%20spaces");
-  REQUIRE_THROWS(expr({flow_file_a}).asString());
+  REQUIRE_THROWS(expr(expression::Parameters{flow_file_a}).asString());
 }
 
-TEST_CASE("Encode Decode URL", "[expressionEncodeDecodeURLExcept]") {  // NOLINT
+TEST_CASE("Encode Decode URL", "[expressionEncodeDecodeURLExcept]") {
   auto expr = expression::compile("${message:urlEncode():urlDecode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "some value with spaces");
-  REQUIRE_THROWS(expr({flow_file_a}).asString());
+  REQUIRE_THROWS(expr(expression::Parameters{flow_file_a}).asString());
 }
 #endif
 #endif
 
 #ifdef EXPRESSION_LANGUAGE_USE_DATE
 
-TEST_CASE("Parse Date", "[expressionParseDate]") {  // NOLINT
+TEST_CASE("Parse Date", "[expressionParseDate]") {
   auto expr = expression::compile("${message:toDate('%Y/%m/%d', 'America/Los_Angeles')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "2014/04/30");
-  REQUIRE("1398841200000" == expr({ flow_file_a }).asString());
+  REQUIRE("1398841200000" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Reformat Date", "[expressionReformatDate]") {  // NOLINT
+TEST_CASE("Reformat Date", "[expressionReformatDate]") {
   auto expr = expression::compile("${message:toDate('%Y/%m/%d', 'GMT'):format('%m-%d-%Y', 'America/New_York')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "2014/03/14");
-  REQUIRE("03-13-2014" == expr({ flow_file_a }).asString());
+  REQUIRE("03-13-2014" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
 #endif  // EXPRESSION_LANGUAGE_USE_DATE
 
-TEST_CASE("Now Date", "[expressionNowDate]") {  // NOLINT
+TEST_CASE("Now Date", "[expressionNowDate]") {
   auto expr = expression::compile("${now():format('%Y')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
@@ -1259,313 +1256,313 @@ TEST_CASE("Now Date", "[expressionNowDate]") {  // NOLINT
   struct tm lt;
   localtime_r(&t, &lt);
 
-  REQUIRE((lt.tm_year + 1900) == expr({ flow_file_a }).asUnsignedLong());
+  REQUIRE((lt.tm_year + 1900) == expr(expression::Parameters{ flow_file_a }).asUnsignedLong());
 }
 
-TEST_CASE("Format Date", "[expressionFormatDate]") {  // NOLINT
+TEST_CASE("Format Date", "[expressionFormatDate]") {
   auto expr_gmt = expression::compile("${message:format('%m-%d-%Y', 'GMT')}");
   auto expr_utc = expression::compile("${message:format('%m-%d-%Y', 'UTC')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "1394755200000");
-  REQUIRE("03-14-2014" == expr_gmt({ flow_file_a }).asString());
-  REQUIRE("03-14-2014" == expr_utc({ flow_file_a }).asString());
+  REQUIRE("03-14-2014" == expr_gmt(expression::Parameters{ flow_file_a }).asString());
+  REQUIRE("03-14-2014" == expr_utc(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("IP", "[expressionIP]") {  // NOLINT
+TEST_CASE("IP", "[expressionIP]") {
   auto expr = expression::compile("${ip()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
-  REQUIRE("" != expr( { flow_file_a }).asString());
+  REQUIRE("" != expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Full Hostname", "[expressionFullHostname]") {  // NOLINT
+TEST_CASE("Full Hostname", "[expressionFullHostname]") {
   auto expr = expression::compile("${hostname('true')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
-  REQUIRE("" != expr( { flow_file_a }).asString());
+  REQUIRE("" != expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("UUID", "[expressionUuid]") {  // NOLINT
+TEST_CASE("UUID", "[expressionUuid]") {
   auto expr = expression::compile("${UUID()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
-  REQUIRE(36 == expr( { flow_file_a }).asString().length());
+  REQUIRE(36 == expr(expression::Parameters{ flow_file_a }).asString().length());
 }
 
-TEST_CASE("Trim", "[expressionTrim]") {  // NOLINT
+TEST_CASE("Trim", "[expressionTrim]") {
   auto expr = expression::compile("${message:trim()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", " 1 2 3 ");
-  REQUIRE("1 2 3" == expr({ flow_file_a }).asString());
+  REQUIRE("1 2 3" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Append", "[expressionAppend]") {  // NOLINT
+TEST_CASE("Append", "[expressionAppend]") {
   auto expr = expression::compile("${message:append('.gz')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "a brand new filename.txt");
-  REQUIRE("a brand new filename.txt.gz" == expr({ flow_file_a }).asString());
+  REQUIRE("a brand new filename.txt.gz" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Prepend", "[expressionPrepend]") {  // NOLINT
+TEST_CASE("Prepend", "[expressionPrepend]") {
   auto expr = expression::compile("${message:prepend('a brand new ')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "filename.txt");
-  REQUIRE("a brand new filename.txt" == expr({ flow_file_a }).asString());
+  REQUIRE("a brand new filename.txt" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Length", "[expressionLength]") {  // NOLINT
+TEST_CASE("Length", "[expressionLength]") {
   auto expr = expression::compile("${message:length()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "a brand new filename.txt");
-  REQUIRE(24 == expr({ flow_file_a }).asUnsignedLong());
+  REQUIRE(24 == expr(expression::Parameters{ flow_file_a }).asUnsignedLong());
 }
 
-TEST_CASE("Encode B64", "[expressionEncodeB64]") {  // NOLINT
+TEST_CASE("Encode B64", "[expressionEncodeB64]") {
   auto expr = expression::compile("${message:base64Encode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "admin:admin");
-  REQUIRE("YWRtaW46YWRtaW4=" == expr({ flow_file_a }).asString());
+  REQUIRE("YWRtaW46YWRtaW4=" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Decode B64", "[expressionDecodeB64]") {  // NOLINT
+TEST_CASE("Decode B64", "[expressionDecodeB64]") {
   auto expr = expression::compile("${message:base64Decode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "YWRtaW46YWRtaW4=");
-  REQUIRE("admin:admin" == expr({ flow_file_a }).asString());
+  REQUIRE("admin:admin" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Encode Decode B64", "[expressionEncodeDecodeB64]") {  // NOLINT
+TEST_CASE("Encode Decode B64", "[expressionEncodeDecodeB64]") {
   auto expr = expression::compile("${message:base64Encode():base64Decode()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("message", "Zero > One < \"two!\" & 'true'");
-  REQUIRE("Zero > One < \"two!\" & 'true'" == expr({ flow_file_a }).asString());
+  REQUIRE("Zero > One < \"two!\" & 'true'" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("All Contains", "[expressionAllContains]") {  // NOLINT
+TEST_CASE("All Contains", "[expressionAllContains]") {
   auto expr = expression::compile("${allAttributes('a', 'b'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "hello 1");
   flow_file_a->addAttribute("b", "hello 2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("All Contains 2", "[expressionAllContains2]") {  // NOLINT
+TEST_CASE("All Contains 2", "[expressionAllContains2]") {
   auto expr = expression::compile("${allAttributes('a', 'b'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "hello 1");
   flow_file_a->addAttribute("b", "mello 2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Contains", "[expressionAnyContains]") {  // NOLINT
+TEST_CASE("Any Contains", "[expressionAnyContains]") {
   auto expr = expression::compile("${anyAttribute('a', 'b'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "hello 1");
   flow_file_a->addAttribute("b", "mello 2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Contains 2", "[expressionAnyContains2]") {  // NOLINT
+TEST_CASE("Any Contains 2", "[expressionAnyContains2]") {
   auto expr = expression::compile("${anyAttribute('a', 'b'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "mello 1");
   flow_file_a->addAttribute("b", "mello 2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
 #ifdef EXPRESSION_LANGUAGE_USE_REGEX
 
-TEST_CASE("All Matching Contains", "[expressionAllMatchingContains]") {  // NOLINT
+TEST_CASE("All Matching Contains", "[expressionAllMatchingContains]") {
   auto expr = expression::compile("${allMatchingAttributes('xyz_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("xyz_1", "hello 1");
   flow_file_a->addAttribute("xyz_2", "hello 2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("All Matching Contains 2", "[expressionAllMatchingContains2]") {  // NOLINT
+TEST_CASE("All Matching Contains 2", "[expressionAllMatchingContains2]") {
   auto expr = expression::compile("${allMatchingAttributes('abc_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("xyz_1", "hello 1");
   flow_file_a->addAttribute("xyz_2", "hello 2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("All Matching Contains 3", "[expressionAllMatchingContains3]") {  // NOLINT
+TEST_CASE("All Matching Contains 3", "[expressionAllMatchingContains3]") {
   auto expr = expression::compile("${allMatchingAttributes('abc_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("xyz_1", "hello 1");
   flow_file_a->addAttribute("abc_2", "hello 2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("All Matching Contains 4", "[expressionAllMatchingContains4]") {  // NOLINT
+TEST_CASE("All Matching Contains 4", "[expressionAllMatchingContains4]") {
   auto expr = expression::compile("${allMatchingAttributes('xyz_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("xyz_1", "hello 1");
   flow_file_a->addAttribute("xyz_2", "2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Matching Contains", "[expressionAnyMatchingContains]") {  // NOLINT
+TEST_CASE("Any Matching Contains", "[expressionAnyMatchingContains]") {
   auto expr = expression::compile("${anyMatchingAttribute('xyz_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("xyz_1", "hello 1");
   flow_file_a->addAttribute("xyz_2", "mello 2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Matching Contains 2", "[expressionAnyMatchingContains2]") {  // NOLINT
+TEST_CASE("Any Matching Contains 2", "[expressionAnyMatchingContains2]") {
   auto expr = expression::compile("${anyMatchingAttribute('abc_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("xyz_1", "hello 1");
   flow_file_a->addAttribute("xyz_2", "mello 2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Matching Contains 3", "[expressionAnyMatchingContains3]") {  // NOLINT
+TEST_CASE("Any Matching Contains 3", "[expressionAnyMatchingContains3]") {
   auto expr = expression::compile("${anyMatchingAttribute('abc_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("abc_1", "hello 1");
   flow_file_a->addAttribute("xyz_2", "mello 2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Matching Contains 4", "[expressionAnyMatchingContains4]") {  // NOLINT
+TEST_CASE("Any Matching Contains 4", "[expressionAnyMatchingContains4]") {
   auto expr = expression::compile("${anyMatchingAttribute('abc_.*'):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("xyz_1", "mello 1");
   flow_file_a->addAttribute("xyz_2", "mello 2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
 #endif  // EXPRESSION_LANGUAGE_USE_REGEX
 
-TEST_CASE("All Delineated Contains", "[expressionAllDelineatedContains]") {  // NOLINT
+TEST_CASE("All Delineated Contains", "[expressionAllDelineatedContains]") {
   auto expr = expression::compile("${allDelineatedValues(${word_list}, \",\"):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("word_list", "hello_1,hello_2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("All Delineated Contains 2", "[expressionAllDelineatedContains2]") {  // NOLINT
+TEST_CASE("All Delineated Contains 2", "[expressionAllDelineatedContains2]") {
   auto expr = expression::compile("${allDelineatedValues(${word_list}, \",\"):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("word_list", "hello_1,mello_2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("All Delineated Contains 3", "[expressionAllDelineatedContains3]") {  // NOLINT
+TEST_CASE("All Delineated Contains 3", "[expressionAllDelineatedContains3]") {
   auto expr = expression::compile("${allDelineatedValues(${word_list}, \" \"):contains('1,h')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("word_list", "hello_1,hello_2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Delineated Contains", "[expressionAnyDelineatedContains]") {  // NOLINT
+TEST_CASE("Any Delineated Contains", "[expressionAnyDelineatedContains]") {
   auto expr = expression::compile("${anyDelineatedValue(${word_list}, \",\"):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("word_list", "hello_1,mello_2");
-  REQUIRE(expr({ flow_file_a }).asBoolean());
+  REQUIRE(expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Any Delineated Contains 2", "[expressionAnyDelineatedContains2]") {  // NOLINT
+TEST_CASE("Any Delineated Contains 2", "[expressionAnyDelineatedContains2]") {
   auto expr = expression::compile("${anyDelineatedValue(${word_list}, \",\"):contains('hello')}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("word_list", "mello_1,mello_2");
-  REQUIRE(!expr({ flow_file_a }).asBoolean());
+  REQUIRE(!expr(expression::Parameters{ flow_file_a }).asBoolean());
 }
 
-TEST_CASE("Count", "[expressionCount]") {  // NOLINT
+TEST_CASE("Count", "[expressionCount]") {
   auto expr = expression::compile("${allAttributes('a', 'b'):contains('hello'):count()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "hello 1");
   flow_file_a->addAttribute("b", "mello 2");
-  REQUIRE(1 == expr({ flow_file_a }).asUnsignedLong());
+  REQUIRE(1 == expr(expression::Parameters{ flow_file_a }).asUnsignedLong());
 }
 
-TEST_CASE("Count 2", "[expressionCount2]") {  // NOLINT
+TEST_CASE("Count 2", "[expressionCount2]") {
   auto expr = expression::compile("${allAttributes('a', 'b'):contains('mello'):count()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "mello 1");
   flow_file_a->addAttribute("b", "mello 2");
   flow_file_a->addAttribute("c", "hello 3");
-  REQUIRE(2 == expr({ flow_file_a }).asUnsignedLong());
+  REQUIRE(2 == expr(expression::Parameters{ flow_file_a }).asUnsignedLong());
 }
 
-TEST_CASE("Count 3", "[expressionCount3]") {  // NOLINT
+TEST_CASE("Count 3", "[expressionCount3]") {
   auto expr = expression::compile("abc${allAttributes('a', 'b'):contains('mello'):count()}xyz");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "mello 1");
   flow_file_a->addAttribute("b", "mello 2");
   flow_file_a->addAttribute("c", "hello 3");
-  REQUIRE("abc2xyz" == expr({ flow_file_a }).asString());
+  REQUIRE("abc2xyz" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Join", "[expressionJoin]") {  // NOLINT
+TEST_CASE("Join", "[expressionJoin]") {
   auto expr = expression::compile("abc_${allAttributes('a', 'b'):prepend('def_'):append('_ghi'):join(\"|\")}_xyz");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "hello");
   flow_file_a->addAttribute("b", "mello");
-  REQUIRE("abc_def_hello_ghi|def_mello_ghi_xyz" == expr({ flow_file_a }).asString());
+  REQUIRE("abc_def_hello_ghi|def_mello_ghi_xyz" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("Join 2", "[expressionJoin2]") {  // NOLINT
+TEST_CASE("Join 2", "[expressionJoin2]") {
   auto expr = expression::compile("abc_${allAttributes('a', 'b'):join(\"|\"):prepend('def_'):append('_ghi')}_xyz");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
   flow_file_a->addAttribute("a", "hello");
   flow_file_a->addAttribute("b", "mello");
-  REQUIRE("abc_def_hello|mello_ghi_xyz" == expr({ flow_file_a }).asString());
+  REQUIRE("abc_def_hello|mello_ghi_xyz" == expr(expression::Parameters{ flow_file_a }).asString());
 }
 
-TEST_CASE("resolve_user_id_test", "[resolve_user_id tests]") {  // NOLINT
+TEST_CASE("resolve_user_id_test", "[resolve_user_id tests]") {
   auto expr = expression::compile("${attribute_sid:resolve_user_id()}");
 
   auto flow_file_a = std::make_shared<core::FlowFile>();
 
   SECTION("TEST 0") {
   flow_file_a->addAttribute("attribute_sid", "0");
-  REQUIRE("0" == expr({flow_file_a}).asString());
+  REQUIRE("0" == expr(expression::Parameters{flow_file_a}).asString());
 }
 
   SECTION("TEST abcd") {
   flow_file_a->addAttribute("attribute_sid", "abcd");
-  REQUIRE("abcd" == expr({flow_file_a}).asString());
+  REQUIRE("abcd" == expr(expression::Parameters{flow_file_a}).asString());
 }
 
   SECTION("TEST empty") {
   flow_file_a->addAttribute("attribute_sid", "");
-  REQUIRE("" == expr({flow_file_a}).asString());
+  REQUIRE("" == expr(expression::Parameters{flow_file_a}).asString());
 }
 }
 
diff --git a/extensions/expression-language/tests/RouteOnAttributeTests.cpp b/extensions/expression-language/tests/RouteOnAttributeTests.cpp
index 8b98b30..c871f72 100644
--- a/extensions/expression-language/tests/RouteOnAttributeTests.cpp
+++ b/extensions/expression-language/tests/RouteOnAttributeTests.cpp
@@ -20,7 +20,6 @@
 #include <RouteOnAttribute.h>
 #include "processors/LogAttribute.h"
 #include "processors/UpdateAttribute.h"
-#include "processors/GenerateFlowFile.h"
 
 TEST_CASE("RouteOnAttributeMatchedTest", "[routeOnAttributeMatchedTest]") {
   TestController testController;
diff --git a/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp b/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp
index 5defee0..5237394 100644
--- a/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp
+++ b/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp
@@ -19,16 +19,9 @@
 #include <sys/stat.h>
 #undef NDEBUG
 #include <cassert>
-#include <utility>
 #include <chrono>
-#include <fstream>
 #include <memory>
 #include <string>
-#include <thread>
-#include <type_traits>
-#include <vector>
-#include <iostream>
-#include <sstream>
 #include "processors/LogAttribute.h"
 #include "integration/IntegrationBase.h"
 #include "ProcessContextExpr.h"
diff --git a/extensions/gps/CMakeLists.txt b/extensions/gps/CMakeLists.txt
index 25bb816..cb43c9e 100644
--- a/extensions/gps/CMakeLists.txt
+++ b/extensions/gps/CMakeLists.txt
@@ -37,3 +37,4 @@ target_link_libraries(minifi-gps ${LIBGPS_LIBRARIES})
 SET (GPS-EXTENSION minifi-gps PARENT_SCOPE)
 
 register_extension(minifi-gps)
+register_extension_linter(minifi-gps-linter)
diff --git a/extensions/gps/GetGPS.cpp b/extensions/gps/GetGPS.cpp
index 7c75005..3f516f5 100644
--- a/extensions/gps/GetGPS.cpp
+++ b/extensions/gps/GetGPS.cpp
@@ -17,34 +17,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include "GetGPS.h"
+#include <sys/types.h>
+#include <dirent.h>
+
+#define policy_t gps_policy_t
+#include <libgpsmm.h>
+#undef  policy_t
+#define policy_t ambiguous use gps_policy_t
 
 #include <vector>
-#include <queue>
-#include <map>
 #include <set>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <time.h>
-#include <sstream>
-#include <stdio.h>
 #include <string>
-#include <iostream>
-#include <dirent.h>
-#include <limits.h>
-#include <unistd.h>
-#include <regex>
+#include <memory>
 
-#include "GetGPS.h"
 #include "core/ProcessContext.h"
 #include "core/ProcessSession.h"
 #include "core/PropertyValidation.h"
 
-#define policy_t gps_policy_t
-#include <libgpsmm.h>
-#undef  policy_t
-#define policy_t ambiguous use gps_policy_t
-
 namespace org {
 namespace apache {
 namespace nifi {
diff --git a/extensions/gps/GetGPS.h b/extensions/gps/GetGPS.h
index a9f3f38..6ba80a8 100644
--- a/extensions/gps/GetGPS.h
+++ b/extensions/gps/GetGPS.h
@@ -17,12 +17,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef __GET_GPS_H__
-#define __GET_GPS_H__
+#pragma once
+
+#include <memory>
+#include <string>
 
 #include "../FlowFileRecord.h"
 #include "../core/Processor.h"
-#include "../core/ProcessSession.h"
 
 namespace org {
 namespace apache {
@@ -31,9 +32,9 @@ namespace minifi {
 namespace processors {
 
 class GetGPS : public core::Processor {
-public:
-  GetGPS(const std::string& name, const utils::Identifier& uuid = {})
-  : core::Processor(name, uuid), logger_(logging::LoggerFactory<GetGPS>::getLogger()) {
+ public:
+  explicit GetGPS(const std::string& name, const utils::Identifier& uuid = {})
+      : core::Processor(name, uuid), logger_(logging::LoggerFactory<GetGPS>::getLogger()) {
     gpsdHost_ = "localhost";
     gpsdPort_ = "2947";
     gpsdWaitTime_ = 50000000;
@@ -48,7 +49,7 @@ public:
   // Supported Relationships
   static core::Relationship Success;
 
-public:
+ public:
   /**
    * Function that's executed when the processor is scheduled.
    * @param context process context.
@@ -61,9 +62,7 @@ public:
   //! Initialize, over write by NiFi GetGPS
   void initialize(void) override;
 
-protected:
-
-private:
+ private:
   std::string gpsdHost_;
   std::string gpsdPort_;
   int64_t gpsdWaitTime_;
@@ -79,5 +78,3 @@ REGISTER_RESOURCE(GetGPS, "Obtains GPS coordinates from the GPSDHost and port.")
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif
diff --git a/extensions/gps/GetGPSLoader.h b/extensions/gps/GetGPSLoader.h
index 23d670f..d0e74f4 100644
--- a/extensions/gps/GetGPSLoader.h
+++ b/extensions/gps/GetGPSLoader.h
@@ -15,10 +15,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_GPS_GETGPSLOADER_H
-#define EXTENSIONS_GPS_GETGPSLOADER_H
+#pragma once
 
 #include "GetGPS.h"
+
+#include <vector>
+#include <memory>
+#include <string>
+
 #include "core/ClassLoader.h"
 #include "utils/StringUtils.h"
 
@@ -61,4 +65,3 @@ class GpsFactory : public core::ObjectFactory {
 extern "C" {
 DLL_EXPORT void *createGPSFactory(void);
 }
-#endif  // EXTENSIONS_GPS_GETGPSLOADER_H
diff --git a/extensions/http-curl/CMakeLists.txt b/extensions/http-curl/CMakeLists.txt
index fff6eb1..0df998c 100644
--- a/extensions/http-curl/CMakeLists.txt
+++ b/extensions/http-curl/CMakeLists.txt
@@ -31,3 +31,4 @@ target_link_libraries(minifi-http-curl minifi-civet-extensions)
 
 SET (HTTP-CURL minifi-http-curl PARENT_SCOPE)
 register_extension(minifi-http-curl)
+register_extension_linter(minifi-http-curl-linter)
diff --git a/extensions/http-curl/HTTPCurlLoader.h b/extensions/http-curl/HTTPCurlLoader.h
index 768d34d..521d3e2 100644
--- a/extensions/http-curl/HTTPCurlLoader.h
+++ b/extensions/http-curl/HTTPCurlLoader.h
@@ -15,18 +15,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_HTTPCURLLOADER_H_
-#define EXTENSIONS_HTTPCURLLOADER_H_
+#pragma once
 
 #ifdef WIN32
 #pragma comment(lib, "wldap32.lib" )
 #pragma comment(lib, "crypt32.lib" )
 #pragma comment(lib, "Ws2_32.lib")
 
-#define CURL_STATICLIB 
+#define CURL_STATICLIB
 #include <curl/curl.h>
 #endif
 
+#include <vector>
+#include <string>
+#include <memory>
+
 #include "c2/protocols/RESTProtocol.h"
 #include "protocols/RESTSender.h"
 #include "processors/InvokeHTTP.h"
@@ -99,4 +102,3 @@ class HttpCurlObjectFactory : public core::ObjectFactory {
 extern "C" {
   DLL_EXPORT void *createHttpCurlFactory(void);
 }
-#endif /* EXTENSIONS_HTTPCURLLOADER_H_ */
diff --git a/extensions/http-curl/client/HTTPCallback.h b/extensions/http-curl/client/HTTPCallback.h
index 921a8c5..3a73cd5 100644
--- a/extensions/http-curl/client/HTTPCallback.h
+++ b/extensions/http-curl/client/HTTPCallback.h
@@ -15,13 +15,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_HTTP_CURL_CLIENT_HTTPCALLBACK_H_
-#define EXTENSIONS_HTTP_CURL_CLIENT_HTTPCALLBACK_H_
+#pragma once
 
 #include <deque>
-#include <thread>
 #include <mutex>
 #include <vector>
+#include <string>
+#include <memory>
+#include <utility>
 #include <condition_variable>
 
 #include "core/logging/LoggerConfiguration.h"
@@ -138,7 +139,6 @@ class HttpStreamingCallback : public ByteInputCallBack {
   }
 
  private:
-
   /**
    * Loads the next available buffer
    * @param lock unique_lock which *must* own the lock
@@ -230,5 +230,3 @@ class HttpStreamingCallback : public ByteInputCallBack {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* EXTENSIONS_HTTP_CURL_CLIENT_HTTPCALLBACK_H_ */
diff --git a/extensions/http-curl/client/HTTPClient.cpp b/extensions/http-curl/client/HTTPClient.cpp
index 043bae1..ffc5d0e 100644
--- a/extensions/http-curl/client/HTTPClient.cpp
+++ b/extensions/http-curl/client/HTTPClient.cpp
@@ -18,7 +18,6 @@
 #include "HTTPClient.h"
 
 #include <memory>
-#include <climits>
 #include <cinttypes>
 #include <map>
 #include <vector>
@@ -261,7 +260,7 @@ bool HTTPClient::submit() {
     progress_.reset();
     curl_easy_setopt(http_session_, CURLOPT_NOPROGRESS, 0);
     curl_easy_setopt(http_session_, CURLOPT_XFERINFOFUNCTION, onProgress);
-    curl_easy_setopt(http_session_, CURLOPT_XFERINFODATA, (void*)this);
+    curl_easy_setopt(http_session_, CURLOPT_XFERINFODATA, this);
   } else {
     // the user explicitly set it to 0
     curl_easy_setopt(http_session_, CURLOPT_NOPROGRESS, 1);
@@ -287,8 +286,7 @@ bool HTTPClient::submit() {
     curl_easy_setopt(http_session_, CURLOPT_TCP_KEEPALIVE, 1L);
     curl_easy_setopt(http_session_, CURLOPT_TCP_KEEPINTVL, keepAlive.count());
     curl_easy_setopt(http_session_, CURLOPT_TCP_KEEPIDLE, keepIdle.count());
-  }
-  else {
+  } else {
     logger_->log_debug("Not using keep alive");
     curl_easy_setopt(http_session_, CURLOPT_TCP_KEEPALIVE, 0L);
   }
@@ -296,7 +294,7 @@ bool HTTPClient::submit() {
   if (callback == nullptr) {
     read_callback_.close();
   }
-  long http_code;
+  long http_code;  // NOLINT long due to libcurl API
   curl_easy_getinfo(http_session_, CURLINFO_RESPONSE_CODE, &http_code);
   http_code_ = http_code;
   curl_easy_getinfo(http_session_, CURLINFO_CONTENT_TYPE, &content_type_str_);
@@ -351,7 +349,7 @@ void HTTPClient::set_request_method(const std::string method) {
 }
 
 int HTTPClient::onProgress(void *clientp, curl_off_t /*dltotal*/, curl_off_t dlnow, curl_off_t /*ultotal*/, curl_off_t ulnow) {
-  HTTPClient& client = *(HTTPClient*)(clientp);
+  HTTPClient& client = *reinterpret_cast<HTTPClient*>(clientp);
   auto now = std::chrono::steady_clock::now();
   auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - client.progress_.last_transferred_);
   if (dlnow != client.progress_.downloaded_data_ || ulnow != client.progress_.uploaded_data_) {
@@ -365,7 +363,7 @@ int HTTPClient::onProgress(void *clientp, curl_off_t /*dltotal*/, curl_off_t dln
   if (elapsed.count() > client.read_timeout_ms_.count()) {
     // timeout
     client.logger_->log_error("HTTP operation has been idle for %dms, limit (%dms) reached, terminating connection\n",
-      (int)elapsed.count(), (int)client.read_timeout_ms_.count());
+      static_cast<int>(elapsed.count()), static_cast<int>(client.read_timeout_ms_.count()));
     return 1;
   }
   return 0;
@@ -390,8 +388,7 @@ void HTTPClient::configure_secure_connection(CURL *http_session) {
   if (!ssl_context_service_->getCertificateFile().empty()) {
     if (utils::StringUtils::endsWithIgnoreCase(ssl_context_service_->getCertificateFile(), "p12")) {
       curl_easy_setopt(http_session, CURLOPT_SSLCERTTYPE, "P12");
-    }
-    else {
+    } else {
       curl_easy_setopt(http_session, CURLOPT_SSLCERTTYPE, "PEM");
     }
     curl_easy_setopt(http_session, CURLOPT_SSLCERT, ssl_context_service_->getCertificateFile().c_str());
@@ -399,8 +396,7 @@ void HTTPClient::configure_secure_connection(CURL *http_session) {
   if (!ssl_context_service_->getPrivateKeyFile().empty()) {
     if (utils::StringUtils::endsWithIgnoreCase(ssl_context_service_->getPrivateKeyFile(), "p12")) {
       curl_easy_setopt(http_session, CURLOPT_SSLKEYTYPE, "P12");
-    }
-    else {
+    } else {
       curl_easy_setopt(http_session, CURLOPT_SSLKEYTYPE, "PEM");
     }
     curl_easy_setopt(http_session, CURLOPT_SSLKEY, ssl_context_service_->getPrivateKeyFile().c_str());
diff --git a/extensions/http-curl/client/HTTPClient.h b/extensions/http-curl/client/HTTPClient.h
index 0b424b0..15c89bf 100644
--- a/extensions/http-curl/client/HTTPClient.h
+++ b/extensions/http-curl/client/HTTPClient.h
@@ -24,8 +24,7 @@
 #pragma warning(disable: 4996)
 #endif
 
-#ifndef EXTENSIONS_HTTP_CURL_CLIENT_HTTPCLIENT_H_
-#define EXTENSIONS_HTTP_CURL_CLIENT_HTTPCLIENT_H_
+#pragma once
 
 #include "utils/HTTPClient.h"
 #ifdef WIN32
@@ -41,7 +40,6 @@
 #include <curl/easy.h>
 #include <vector>
 #include <memory>
-#include <iostream>
 #include <map>
 #include <chrono>
 #include <string>
@@ -55,8 +53,6 @@
 #include "controllers/SSLContextService.h"
 #include "core/logging/Logger.h"
 #include "core/logging/LoggerConfiguration.h"
-#include "properties/Configure.h"
-#include "io/validation.h"
 
 namespace org {
 namespace apache {
@@ -146,11 +142,11 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
 
   bool setMinimumSSLVersion(SSLVersion minimum_version) override;
 
-  DEPRECATED(/*deprecated in*/ 0.8.0, /*will remove in */ 2.0) void setKeepAliveProbe(long probe) {
+  DEPRECATED(/*deprecated in*/ 0.8.0, /*will remove in */ 2.0) void setKeepAliveProbe(long probe) {  // NOLINT deprecated
     keep_alive_probe_ = std::chrono::milliseconds(probe * 1000);
   }
 
-  DEPRECATED(/*deprecated in*/ 0.8.0, /*will remove in */ 2.0) void setKeepAliveIdle(long idle) {
+  DEPRECATED(/*deprecated in*/ 0.8.0, /*will remove in */ 2.0) void setKeepAliveIdle(long idle) {  // NOLINT deprecated
     keep_alive_idle_ = std::chrono::milliseconds(idle * 1000);
   }
 
@@ -235,6 +231,7 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
       }
     }
   }
+
  private:
   static int onProgress(void *client, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow);
 
@@ -305,8 +302,6 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
 }  // namespace apache
 }  // namespace org
 
-#endif  // EXTENSIONS_HTTP_CURL_CLIENT_HTTPCLIENT_H_
-
 #ifdef WIN32
 #pragma warning(pop)
 #endif
diff --git a/extensions/http-curl/client/HTTPStream.cpp b/extensions/http-curl/client/HTTPStream.cpp
index 5ba7f3f..218d200 100644
--- a/extensions/http-curl/client/HTTPStream.cpp
+++ b/extensions/http-curl/client/HTTPStream.cpp
@@ -18,12 +18,8 @@
 
 #include "HTTPStream.h"
 
-#include <algorithm>
 #include <fstream>
-#include <vector>
 #include <memory>
-#include <string>
-#include <Exception.h>
 
 #include "HTTPCallback.h"
 #include "io/validation.h"
@@ -97,7 +93,7 @@ int HttpStream::read(uint8_t *buf, int buflen) {
         started_ = true;
       }
     }
-    return gsl::narrow<int>(http_read_callback_.readFully((char*) buf, buflen));
+    return gsl::narrow<int>(http_read_callback_.readFully(reinterpret_cast<char*>(buf), buflen));
 
   } else {
     return -1;
diff --git a/extensions/http-curl/client/HTTPStream.h b/extensions/http-curl/client/HTTPStream.h
index 711d1d2..b034252 100644
--- a/extensions/http-curl/client/HTTPStream.h
+++ b/extensions/http-curl/client/HTTPStream.h
@@ -15,8 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_HTTP_CURL_CLIENT_HTTPSTREAM_H_
-#define EXTENSIONS_HTTP_CURL_CLIENT_HTTPSTREAM_H_
+#pragma once
 
 #include <memory>
 #include <thread>
@@ -133,7 +132,6 @@ class HttpStream : public io::BaseStream {
   }
 
  protected:
-
   /**
    * Populates the vector using the provided type name.
    * @param buf output buffer
@@ -165,7 +163,6 @@ class HttpStream : public io::BaseStream {
   std::atomic<bool> started_;
 
  private:
-
   std::shared_ptr<logging::Logger> logger_;
 };
 } /* namespace io */
@@ -173,5 +170,3 @@ class HttpStream : public io::BaseStream {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* EXTENSIONS_HTTP_CURL_CLIENT_HTTPSTREAM_H_ */
diff --git a/extensions/http-curl/processors/InvokeHTTP.cpp b/extensions/http-curl/processors/InvokeHTTP.cpp
index b83e15d..9ac3c07 100644
--- a/extensions/http-curl/processors/InvokeHTTP.cpp
+++ b/extensions/http-curl/processors/InvokeHTTP.cpp
@@ -22,24 +22,15 @@
 #else
 #include <regex.h>
 #endif
-#include <curl/easy.h>
 #include <memory>
-#include <algorithm>
-#include <cctype>
 #include <cinttypes>
 #include <cstdint>
-#include <cstring>
-#include <iostream>
-#include <iterator>
-#include <map>
 #include <set>
 #include <string>
-#include <utility>
 #include <vector>
 
 #include "utils/ByteArrayCallback.h"
 #include "core/FlowFile.h"
-#include "core/logging/Logger.h"
 #include "core/ProcessContext.h"
 #include "core/Relationship.h"
 #include "io/BufferStream.h"
diff --git a/extensions/http-curl/processors/InvokeHTTP.h b/extensions/http-curl/processors/InvokeHTTP.h
index 778eb59..99f54a0 100644
--- a/extensions/http-curl/processors/InvokeHTTP.h
+++ b/extensions/http-curl/processors/InvokeHTTP.h
@@ -16,18 +16,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef __INVOKE_HTTP_H__
-#define __INVOKE_HTTP_H__
+#pragma once
 
 #include <curl/curl.h>
 #include <memory>
 #include <string>
 
-#include "utils/ByteArrayCallback.h"
 #include "FlowFileRecord.h"
 #include "core/Processor.h"
 #include "core/ProcessSession.h"
-#include "core/Core.h"
 #include "core/Property.h"
 #include "core/Resource.h"
 #include "controllers/SSLContextService.h"
@@ -48,7 +45,7 @@ class InvokeHTTP : public core::Processor {
   /*!
    * Create a new processor
    */
-  InvokeHTTP(const std::string& name, const utils::Identifier& uuid = {})
+  explicit InvokeHTTP(const std::string& name, const utils::Identifier& uuid = {})
       : Processor(name, uuid) {
   }
   // Destructor
@@ -173,5 +170,3 @@ REGISTER_RESOURCE(InvokeHTTP, "An HTTP client processor which can interact with
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif  // EXTENSIONS_HTTP_CURL_PROCESSORS_INVOKEHTTP_H_
diff --git a/extensions/http-curl/protocols/AgentPrinter.cpp b/extensions/http-curl/protocols/AgentPrinter.cpp
index 09a5781..2d9c7c7 100644
--- a/extensions/http-curl/protocols/AgentPrinter.cpp
+++ b/extensions/http-curl/protocols/AgentPrinter.cpp
@@ -20,13 +20,7 @@
 
 #include <algorithm>
 #include <memory>
-#include <utility>
-#include <map>
-#include <list>
 #include <string>
-#include <vector>
-
-#include "utils/gsl.h"
 
 #include "rapidjson/prettywriter.h"
 
diff --git a/extensions/http-curl/protocols/AgentPrinter.h b/extensions/http-curl/protocols/AgentPrinter.h
index 47cb4e9..f471ec0 100644
--- a/extensions/http-curl/protocols/AgentPrinter.h
+++ b/extensions/http-curl/protocols/AgentPrinter.h
@@ -15,16 +15,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_INCLUDE_C2_AGENTPRINTER_H_
-#define LIBMINIFI_INCLUDE_C2_AGENTPRINTER_H_
+#pragma once
 
 #include <string>
-#include <mutex>
+#include <memory>
 #include "core/Resource.h"
 #include "c2/protocols/RESTProtocol.h"
-#include "CivetServer.h"
 #include "c2/C2Protocol.h"
-#include "controllers/SSLContextService.h"
 
 namespace org {
 namespace apache {
@@ -58,18 +55,14 @@ class AgentPrinter : public HeartbeatJsonSerializer, public HeartbeatReporter {
    */
   rapidjson::Value serializeJsonPayload(const C2Payload &payload, rapidjson::Document::AllocatorType &alloc) override;
 
- protected:
-
  private:
   std::shared_ptr<logging::Logger> logger_;
 };
 
 REGISTER_RESOURCE(AgentPrinter, "Encapsulates printing agent information.");
 
-} /* namesapce c2 */
+} /* namespace c2 */
 } /* namespace minifi */
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* LIBMINIFI_INCLUDE_C2_AGENTPRINTER_H_ */
diff --git a/extensions/http-curl/protocols/RESTReceiver.h b/extensions/http-curl/protocols/RESTReceiver.h
index 00874fd..f6373ef 100644
--- a/extensions/http-curl/protocols/RESTReceiver.h
+++ b/extensions/http-curl/protocols/RESTReceiver.h
@@ -15,16 +15,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_INCLUDE_C2_RESTRCVR_H_
-#define LIBMINIFI_INCLUDE_C2_RESTRCVR_H_
+#pragma once
 
 #include <string>
 #include <mutex>
+#include <memory>
 #include "core/Resource.h"
 #include "c2/protocols/RESTProtocol.h"
 #include "CivetServer.h"
 #include "c2/C2Protocol.h"
-#include "controllers/SSLContextService.h"
 
 namespace org {
 namespace apache {
@@ -46,14 +45,13 @@ int ssl_protocol_en(void *ssl_context, void *user_data);
  */
 class RESTReceiver : public RESTProtocol, public HeartbeatReporter {
  public:
-  RESTReceiver(const std::string& name, const utils::Identifier& uuid = {});
+  explicit RESTReceiver(const std::string& name, const utils::Identifier& uuid = {});
 
   void initialize(core::controller::ControllerServiceProvider* controller, const std::shared_ptr<state::StateMonitor> &updateSink,
                           const std::shared_ptr<Configure> &configure) override;
   int16_t heartbeat(const C2Payload &heartbeat) override;
 
  protected:
-
   class ListeningProtocol : public CivetHandler {
    public:
     ListeningProtocol() = default;
@@ -96,10 +94,8 @@ class RESTReceiver : public RESTProtocol, public HeartbeatReporter {
 
 REGISTER_RESOURCE(RESTReceiver, "Provides a webserver to display C2 heartbeat information");
 
-} /* namesapce c2 */
+} /* namespace c2 */
 } /* namespace minifi */
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* LIBMINIFI_INCLUDE_C2_RESTRCVR_H_ */
diff --git a/extensions/http-curl/protocols/RESTSender.cpp b/extensions/http-curl/protocols/RESTSender.cpp
index 4b961f5..78e5155 100644
--- a/extensions/http-curl/protocols/RESTSender.cpp
+++ b/extensions/http-curl/protocols/RESTSender.cpp
@@ -19,16 +19,11 @@
 #include "RESTSender.h"
 
 #include <algorithm>
-#include <iostream>
 #include <memory>
-#include <utility>
-#include <map>
 #include <string>
 #include <vector>
 #include <limits>
 #include "utils/file/FileUtils.h"
-#include "utils/StringUtils.h"
-#include "utils/file/FileManager.h"
 
 namespace org {
 namespace apache {
diff --git a/extensions/http-curl/protocols/RESTSender.h b/extensions/http-curl/protocols/RESTSender.h
index 61e4435..bd2900e 100644
--- a/extensions/http-curl/protocols/RESTSender.h
+++ b/extensions/http-curl/protocols/RESTSender.h
@@ -15,16 +15,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_INCLUDE_C2_RESTSENDER_H_
-#define LIBMINIFI_INCLUDE_C2_RESTSENDER_H_
+#pragma once
 
 #include <string>
-#include <mutex>
+#include <memory>
 
-#include "utils/ByteArrayCallback.h"
 #include "c2/C2Protocol.h"
 #include "c2/protocols/RESTProtocol.h"
-#include "c2/HeartbeatReporter.h"
 #include "controllers/SSLContextService.h"
 #include "../client/HTTPClient.h"
 
@@ -79,10 +76,8 @@ class RESTSender : public RESTProtocol, public C2Protocol {
 
 REGISTER_RESOURCE(RESTSender, "Encapsulates the restful protocol that is built upon C2Protocol.");
 
-}  // namesapce c2
+}  // namespace c2
 }  // namespace minifi
 }  // namespace nifi
 }  // namespace apache
 }  // namespace org
-
-#endif /* LIBMINIFI_INCLUDE_C2_RESTPROTOCOL_H_ */
diff --git a/extensions/http-curl/sitetosite/HTTPProtocol.h b/extensions/http-curl/sitetosite/HTTPProtocol.h
index e074ee7..c128f48 100644
--- a/extensions/http-curl/sitetosite/HTTPProtocol.h
+++ b/extensions/http-curl/sitetosite/HTTPProtocol.h
@@ -15,30 +15,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef __SITE2SITE_CLIENT_PROTOCOL_H__
-#define __SITE2SITE_CLIENT_PROTOCOL_H__
+#pragma once
 
-#include <stdio.h>
-#include <sys/types.h>
 #include <string>
-#include <errno.h>
-#include <chrono>
-#include <set>
-#include <thread>
-#include <algorithm>
+#include <map>
+#include <memory>
+#include <vector>
+#include <utility>
 #include "HTTPTransaction.h"
 #include "sitetosite/SiteToSite.h"
 #include "sitetosite/SiteToSiteClient.h"
-#include "core/Property.h"
-#include "properties/Configure.h"
-#include "FlowFileRecord.h"
 #include "core/logging/LoggerConfiguration.h"
 #include "core/ProcessContext.h"
 #include "core/ProcessSession.h"
-#include "io/CRCStream.h"
 #include "sitetosite/Peer.h"
 #include "utils/Id.h"
-#include "../client/HTTPClient.h"
 
 namespace org {
 namespace apache {
@@ -58,12 +49,12 @@ typedef struct Site2SitePeerStatus {
 // HttpSiteToSiteClient Class
 class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
   static constexpr char const* PROTOCOL_VERSION_HEADER = "x-nifi-site-to-site-protocol-version";
- public:
 
+ public:
   /*!
    * Create a new http protocol
    */
-  HttpSiteToSiteClient(const std::string& /*name*/, const utils::Identifier& /*uuid*/ = {})
+  explicit HttpSiteToSiteClient(const std::string& /*name*/, const utils::Identifier& /*uuid*/ = {})
       : SiteToSiteClient(),
         current_code(UNRECOGNIZED_RESPONSE_CODE),
         logger_(logging::LoggerFactory<HttpSiteToSiteClient>::getLogger()) {
@@ -73,7 +64,7 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
   /*!
    * Create a new http protocol
    */
-  HttpSiteToSiteClient(std::unique_ptr<SiteToSitePeer> peer)
+  explicit HttpSiteToSiteClient(std::unique_ptr<SiteToSitePeer> peer)
       : SiteToSiteClient(),
         current_code(UNRECOGNIZED_RESPONSE_CODE),
         logger_(logging::LoggerFactory<HttpSiteToSiteClient>::getLogger()) {
@@ -108,7 +99,6 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
   void deleteTransaction(const utils::Identifier& transactionID) override;
 
  protected:
-
   /**
    * Closes the transaction
    * @param transactionID transaction id reference.
@@ -177,7 +167,6 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
   }
 
  private:
-
   RespondCode current_code;
   std::shared_ptr<logging::Logger> logger_;
   // Prevent default copy constructor and assignment operation
@@ -192,4 +181,3 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-#endif
diff --git a/extensions/http-curl/sitetosite/HTTPTransaction.h b/extensions/http-curl/sitetosite/HTTPTransaction.h
index a88cdf8..ecadeb4 100644
--- a/extensions/http-curl/sitetosite/HTTPTransaction.h
+++ b/extensions/http-curl/sitetosite/HTTPTransaction.h
@@ -18,6 +18,9 @@
 #ifndef EXTENSIONS_HTTP_CURL_SITETOSITE_HTTPTRANSACTION_H_
 #define EXTENSIONS_HTTP_CURL_SITETOSITE_HTTPTRANSACTION_H_
 
+#include <utility>
+#include <string>
+
 #include "sitetosite/SiteToSite.h"
 #include "io/CRCStream.h"
 #include "sitetosite/SiteToSiteClient.h"
@@ -56,6 +59,7 @@ class HttpTransaction : public sitetosite::Transaction {
   const std::string &getTransactionUrl() {
     return transaction_url_;
   }
+
  protected:
   sitetosite::SiteToSiteClient *client_ref_;
   std::string transaction_url_;
diff --git a/extensions/http-curl/sitetosite/PeersEntity.h b/extensions/http-curl/sitetosite/PeersEntity.h
index c7ce22a..4f55dc9 100644
--- a/extensions/http-curl/sitetosite/PeersEntity.h
+++ b/extensions/http-curl/sitetosite/PeersEntity.h
@@ -15,11 +15,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_HTTP_CURL_SITETOSITE_PEERSENTITY_H_
-#define EXTENSIONS_HTTP_CURL_SITETOSITE_PEERSENTITY_H_
+#pragma once
 
 #include <string>
-#include <exception>
+#include <vector>
+#include <memory>
+#include <utility>
 
 #include "rapidjson/document.h"
 #include "rapidjson/error/en.h"
@@ -39,7 +40,6 @@ namespace sitetosite {
  */
 class PeersEntity {
  public:
-
   static bool parse(const std::shared_ptr<logging::Logger> &logger, const std::string &entity, const utils::Identifier &id, std::vector<PeerStatus> &peer_statuses) {
     try {
       rapidjson::Document root;
@@ -122,5 +122,3 @@ class PeersEntity {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* EXTENSIONS_HTTP_CURL_SITETOSITE_PEERSENTITY_H_ */
diff --git a/extensions/http-curl/tests/C2DescribeManifestTest.cpp b/extensions/http-curl/tests/C2DescribeManifestTest.cpp
index dee853d..3e19afd 100644
--- a/extensions/http-curl/tests/C2DescribeManifestTest.cpp
+++ b/extensions/http-curl/tests/C2DescribeManifestTest.cpp
@@ -23,7 +23,7 @@
 #include "HTTPHandlers.h"
 
 class DescribeManifestHandler: public HeartbeatHandler {
-public:
+ public:
   void handleHeartbeat(const rapidjson::Document&, struct mg_connection * conn) override {
     sendHeartbeatResponse("DESCRIBE", "manifest", "889345", conn);
   }
diff --git a/extensions/http-curl/tests/C2NullConfiguration.cpp b/extensions/http-curl/tests/C2NullConfiguration.cpp
index 243aa27..a6ecd1b 100644
--- a/extensions/http-curl/tests/C2NullConfiguration.cpp
+++ b/extensions/http-curl/tests/C2NullConfiguration.cpp
@@ -33,7 +33,7 @@
 #include "utils/IntegrationTestUtils.h"
 
 class VerifyC2Server : public HTTPIntegrationBase {
-public:
+ public:
   explicit VerifyC2Server(bool isSecure)
       : isSecure(isSecure) {
     char format[] = "/tmp/ssth.XXXXXX";
diff --git a/extensions/http-curl/tests/C2VerifyResourceConsumptionInHeartbeat.cpp b/extensions/http-curl/tests/C2VerifyResourceConsumptionInHeartbeat.cpp
index a372efc..f3d8f83 100644
--- a/extensions/http-curl/tests/C2VerifyResourceConsumptionInHeartbeat.cpp
+++ b/extensions/http-curl/tests/C2VerifyResourceConsumptionInHeartbeat.cpp
@@ -17,6 +17,8 @@
  */
 
 #undef NDEBUG
+#include <functional>
+
 #include "TestBase.h"
 #include "c2/C2Agent.h"
 #include "protocols/RESTProtocol.h"
@@ -93,8 +95,7 @@ class ResourceConsumptionInHeartbeatHandler : public HeartbeatHandler {
 
 class VerifyResourceConsumptionInHeartbeat : public VerifyC2Base {
  public:
-
-  VerifyResourceConsumptionInHeartbeat(std::function<bool()> event_to_wait_for) :
+  explicit VerifyResourceConsumptionInHeartbeat(std::function<bool()> event_to_wait_for) :
       VerifyC2Base(), event_to_wait_for_(event_to_wait_for) {
   }
 
@@ -108,7 +109,7 @@ class VerifyResourceConsumptionInHeartbeat : public VerifyC2Base {
 
   void runAssertions() override {
     using org::apache::nifi::minifi::utils::verifyEventHappenedInPollTime;
-    assert(verifyEventHappenedInPollTime(std::chrono::milliseconds(7000),event_to_wait_for_));
+    assert(verifyEventHappenedInPollTime(std::chrono::milliseconds(7000), event_to_wait_for_));
   }
 
   void configureFullHeartbeat() override {
diff --git a/extensions/http-curl/tests/C2VerifyServeResults.cpp b/extensions/http-curl/tests/C2VerifyServeResults.cpp
index 33ad6e2..053cb6e 100644
--- a/extensions/http-curl/tests/C2VerifyServeResults.cpp
+++ b/extensions/http-curl/tests/C2VerifyServeResults.cpp
@@ -30,8 +30,8 @@
 #include "utils/IntegrationTestUtils.h"
 
 class VerifyC2Server : public HTTPIntegrationBase {
-public:
-  explicit VerifyC2Server() {
+ public:
+  VerifyC2Server() {
     char format[] = "/tmp/ssth.XXXXXX";
     dir = testController.createTempDirectory(format);
   }
diff --git a/extensions/http-curl/tests/CivetStream.h b/extensions/http-curl/tests/CivetStream.h
index 9cbba27..ce1c15d 100644
--- a/extensions/http-curl/tests/CivetStream.h
+++ b/extensions/http-curl/tests/CivetStream.h
@@ -15,19 +15,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_HTTP_CURL_CLIENT_CIVETSTREAM_H_
-#define EXTENSIONS_HTTP_CURL_CLIENT_CIVETSTREAM_H_
+#pragma once
 
-#include <algorithm>
 #include <memory>
-#include <thread>
-#include <mutex>
-#include <future>
-#include <vector>
 
 #include "io/BaseStream.h"
 #include "civetweb.h"
-#include "CivetServer.h"
 namespace org {
 namespace apache {
 namespace nifi {
@@ -57,7 +50,6 @@ class CivetStream : public io::InputStream {
   struct mg_connection *conn;
 
  private:
-
   std::shared_ptr<logging::Logger> logger_;
 };
 } /* namespace io */
@@ -65,5 +57,3 @@ class CivetStream : public io::InputStream {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* EXTENSIONS_HTTP_CURL_CLIENT_CIVETSTREAM_H_ */
diff --git a/extensions/http-curl/tests/HTTPHandlers.h b/extensions/http-curl/tests/HTTPHandlers.h
index f13e2be..6f71ade 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -15,12 +15,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_TEST_CURL_TESTS_SITETOSITEHTTP_HTTPHANDLERS_H_
-#define LIBMINIFI_TEST_CURL_TESTS_SITETOSITEHTTP_HTTPHANDLERS_H_
+#pragma once
 
 #include <algorithm>
 #include <cinttypes>
 #include <utility>
+#include <memory>
+#include <string>
+#include <vector>
+#include <map>
+
 #include "civetweb.h"
 #include "CivetServer.h"
 #include "concurrentqueue.h"
@@ -78,7 +82,6 @@ class SiteToSiteLocationResponder : public ServerAwareHandler {
 
 class PeerResponder : public ServerAwareHandler {
  public:
-
   explicit PeerResponder(std::string base_url) {
     (void)base_url;  // unused in release builds
     std::string scheme;
@@ -107,14 +110,13 @@ class PeerResponder : public ServerAwareHandler {
 
 class SiteToSiteBaseResponder : public ServerAwareHandler {
  public:
-
   explicit SiteToSiteBaseResponder(std::string base_url)
       : base_url(std::move(base_url)) {
   }
 
   bool handleGet(CivetServer* /*server*/, struct mg_connection *conn) override {
     std::string site2site_rest_resp =
-        "{\"controller\":{\"id\":\"96dab149-0162-1000-7924-ed3122d6ea2b\",\"name\":\"NiFi Flow\",\"comments\":\"\",\"runningCount\":3,\"stoppedCount\":6,\"invalidCount\":1,\"disabledCount\":0,\"inputPortCount\":1,\"outputPortCount\":1,\"remoteSiteListeningPort\":10443,\"siteToSiteSecure\":false,\"instanceId\":\"13881505-0167-1000-be72-aa29341a3e9a\",\"inputPorts\":[{\"id\":\"471deef6-2a6e-4a7d-912a-81cc17e3a204\",\"name\":\"RPGIN\",\"comments\":\"\",\"state\":\"RUNNING\"}],\"outputPorts\ [...]
+        "{\"controller\":{\"id\":\"96dab149-0162-1000-7924-ed3122d6ea2b\",\"name\":\"NiFi Flow\",\"comments\":\"\",\"runningCount\":3,\"stoppedCount\":6,\"invalidCount\":1,\"disabledCount\":0,\"inputPortCount\":1,\"outputPortCount\":1,\"remoteSiteListeningPort\":10443,\"siteToSiteSecure\":false,\"instanceId\":\"13881505-0167-1000-be72-aa29341a3e9a\",\"inputPorts\":[{\"id\":\"471deef6-2a6e-4a7d-912a-81cc17e3a204\",\"name\":\"RPGIN\",\"comments\":\"\",\"state\":\"RUNNING\"}],\"outputPorts\ [...]
     std::stringstream headers;
     headers << "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: " << site2site_rest_resp.length() << "\r\nConnection: close\r\n\r\n";
     mg_printf(conn, "%s", headers.str().c_str());
@@ -128,7 +130,6 @@ class SiteToSiteBaseResponder : public ServerAwareHandler {
 
 class TransactionResponder : public ServerAwareHandler {
  public:
-
   explicit TransactionResponder(std::string base_url, std::string port_id, bool input_port, bool wrong_uri = false, bool empty_transaction_uri = false)
       : base_url(std::move(base_url)),
         wrong_uri(wrong_uri),
@@ -177,6 +178,7 @@ class TransactionResponder : public ServerAwareHandler {
   std::string getTransactionId() {
     return transaction_id_str;
   }
+
  protected:
   std::string base_url;
   std::string transaction_id_str;
@@ -189,7 +191,6 @@ class TransactionResponder : public ServerAwareHandler {
 
 class FlowFileResponder : public ServerAwareHandler {
  public:
-
   explicit FlowFileResponder(bool input_port, bool wrong_uri = false, bool invalid_checksum = false)
       : wrong_uri(wrong_uri),
         input_port(input_port),
@@ -317,7 +318,6 @@ class FlowFileResponder : public ServerAwareHandler {
 
 class DeleteTransactionResponder : public ServerAwareHandler {
  public:
-
   explicit DeleteTransactionResponder(std::string base_url, std::string response_code, int expected_resp_code)
       : flow_files_feed_(nullptr),
         base_url(std::move(base_url)),
@@ -521,28 +521,27 @@ class C2UpdateHandler : public C2FlowProvider {
 };
 
 class C2FailedUpdateHandler : public C2UpdateHandler {
-public:
- explicit C2FailedUpdateHandler(const std::string& test_file_location)
-   : C2UpdateHandler(test_file_location) {
- }
+ public:
+  explicit C2FailedUpdateHandler(const std::string& test_file_location) : C2UpdateHandler(test_file_location) {
+  }
 
- bool handlePost(CivetServer *server, struct mg_connection *conn) override {
-   calls_++;
-   const auto data = readPayload(conn);
+  bool handlePost(CivetServer *server, struct mg_connection *conn) override {
+    calls_++;
+    const auto data = readPayload(conn);
 
-   if (data.find("operationState") != std::string::npos) {
-     assert(data.find("state\": \"NOT_APPLIED") != std::string::npos);
-   }
+    if (data.find("operationState") != std::string::npos) {
+      assert(data.find("state\": \"NOT_APPLIED") != std::string::npos);
+    }
 
-   return C2UpdateHandler::handlePost(server, conn);
- }
+    return C2UpdateHandler::handlePost(server, conn);
+  }
 };
 
 class InvokeHTTPCouldNotConnectHandler : public ServerAwareHandler {
 };
 
 class InvokeHTTPResponseOKHandler : public ServerAwareHandler {
-public:
+ public:
   bool handlePost(CivetServer *, struct mg_connection *conn) override {
     mg_printf(conn, "HTTP/1.1 201 OK\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
     return true;
@@ -550,7 +549,7 @@ public:
 };
 
 class InvokeHTTPRedirectHandler : public ServerAwareHandler {
-public:
+ public:
   bool handlePost(CivetServer *, struct mg_connection *conn) override {
     mg_printf(conn, "HTTP/1.1 301 OK\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nLocation: /\r\n\r\n");
     return true;
@@ -558,7 +557,7 @@ public:
 };
 
 class InvokeHTTPResponse404Handler : public ServerAwareHandler {
-public:
+ public:
   bool handlePost(CivetServer *, struct mg_connection *conn) override {
     mg_printf(conn, "HTTP/1.1 404 Not Found\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
     return true;
@@ -566,7 +565,7 @@ public:
 };
 
 class InvokeHTTPResponse501Handler : public ServerAwareHandler {
-public:
+ public:
   bool handlePost(CivetServer *, struct mg_connection *conn) override {
     mg_printf(conn, "HTTP/1.1 501 Not Implemented\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
     return true;
@@ -574,8 +573,8 @@ public:
 };
 
 class TimeoutingHTTPHandler : public ServerAwareHandler {
-public:
-  TimeoutingHTTPHandler(std::vector<std::chrono::milliseconds> wait_times)
+ public:
+  explicit TimeoutingHTTPHandler(std::vector<std::chrono::milliseconds> wait_times)
       : wait_times_(wait_times) {
   }
   bool handlePost(CivetServer *, struct mg_connection *conn) override {
@@ -594,6 +593,7 @@ public:
     respond(conn);
     return true;
   }
+
  private:
   void respond(struct mg_connection *conn) {
     if (!wait_times_.empty() && wait_times_[0] > std::chrono::seconds(0)) {
@@ -610,4 +610,3 @@ public:
   }
   std::vector<std::chrono::milliseconds> wait_times_;
 };
-#endif /* LIBMINIFI_TEST_CURL_TESTS_SITETOSITEHTTP_HTTPHANDLERS_H_ */
diff --git a/extensions/http-curl/tests/HTTPIntegrationBase.h b/extensions/http-curl/tests/HTTPIntegrationBase.h
index 922e9ae..1289364 100644
--- a/extensions/http-curl/tests/HTTPIntegrationBase.h
+++ b/extensions/http-curl/tests/HTTPIntegrationBase.h
@@ -15,8 +15,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_HTTPCURL_TESTS_HTTPINTEGRATIONBASE_H
-#define EXTENSIONS_HTTPCURL_TESTS_HTTPINTEGRATIONBASE_H
+#pragma once
+
+#include <memory>
+#include <string>
 
 #include "CivetServer.h"
 #include "integration/IntegrationBase.h"
@@ -37,7 +39,7 @@ int ssl_enable(void* /*ssl_context*/, void* /*user_data*/) {
 }
 
 class HTTPIntegrationBase : public IntegrationBase {
-public:
+ public:
   explicit HTTPIntegrationBase(uint64_t waitTime = DEFAULT_WAITTIME_MSECS)
       : IntegrationBase(waitTime),
         server(nullptr) {
@@ -160,7 +162,7 @@ class VerifyC2Describe : public VerifyC2Base {
 };
 
 class VerifyC2Update : public HTTPIntegrationBase {
-public:
+ public:
   explicit VerifyC2Update(uint64_t waitTime)
       : HTTPIntegrationBase(waitTime) {
   }
@@ -224,7 +226,7 @@ class VerifyFlowFetched : public HTTPIntegrationBase {
 };
 
 class VerifyC2FailedUpdate : public VerifyC2Update {
-public:
+ public:
   explicit VerifyC2FailedUpdate(uint64_t waitTime)
       : VerifyC2Update(waitTime) {
   }
@@ -245,4 +247,3 @@ public:
     VerifyC2Update::cleanup();
   }
 };
-#endif  // EXTENSIONS_HTTPCURL_TESTS_HTTPINTEGRATIONBASE_H
diff --git a/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp b/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp
index ad4ad11..ad72670 100644
--- a/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp
+++ b/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp
@@ -35,7 +35,7 @@
 #include "client/HTTPStream.h"
 
 class SiteToSiteTestHarness : public HTTPIntegrationBase {
-public:
+ public:
   explicit SiteToSiteTestHarness(bool isSecure, std::chrono::milliseconds waitTime = std::chrono::milliseconds{2000})
       : HTTPIntegrationBase(waitTime.count()), isSecure(isSecure) {
     char format[] = "/tmp/ssth.XXXXXX";
diff --git a/extensions/http-curl/tests/HttpGetIntegrationTest.cpp b/extensions/http-curl/tests/HttpGetIntegrationTest.cpp
index d34ed72..1cd4b5b 100644
--- a/extensions/http-curl/tests/HttpGetIntegrationTest.cpp
+++ b/extensions/http-curl/tests/HttpGetIntegrationTest.cpp
@@ -23,7 +23,6 @@
 #include <chrono>
 #include <memory>
 #include <string>
-#include <thread>
 #include <vector>
 #include "HTTPClient.h"
 #include "InvokeHTTP.h"
diff --git a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
index 688d0c7..90d0eba 100644
--- a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
+++ b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
@@ -32,7 +32,7 @@
 #include "utils/IntegrationTestUtils.h"
 
 class HttpTestHarness : public HTTPIntegrationBase {
-public:
+ public:
   HttpTestHarness() : HTTPIntegrationBase(4000) {
     char format[] = "/tmp/ssth.XXXXXX";
     dir = testController.createTempDirectory(format);
diff --git a/extensions/http-curl/tests/ServerAwareHandler.h b/extensions/http-curl/tests/ServerAwareHandler.h
index 910383d..473109e 100644
--- a/extensions/http-curl/tests/ServerAwareHandler.h
+++ b/extensions/http-curl/tests/ServerAwareHandler.h
@@ -16,11 +16,10 @@
  * limitations under the License.
  */
 
-#ifndef NIFI_MINIFI_CPP_SERVERAWAREHANDLER_H
-#define NIFI_MINIFI_CPP_SERVERAWAREHANDLER_H
+#pragma once
 
 class ServerAwareHandler: public CivetHandler{
-protected:
+ protected:
   void sleep_for(std::chrono::milliseconds time) {
     std::unique_lock<std::mutex> lock(mutex_);
     stop_signal_.wait_for(lock, time, [&] {return terminate_.load();});
@@ -30,7 +29,7 @@ protected:
     return !terminate_.load();
   }
 
-public:
+ public:
   void stop() {
     terminate_ = true;
     stop_signal_.notify_all();
@@ -41,5 +40,3 @@ public:
   std::condition_variable stop_signal_;
   std::atomic_bool terminate_{false};
 };
-
-#endif  // NIFI_MINIFI_CPP_SERVERAWAREHANDLER_H
diff --git a/extensions/http-curl/tests/SiteToSiteRestTest.cpp b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
index f360a4e..f26da02 100644
--- a/extensions/http-curl/tests/SiteToSiteRestTest.cpp
+++ b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
@@ -62,7 +62,7 @@ class Responder : public ServerAwareHandler {
 };
 
 class SiteToSiteTestHarness : public HTTPIntegrationBase {
-public:
+ public:
   explicit SiteToSiteTestHarness(bool isSecure)
       : isSecure(isSecure) {
     char format[] = "/tmp/ssth.XXXXXX";
diff --git a/extensions/http-curl/tests/TestServer.h b/extensions/http-curl/tests/TestServer.h
index 043f04b..c6f371f 100644
--- a/extensions/http-curl/tests/TestServer.h
+++ b/extensions/http-curl/tests/TestServer.h
@@ -15,14 +15,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_TEST_TESTSERVER_H_
-#define LIBMINIFI_TEST_TESTSERVER_H_
+#pragma once
 
 #include <string>
-#include <iostream>
+#include <memory>
+#include <vector>
 #include "civetweb.h"
 #include "CivetServer.h"
-#include "civetweb.h"
 #include "HTTPUtils.h"
 #include "ServerAwareHandler.h"
 
@@ -49,6 +48,7 @@ class TestServer{
       return counter;
     }
   };
+
  public:
   TestServer(std::string &port, std::string &rooturi, CivetHandler *handler, CivetCallbacks *callbacks, std::string& /*cert*/, std::string &ca_cert) {
     if (!mg_check_feature(2)) {
@@ -86,6 +86,7 @@ class TestServer{
       if (serverAwareHandler) serverAwareHandler->stop();
     }
   }
+
  private:
   // server_ depends on lib_ (the library initializer)
   // so their order matters
@@ -94,5 +95,3 @@ class TestServer{
 
   std::vector<CivetHandler*> handlers_;
 };
-
-#endif
diff --git a/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp b/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
index b5e5ffe..026d3b5 100644
--- a/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
+++ b/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
@@ -36,7 +36,7 @@
 #include "client/HTTPStream.h"
 
 class SiteToSiteTestHarness : public HTTPIntegrationBase {
-public:
+ public:
   explicit SiteToSiteTestHarness(bool isSecure, std::chrono::milliseconds waitTime = std::chrono::milliseconds{1000})
       : HTTPIntegrationBase(waitTime.count()), isSecure(isSecure) {
     char format[] = "/tmp/ssth.XXXXXX";
@@ -69,7 +69,7 @@ public:
     std::this_thread::sleep_for(std::chrono::milliseconds(wait_time_));
   }
 
-protected:
+ protected:
   bool isSecure;
   std::string dir;
   std::stringstream ss;
diff --git a/extensions/http-curl/tests/unit/HTTPClientTests.cpp b/extensions/http-curl/tests/unit/HTTPClientTests.cpp
index 0a0d3e5..8e9dc12 100644
--- a/extensions/http-curl/tests/unit/HTTPClientTests.cpp
+++ b/extensions/http-curl/tests/unit/HTTPClientTests.cpp
@@ -16,17 +16,12 @@
  * limitations under the License.
  */
 
-#include <fstream>
 #include <map>
 #include <memory>
 #include <utility>
+#include <vector>
 #include <string>
-#include <set>
-#include "FlowController.h"
-#include "io/BaseStream.h"
 #include "TestBase.h"
-#include "processors/GetFile.h"
-#include "core/Core.h"
 #include "client/HTTPClient.h"
 #include "CivetServer.h"
 
@@ -56,7 +51,7 @@ TEST_CASE("HTTPClientTestChunkedResponse", "[basic]") {
       mg_printf(conn, "HTTP/1.1 100 Continue\r\n\r\n");
 
       std::array<uint8_t, 16384U> buf;
-      while (mg_read(conn, buf.data(), buf.size()) > 0);
+      while (mg_read(conn, buf.data(), buf.size()) > 0) {}
 
       send_response(conn);
       return true;
diff --git a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
index 7f1f119..9c03e64 100644
--- a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
+++ b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
@@ -16,13 +16,9 @@
  * limitations under the License.
  */
 
-#include <fstream>
-#include <map>
 #include <memory>
 #include <utility>
 #include <string>
-#include <set>
-#include "FlowController.h"
 #include "io/BaseStream.h"
 #include "TestBase.h"
 #include "processors/GetFile.h"
@@ -36,7 +32,6 @@
 #include "core/ProcessContext.h"
 #include "core/ProcessSession.h"
 #include "core/ProcessorNode.h"
-#include "processors/InvokeHTTP.h"
 #include "processors/LogAttribute.h"
 #include "utils/gsl.h"
 
diff --git a/extensions/usb-camera/CMakeLists.txt b/extensions/usb-camera/CMakeLists.txt
index f770247..14c1c08 100644
--- a/extensions/usb-camera/CMakeLists.txt
+++ b/extensions/usb-camera/CMakeLists.txt
@@ -58,3 +58,4 @@ target_link_libraries(minifi-usb-camera-extensions libuvc PNG::PNG)
 SET (USB-CAMERA-EXTENSIONS minifi-usb-camera-extensions PARENT_SCOPE)
 
 register_extension(minifi-usb-camera-extensions)
+register_extension_linter(minifi-usb-camera-extensions-linter)
diff --git a/extensions/usb-camera/GetUSBCamera.cpp b/extensions/usb-camera/GetUSBCamera.cpp
index c05c2ed..074341f 100644
--- a/extensions/usb-camera/GetUSBCamera.cpp
+++ b/extensions/usb-camera/GetUSBCamera.cpp
@@ -20,7 +20,10 @@
 #include <png.h>
 
 #include <utility>
+#include <string>
 #include <vector>
+#include <set>
+#include <algorithm>
 
 #include "GetUSBCamera.h"
 
diff --git a/extensions/usb-camera/GetUSBCamera.h b/extensions/usb-camera/GetUSBCamera.h
index ac28b1e..f5053a1 100644
--- a/extensions/usb-camera/GetUSBCamera.h
+++ b/extensions/usb-camera/GetUSBCamera.h
@@ -17,14 +17,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_INCLUDE_PROCESSORS_GETUSBCAMERA_H_
-#define LIBMINIFI_INCLUDE_PROCESSORS_GETUSBCAMERA_H_
+#pragma once
 
 #include <list>
 #include <memory>
 #include <string>
+#include <vector>
 
-#include <libuvc/libuvc.h>
+#include "libuvc/libuvc.h"
 
 #include "FlowFileRecord.h"
 #include "core/Processor.h"
@@ -138,12 +138,10 @@ class GetUSBCamera : public core::Processor {
   void cleanupUvc();
 };
 
-REGISTER_RESOURCE(GetUSBCamera, "Gets images from USB Video Class (UVC)-compatible devices. Outputs one flow file per frame at the rate specified by the FPS property in the format specified by the Format property.");
+REGISTER_RESOURCE(GetUSBCamera, "Gets images from USB Video Class (UVC)-compatible devices. Outputs one flow file per frame at the rate specified by the FPS property in the format specified by the Format property.");  // NOLINT line length
 
 } /* namespace processors */
 } /* namespace minifi */
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif  // LIBMINIFI_INCLUDE_PROCESSORS_GETUSBCAMERA_H_

[nifi-minifi-cpp] 02/03: MINIFICPP-1567 enable linter checks in extensions (part 1)

Posted by sz...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

szaszm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit 186f163599b6526d20e1dd6b73fe2ec27770dce0
Author: Martin Zink <ma...@protonmail.com>
AuthorDate: Mon Jun 14 16:26:07 2021 +0200

    MINIFICPP-1567 enable linter checks in extensions (part 1)
    
    extensions: wel, bustache, civetweb, coap
    
    Closes #1089
    
    Signed-off-by: Marton Szasz <sz...@gmail.com>
---
 extensions/bustache/ApplyTemplate.cpp              |   4 +-
 extensions/bustache/ApplyTemplate.h                |   8 +-
 extensions/bustache/CMakeLists.txt                 |   1 +
 extensions/bustache/TemplateLoader.h               |   8 +-
 extensions/civetweb/CMakeLists.txt                 |   2 +-
 extensions/civetweb/processors/ListenHTTP.cpp      |   5 ++
 extensions/civetweb/processors/ListenHTTP.h        |  13 +--
 extensions/coap/CMakeLists.txt                     |   2 +-
 extensions/coap/COAPLoader.h                       |   8 +-
 .../coap/controllerservice/CoapConnector.cpp       |   6 +-
 extensions/coap/controllerservice/CoapConnector.h  |  17 ++--
 extensions/coap/controllerservice/CoapMessaging.h  |  14 ++-
 extensions/coap/controllerservice/CoapResponse.h   |  11 +--
 extensions/coap/nanofi/coap_functions.h            |   2 -
 extensions/coap/nanofi/coap_message.h              |   5 +-
 extensions/coap/nanofi/coap_server.h               |   5 +-
 extensions/coap/protocols/CoapC2Protocol.cpp       |   2 +-
 extensions/coap/protocols/CoapC2Protocol.h         |  11 +--
 extensions/coap/server/CoapServer.cpp              |   2 +
 extensions/coap/server/CoapServer.h                |  28 +++---
 extensions/coap/tests/CoapC2VerifyHeartbeat.cpp    |   6 +-
 extensions/coap/tests/CoapIntegrationBase.h        |  11 +--
 extensions/windows-event-log/Bookmark.cpp          |  17 +++-
 extensions/windows-event-log/Bookmark.h            |  16 ++--
 extensions/windows-event-log/CMakeLists.txt        |   1 +
 .../CollectorInitiatedSubscription.cpp             |  26 +++---
 .../CollectorInitiatedSubscription.h               |  21 +++--
 .../windows-event-log/ConsumeWindowsEventLog.cpp   |  33 +++----
 .../windows-event-log/ConsumeWindowsEventLog.h     |  35 +++++---
 extensions/windows-event-log/SupportedProperty.h   |  12 +--
 extensions/windows-event-log/TailEventLog.cpp      |  24 +++--
 extensions/windows-event-log/TailEventLog.h        |  23 ++---
 .../tests/CWELCustomProviderTests.cpp              |   3 +-
 extensions/windows-event-log/tests/CWELTestUtils.h |   6 ++
 .../tests/MetadataWalkerTests.cpp                  | 100 ++++++++++-----------
 .../tests/custom-provider/CPPLINT.cfg              |   1 +
 extensions/windows-event-log/wel/JSONUtils.h       |   6 +-
 .../windows-event-log/wel/MetadataWalker.cpp       |  34 +++----
 extensions/windows-event-log/wel/MetadataWalker.h  |  25 ++++--
 .../windows-event-log/wel/UnicodeConversion.h      |  36 ++++----
 .../windows-event-log/wel/WindowsEventLog.cpp      |  33 +++----
 extensions/windows-event-log/wel/WindowsEventLog.h |  49 +++++-----
 extensions/windows-event-log/wel/XMLString.h       |  31 ++++---
 libminifi/include/io/ClientSocket.h                |   4 +-
 44 files changed, 380 insertions(+), 327 deletions(-)

diff --git a/extensions/bustache/ApplyTemplate.cpp b/extensions/bustache/ApplyTemplate.cpp
index 5550900..d4cdde5 100644
--- a/extensions/bustache/ApplyTemplate.cpp
+++ b/extensions/bustache/ApplyTemplate.cpp
@@ -17,16 +17,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include "ApplyTemplate.h"
+
 #include <iostream>
 #include <fstream>
 #include <memory>
 #include <set>
+#include <string>
 
 #include <boost/iostreams/device/mapped_file.hpp>
 
 #include <bustache/model.hpp>
 
-#include "ApplyTemplate.h"
 
 namespace org {
 namespace apache {
diff --git a/extensions/bustache/ApplyTemplate.h b/extensions/bustache/ApplyTemplate.h
index 7b0526e..a2c0e6f 100644
--- a/extensions/bustache/ApplyTemplate.h
+++ b/extensions/bustache/ApplyTemplate.h
@@ -17,10 +17,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef __APPLY_TEMPLATE_H__
-#define __APPLY_TEMPLATE_H__
+#pragma once
 
 #include <memory>
+#include <string>
 
 #include "core/Processor.h"
 #include "core/ProcessSession.h"
@@ -41,7 +41,7 @@ class ApplyTemplate : public core::Processor {
   /*!
    * Create a new processor
    */
-  ApplyTemplate(const std::string& name, const utils::Identifier& uuid = {})
+  explicit ApplyTemplate(const std::string& name, const utils::Identifier& uuid = {})
       : Processor(name, uuid),
         logger_(logging::LoggerFactory<ApplyTemplate>::getLogger()) {}
   ~ApplyTemplate() = default;
@@ -81,5 +81,3 @@ REGISTER_RESOURCE(ApplyTemplate, "Applies the mustache template specified by the
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif
diff --git a/extensions/bustache/CMakeLists.txt b/extensions/bustache/CMakeLists.txt
index 7cdf351..2dfb31d 100644
--- a/extensions/bustache/CMakeLists.txt
+++ b/extensions/bustache/CMakeLists.txt
@@ -33,3 +33,4 @@ target_link_libraries(minifi-bustache-extensions BUSTACHE::libbustache)
 SET (BUSTACHE-EXTENSIONS minifi-bustache-extensions PARENT_SCOPE)
 
 register_extension(minifi-bustache-extensions)
+register_extension_linter(minifi-bustache-extensions-linter)
diff --git a/extensions/bustache/TemplateLoader.h b/extensions/bustache/TemplateLoader.h
index 2378aa1..edc7808 100644
--- a/extensions/bustache/TemplateLoader.h
+++ b/extensions/bustache/TemplateLoader.h
@@ -15,8 +15,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSION_TEMPLATELOADER_H
-#define EXTENSION_TEMPLATELOADER_H
+#pragma once
+
+#include <memory>
+#include <string>
+#include <vector>
 
 #include "ApplyTemplate.h"
 #include "core/ClassLoader.h"
@@ -60,4 +63,3 @@ class TemplateFactory : public core::ObjectFactory {
 extern "C" {
 DLL_EXPORT void *createTemplateFactory(void);
 }
-#endif /* EXTENSION_TEMPLATELOADER_H */
diff --git a/extensions/civetweb/CMakeLists.txt b/extensions/civetweb/CMakeLists.txt
index aaa9968..e7e8985 100644
--- a/extensions/civetweb/CMakeLists.txt
+++ b/extensions/civetweb/CMakeLists.txt
@@ -34,4 +34,4 @@ target_link_libraries(minifi-civet-extensions CIVETWEB::c-library CIVETWEB::cive
 SET (civet-EXTENSIONS minifi-civet-extensions PARENT_SCOPE)
 
 register_extension(minifi-civet-extensions)
-
+register_extension_linter(minifi-civet-extensions-linter)
diff --git a/extensions/civetweb/processors/ListenHTTP.cpp b/extensions/civetweb/processors/ListenHTTP.cpp
index eaf0626..e544e82 100644
--- a/extensions/civetweb/processors/ListenHTTP.cpp
+++ b/extensions/civetweb/processors/ListenHTTP.cpp
@@ -20,6 +20,11 @@
  */
 #include "ListenHTTP.h"
 
+#include <set>
+#include <vector>
+#include <utility>
+#include <string>
+
 #include "utils/gsl.h"
 
 namespace org {
diff --git a/extensions/civetweb/processors/ListenHTTP.h b/extensions/civetweb/processors/ListenHTTP.h
index 5b4bdd0..57cc1dd 100644
--- a/extensions/civetweb/processors/ListenHTTP.h
+++ b/extensions/civetweb/processors/ListenHTTP.h
@@ -17,11 +17,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef __LISTEN_HTTP_H__
-#define __LISTEN_HTTP_H__
+#pragma once
 
+#include <map>
 #include <memory>
 #include <regex>
+#include <string>
+#include <utility>
 
 #include <CivetServer.h>
 
@@ -48,7 +50,7 @@ class ListenHTTP : public core::Processor {
   /*!
    * Create a new processor
    */
-  ListenHTTP(const std::string& name, const utils::Identifier& uuid = {})
+  explicit ListenHTTP(const std::string& name, const utils::Identifier& uuid = {})
       : Processor(name, uuid),
         logger_(logging::LoggerFactory<ListenHTTP>::getLogger()),
         batch_size_(0) {
@@ -148,7 +150,7 @@ class ListenHTTP : public core::Processor {
   // Write callback for transferring data from HTTP request to content repo
   class WriteCallback : public OutputStreamCallback {
    public:
-    WriteCallback(std::unique_ptr<io::BufferStream>);
+    explicit WriteCallback(std::unique_ptr<io::BufferStream>);
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
 
    private:
@@ -190,6 +192,7 @@ class ListenHTTP : public core::Processor {
     }
     return 0;
   }
+
  protected:
   void notifyStop() override;
 
@@ -223,5 +226,3 @@ REGISTER_RESOURCE(ListenHTTP, "Starts an HTTP Server and listens on a given base
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif
diff --git a/extensions/coap/CMakeLists.txt b/extensions/coap/CMakeLists.txt
index a28da86..f96f54c 100644
--- a/extensions/coap/CMakeLists.txt
+++ b/extensions/coap/CMakeLists.txt
@@ -35,4 +35,4 @@ target_link_libraries(minifi-coap nanofi-coap-c Threads::Threads COAP::libcoap m
 
 SET (COAP-EXTENSION minifi-coap PARENT_SCOPE)
 register_extension(minifi-coap)
-
+register_extension_linter(minifi-coap-extensions-linter)
diff --git a/extensions/coap/COAPLoader.h b/extensions/coap/COAPLoader.h
index 70f8b76..acbccd4 100644
--- a/extensions/coap/COAPLoader.h
+++ b/extensions/coap/COAPLoader.h
@@ -15,8 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_COAPLOADER_H_
-#define EXTENSIONS_COAPLOADER_H_
+#pragma once
 
 #ifdef WIN32
 #pragma comment(lib, "wldap32.lib" )
@@ -24,6 +23,10 @@
 #pragma comment(lib, "Ws2_32.lib")
 #endif
 
+#include <memory>
+#include <string>
+#include <vector>
+
 #include "core/ClassLoader.h"
 #include "utils/StringUtils.h"
 #include "protocols/CoapC2Protocol.h"
@@ -86,4 +89,3 @@ class COAPObjectFactory : public core::ObjectFactory {
 extern "C" {
   DLL_EXPORT void *createCOAPFactory(void);
 }
-#endif /* EXTENSIONS_COAPLOADER_H_ */
diff --git a/extensions/coap/controllerservice/CoapConnector.cpp b/extensions/coap/controllerservice/CoapConnector.cpp
index 066e5fb..d90be2a 100644
--- a/extensions/coap/controllerservice/CoapConnector.cpp
+++ b/extensions/coap/controllerservice/CoapConnector.cpp
@@ -18,13 +18,13 @@
 
 #include "CoapConnector.h"
 
-#include "core/logging/LoggerConfiguration.h"
-#include "core/controller/ControllerService.h"
 #include <string>
 #include <memory>
 #include <set>
+
+#include "core/logging/LoggerConfiguration.h"
+#include "core/controller/ControllerService.h"
 #include "core/Property.h"
-#include "CoapConnector.h"
 #include "io/validation.h"
 #include "properties/Configure.h"
 
diff --git a/extensions/coap/controllerservice/CoapConnector.h b/extensions/coap/controllerservice/CoapConnector.h
index c0e2a5e..1524ab0 100644
--- a/extensions/coap/controllerservice/CoapConnector.h
+++ b/extensions/coap/controllerservice/CoapConnector.h
@@ -15,8 +15,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_INCLUDE_CONTROLLERS_COAPCONNECTOR_H_
-#define LIBMINIFI_INCLUDE_CONTROLLERS_COAPCONNECTOR_H_
+#pragma once
+
+#include <memory>
+#include <string>
+#include <mutex>
+#include <atomic>
+#include <utility>
 
 #include "core/logging/LoggerConfiguration.h"
 #include "core/controller/ControllerService.h"
@@ -26,9 +31,6 @@
 #include "coap_functions.h"
 #include "coap_connection.h"
 #include "coap_message.h"
-#include <memory>
-#include <unordered_map>
-#include <utility>
 
 namespace org {
 namespace apache {
@@ -87,7 +89,6 @@ class CoapConnectorService : public core::controller::ControllerService {
   CoapResponse sendPayload(uint8_t type, const std::string &endpoint, const CoapMessage * message);
 
  protected:
-
   void initializeProperties();
 
   // connector mutex to controll access to the mapping, above.
@@ -99,7 +100,6 @@ class CoapConnectorService : public core::controller::ControllerService {
   std::atomic<bool> initialized_{ false };
 
  private:
-
   // host connecting to.
   std::string host_;
   // port connecting to
@@ -107,12 +107,9 @@ class CoapConnectorService : public core::controller::ControllerService {
 
   std::shared_ptr<logging::Logger> logger_{ logging::LoggerFactory<CoapConnectorService>::getLogger() };
 };
-
 } /* namespace controllers */
 } /* namespace coap */
 } /* namespace minifi */
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* LIBMINIFI_INCLUDE_CONTROLLERS_COAPCONNECTOR_H_ */
diff --git a/extensions/coap/controllerservice/CoapMessaging.h b/extensions/coap/controllerservice/CoapMessaging.h
index a3893b3..e75f41d 100644
--- a/extensions/coap/controllerservice/CoapMessaging.h
+++ b/extensions/coap/controllerservice/CoapMessaging.h
@@ -15,15 +15,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_COAP_CONTROLLERSERVICE_COAPMESSAGING_H_
-#define EXTENSIONS_COAP_CONTROLLERSERVICE_COAPMESSAGING_H_
+#pragma once
+
+#include <unordered_map>
+#include <mutex>
+#include <utility>
 
 #include "CoapResponse.h"
 #include "coap_functions.h"
 #include "coap_connection.h"
 #include "coap_message.h"
-#include <memory>
-#include <unordered_map>
 
 namespace org {
 namespace apache {
@@ -59,8 +60,8 @@ class CoapMessaging {
     }
     return response;
   }
- protected:
 
+ protected:
   /**
    * Intended to receive errors from the context.
    */
@@ -100,12 +101,9 @@ class CoapMessaging {
   // at any given time.
   std::unordered_map<coap_context_t*, CoapResponse> messages_;
 };
-
 } /* namespace controllers */
 } /* namespace coap */
 } /* namespace minifi */
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* EXTENSIONS_COAP_CONTROLLERSERVICE_COAPMESSAGING_H_ */
diff --git a/extensions/coap/controllerservice/CoapResponse.h b/extensions/coap/controllerservice/CoapResponse.h
index 47c592e..1923d9d 100644
--- a/extensions/coap/controllerservice/CoapResponse.h
+++ b/extensions/coap/controllerservice/CoapResponse.h
@@ -15,13 +15,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef LIBMINIFI_INCLUDE_CONTROLLERS_COAPRESPONSE_H_
-#define LIBMINIFI_INCLUDE_CONTROLLERS_COAPRESPONSE_H_
-
-#include "coap_message.h"
+#pragma once
 
 #include <memory>
 
+#include "coap_message.h"
+
 namespace org {
 namespace apache {
 namespace nifi {
@@ -34,7 +33,6 @@ namespace controllers {
  */
 class CoapResponse {
  public:
-
   /**
    * Creates a CoAPResponse to a CoAPMessage. Takes ownership of the argument
    * and copies the data.
@@ -96,6 +94,7 @@ class CoapResponse {
 
   CoapResponse &operator=(const CoapResponse &other) = delete;
   CoapResponse &operator=(CoapResponse &&other) = default;
+
  private:
   uint32_t code_;
   size_t size_;
@@ -108,5 +107,3 @@ class CoapResponse {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* LIBMINIFI_INCLUDE_CONTROLLERS_COAPRESPONSE_H_ */
diff --git a/extensions/coap/nanofi/coap_functions.h b/extensions/coap/nanofi/coap_functions.h
index 75a4785..8e3b2c1 100644
--- a/extensions/coap/nanofi/coap_functions.h
+++ b/extensions/coap/nanofi/coap_functions.h
@@ -29,8 +29,6 @@ typedef unsigned char method_t;
 #include "coap2/uri.h"
 #include "coap2/address.h"
 
-#include <stdio.h>
-#include <string.h>
 #ifdef WIN32
 #include <winsock2.h>
 #else
diff --git a/extensions/coap/nanofi/coap_message.h b/extensions/coap/nanofi/coap_message.h
index 4eb5eb9..65e0b80 100644
--- a/extensions/coap/nanofi/coap_message.h
+++ b/extensions/coap/nanofi/coap_message.h
@@ -15,8 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_COAP_NANOFI_COAP_MESSAGE_H
-#define EXTENSIONS_COAP_NANOFI_COAP_MESSAGE_H
+#pragma once
 
 
 #ifdef __cplusplus
@@ -51,5 +50,3 @@ void free_coap_message(CoapMessage *msg);
 #ifdef __cplusplus
 }
 #endif
-
-#endif /* EXTENSIONS_COAP_NANOFI_COAP_CONNECTION_H_ */
diff --git a/extensions/coap/nanofi/coap_server.h b/extensions/coap/nanofi/coap_server.h
index 8e1e7e4..cd49f8b 100644
--- a/extensions/coap/nanofi/coap_server.h
+++ b/extensions/coap/nanofi/coap_server.h
@@ -15,8 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_COAP_NANOFI_COAP_SERVER_H
-#define EXTENSIONS_COAP_NANOFI_COAP_SERVER_H
+#pragma once
 
 #ifdef __cplusplus
 extern "C" {
@@ -79,5 +78,3 @@ void free_server(CoapServerContext * const);
 #ifdef __cplusplus
 }
 #endif
-
-#endif /* EXTENSIONS_COAP_NANOFI_COAP_SERVER_H */
diff --git a/extensions/coap/protocols/CoapC2Protocol.cpp b/extensions/coap/protocols/CoapC2Protocol.cpp
index 1a2854d..d3343e0 100644
--- a/extensions/coap/protocols/CoapC2Protocol.cpp
+++ b/extensions/coap/protocols/CoapC2Protocol.cpp
@@ -237,7 +237,7 @@ minifi::c2::C2Payload CoapProtocol::serialize(const minifi::c2::C2Payload &paylo
     default:
       logger_->log_error("Could not identify operation");
       return minifi::c2::C2Payload(payload.getOperation(), state::UpdateState::READ_ERROR);
-  };
+  }
 
   size_t bsize = stream.size();
 
diff --git a/extensions/coap/protocols/CoapC2Protocol.h b/extensions/coap/protocols/CoapC2Protocol.h
index 6fad389..03ce24b 100644
--- a/extensions/coap/protocols/CoapC2Protocol.h
+++ b/extensions/coap/protocols/CoapC2Protocol.h
@@ -15,9 +15,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_COAPPROTOCOL_H_
-#define EXTENSIONS_COAPPROTOCOL_H_
+#pragma once
 
+#include <cstring>
 #include <algorithm>
 #include <iostream>
 #include <memory>
@@ -25,6 +25,8 @@
 #include <map>
 #include <string>
 #include <vector>
+#include <stdexcept>
+#include <mutex>
 
 #include "c2/C2Protocol.h"
 #include "io/BaseStream.h"
@@ -34,8 +36,6 @@
 #include "coap2/coap.h"
 #include "coap2/uri.h"
 #include "coap2/address.h"
-#include <stdio.h>
-#include <string.h>
 #include "protocols/RESTSender.h"
 
 #undef RAPIDJSON_ASSERT
@@ -89,7 +89,6 @@ class CoapProtocol : public minifi::c2::RESTSender {
   // Supported Properties
 
  protected:
-
   bool isRegistrationMessage(controllers::CoapResponse &response) {
     if (LIKELY(response.getSize() != 8)) {
       return false;
@@ -131,7 +130,6 @@ class CoapProtocol : public minifi::c2::RESTSender {
   std::string controller_service_name_;
 
  private:
-
   static uint8_t REGISTRATION_MSG[8];
 
   std::shared_ptr<logging::Logger> logger_;
@@ -142,4 +140,3 @@ class CoapProtocol : public minifi::c2::RESTSender {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-#endif /* EXTENSIONS_COAPPROTOCOL_H_ */
diff --git a/extensions/coap/server/CoapServer.cpp b/extensions/coap/server/CoapServer.cpp
index df43b86..8b77190 100644
--- a/extensions/coap/server/CoapServer.cpp
+++ b/extensions/coap/server/CoapServer.cpp
@@ -17,6 +17,8 @@
  */
 #include "CoapServer.h"
 #include <coap2/coap.h>
+#include <map>
+#include <functional>
 
 namespace org {
 namespace apache {
diff --git a/extensions/coap/server/CoapServer.h b/extensions/coap/server/CoapServer.h
index 223c7b9..24be636 100644
--- a/extensions/coap/server/CoapServer.h
+++ b/extensions/coap/server/CoapServer.h
@@ -16,16 +16,21 @@
  * limitations under the License.
  */
 
-#ifndef EXTENSIONS_COAP_SERVER_COAPSERVER_H_
-#define EXTENSIONS_COAP_SERVER_COAPSERVER_H_
+#pragma once
 
-#include "core/Connectable.h"
-#include "coap_server.h"
-#include "coap_message.h"
 #include <coap2/coap.h>
 #include <functional>
 #include <thread>
 #include <future>
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+#include <atomic>
+
+#include "core/Connectable.h"
+#include "coap_server.h"
+#include "coap_message.h"
 
 namespace org {
 namespace apache {
@@ -84,6 +89,7 @@ class CoapResponse {
   CoapResponse(const CoapResponse &qry) = delete;
   CoapResponse(CoapResponse &&qry) = default;
   CoapResponse &operator=(CoapResponse &&qry) = default;
+
  private:
   int code_;
   std::unique_ptr<uint8_t[]> data_;
@@ -101,7 +107,7 @@ class CoapServer : public core::Connectable {
       : core::Connectable(name, uuid),
         server_(nullptr),
         port_(0) {
-    // TODO: this allows this class to be instantiated via the the class loader
+    // TODO(_): this allows this class to be instantiated via the the class loader
     // need to define this capability in the future.
   }
   CoapServer(const std::string &hostname, uint16_t port)
@@ -203,8 +209,12 @@ class CoapServer : public core::Connectable {
   }
 
  protected:
-
-  static void handle_response_with_passthrough(coap_context_t* /*ctx*/, struct coap_resource_t *resource, coap_session_t *session, coap_pdu_t *request, coap_binary_t* /*token*/, coap_string_t* /*query*/,
+  static void handle_response_with_passthrough(coap_context_t* /*ctx*/,
+                                               struct coap_resource_t *resource,
+                                               coap_session_t *session,
+                                               coap_pdu_t *request,
+                                               coap_binary_t* /*token*/,
+                                               coap_string_t* /*query*/,
                                                coap_pdu_t *response) {
     auto fx = functions_.find(resource);
     if (fx != functions_.end()) {
@@ -234,5 +244,3 @@ class CoapServer : public core::Connectable {
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif /* EXTENSIONS_COAP_SERVER_COAPSERVER_H_ */
diff --git a/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp b/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
index 25c86ce..8c39329 100644
--- a/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
+++ b/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
@@ -153,10 +153,8 @@ class VerifyCoAPServer : public CoapIntegrationBase {
         responses.try_dequeue(resp);
         return resp;
       }
-      else {
-        minifi::coap::CoapResponse response(500, 0, 0);
-        return response;
-      }
+      minifi::coap::CoapResponse response(500, 0, 0);
+      return response;
     });
     server->start();
     configuration->set("c2.enable", "true");
diff --git a/extensions/coap/tests/CoapIntegrationBase.h b/extensions/coap/tests/CoapIntegrationBase.h
index 87ab800..4c9ee67 100644
--- a/extensions/coap/tests/CoapIntegrationBase.h
+++ b/extensions/coap/tests/CoapIntegrationBase.h
@@ -15,8 +15,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef EXTENSIONS_COAP_TESTS_COAPINTEGRATIONBASE_H
-#define EXTENSIONS_COAP_TESTS_COAPINTEGRATIONBASE_H
+#pragma once
+
+#include <utility>
+#include <memory>
+#include <string>
 
 #include "../tests/TestServer.h"
 #include "CivetServer.h"
@@ -33,7 +36,7 @@ int ssl_enable(void *, void *) {
 
 class CoapIntegrationBase : public IntegrationBase {
  public:
-  CoapIntegrationBase(uint64_t waitTime = 5000)
+  explicit CoapIntegrationBase(uint64_t waitTime = 5000)
       : IntegrationBase(waitTime),
         server(nullptr) {
   }
@@ -109,5 +112,3 @@ void CoapIntegrationBase::setUrl(std::string url, CivetHandler *handler) {
     }
   }
 }
-
-#endif  // EXTENSIONS_COAP_TESTS_COAPINTEGRATIONBASE_H
diff --git a/extensions/windows-event-log/Bookmark.cpp b/extensions/windows-event-log/Bookmark.cpp
index 8b72e65..7896c1b 100644
--- a/extensions/windows-event-log/Bookmark.cpp
+++ b/extensions/windows-event-log/Bookmark.cpp
@@ -19,6 +19,9 @@
 #include "Bookmark.h"
 
 #include <direct.h>
+#include <vector>
+#include <unordered_map>
+#include <fstream>
 
 #include "wel/UnicodeConversion.h"
 #include "utils/file/FileUtils.h"
@@ -30,9 +33,15 @@ namespace minifi {
 namespace processors {
 static const std::string BOOKMARK_KEY = "bookmark";
 
-Bookmark::Bookmark(const std::wstring& channel, const std::wstring& query, const std::string& bookmarkRootDir, const utils::Identifier& uuid, bool processOldEvents, std::shared_ptr<core::CoreComponentStateManager> state_manager, std::shared_ptr<logging::Logger> logger)
-  : logger_(logger)
-  , state_manager_(state_manager) {
+Bookmark::Bookmark(const std::wstring& channel,
+    const std::wstring& query,
+    const std::string& bookmarkRootDir,
+    const utils::Identifier& uuid,
+    bool processOldEvents,
+    std::shared_ptr<core::CoreComponentStateManager> state_manager,
+    std::shared_ptr<logging::Logger> logger)
+    : logger_(logger),
+      state_manager_(state_manager) {
   std::unordered_map<std::string, std::string> state_map;
   if (state_manager_->get(state_map) && state_map.count(BOOKMARK_KEY) == 1U) {
     bookmarkXml_ = wel::to_wstring(state_map[BOOKMARK_KEY].c_str());
@@ -171,7 +180,7 @@ bool Bookmark::getBookmarkXmlFromFile(std::wstring& bookmarkXml) {
     return false;
   }
 
-  // Generically is not efficient, but bookmarkXML is small ~100 bytes. 
+  // Generally is not efficient, but bookmarkXML is small ~100 bytes.
   wchar_t c;
   do {
     file.read(&c, 1);
diff --git a/extensions/windows-event-log/Bookmark.h b/extensions/windows-event-log/Bookmark.h
index d2e7742..8def098 100644
--- a/extensions/windows-event-log/Bookmark.h
+++ b/extensions/windows-event-log/Bookmark.h
@@ -18,10 +18,10 @@
 
 #pragma once
 
-#include <string>
-#include <memory>
 #include <windows.h>
 #include <winevt.h>
+#include <string>
+#include <memory>
 #include <type_traits>
 
 #include "core/ProcessContext.h"
@@ -37,8 +37,14 @@ namespace processors {
 #define LOG_LAST_ERROR(func) logger_->log_error("!"#func" error %x", GetLastError())
 
 class Bookmark {
-public:
-  Bookmark(const std::wstring& channel, const std::wstring& query, const std::string& bookmarkRootDir, const utils::Identifier& uuid, bool processOldEvents, std::shared_ptr<core::CoreComponentStateManager> state_manager, std::shared_ptr<logging::Logger> logger);
+ public:
+  Bookmark(const std::wstring& channel,
+      const std::wstring& query,
+      const std::string& bookmarkRootDir,
+      const utils::Identifier& uuid,
+      bool processOldEvents,
+      std::shared_ptr<core::CoreComponentStateManager> state_manager,
+      std::shared_ptr<logging::Logger> logger);
   ~Bookmark();
   explicit operator bool() const noexcept;
 
@@ -46,7 +52,7 @@ public:
   bool getNewBookmarkXml(EVT_HANDLE hEvent, std::wstring& bookmarkXml);
   bool saveBookmarkXml(const std::wstring& bookmarkXml);
 
-private:
+ private:
   bool saveBookmark(EVT_HANDLE hEvent);
   bool getBookmarkXmlFromFile(std::wstring& bookmarkXml);
 
diff --git a/extensions/windows-event-log/CMakeLists.txt b/extensions/windows-event-log/CMakeLists.txt
index c205245..7aaf512 100644
--- a/extensions/windows-event-log/CMakeLists.txt
+++ b/extensions/windows-event-log/CMakeLists.txt
@@ -30,3 +30,4 @@ target_link_libraries(minifi-wel PUGI::libpugixml ZLIB::ZLIB Wevtapi.lib)
 SET(WEL-EXTENSION minifi-wel PARENT_SCOPE)
 
 register_extension(minifi-wel)
+register_extension_linter(minifi-wel-extension-linter)
diff --git a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
index a57aa87..b1d7201 100644
--- a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
+++ b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
@@ -24,11 +24,10 @@
 #include <map>
 #include <set>
 #include <sstream>
-#include <stdio.h>
 #include <string>
-#include <iostream>
 #include <memory>
 #include <codecvt>
+#include <utility>
 
 #include "io/BufferStream.h"
 #include "core/ProcessContext.h"
@@ -64,8 +63,7 @@ CollectorInitiatedSubscription::CollectorInitiatedSubscription(const std::string
   DWORD size = sizeof(buff);
   if (GetComputerName(buff, &size)) {
     computerName_ = buff;
-  }
-  else {
+  } else {
     LOG_SUBSCRIPTION_WINDOWS_ERROR("GetComputerName");
   }
 
@@ -226,8 +224,7 @@ void CollectorInitiatedSubscription::onTrigger(const std::shared_ptr<core::Proce
 
   if (flowFileCount > 0) {
     lastActivityTimestamp_ = now;
-  }
-  else if (inactiveDurationToReconnect_.value() > 0) {
+  } else if (inactiveDurationToReconnect_.value() > 0) {
     if ((now - lastActivityTimestamp_) > inactiveDurationToReconnect_.value()) {
       logger_->log_info("Exceeds configured 'inactive duration to reconnect' %lld ms. Unsubscribe to reconnect..", inactiveDurationToReconnect_.value());
       unsubscribe();
@@ -285,8 +282,7 @@ bool CollectorInitiatedSubscription::checkSubscriptionRuntimeStatus() {
           LOG_SUBSCRIPTION_WINDOWS_ERROR("EcGetObjectArrayProperty");
           return false;
         }
-      }
-      else {
+      } else {
         LOG_SUBSCRIPTION_WINDOWS_ERROR("EcGetObjectArrayProperty");
         return false;
       }
@@ -302,8 +298,8 @@ bool CollectorInitiatedSubscription::checkSubscriptionRuntimeStatus() {
     buffer.resize(sizeof(EC_VARIANT));
     DWORD dwBufferSize{};
     if (!EcGetSubscriptionRunTimeStatus(
-          subscriptionName_.value().c_str(), 
-          statusInfoID, 
+          subscriptionName_.value().c_str(),
+          statusInfoID,
           eventSource.c_str(),
           flags,
           static_cast<DWORD>(buffer.size()),
@@ -516,7 +512,7 @@ bool CollectorInitiatedSubscription::createSubscription(const std::shared_ptr<co
   if (!getSubscriptionProperty(hSubscription, EcSubscriptionEventSources, 0, buffer, vProperty))
     return false;
 
-  // Event Sources is a collection. Ensure that we have obtained handle to the Array Property. 
+  // Event Sources is a collection. Ensure that we have obtained handle to the Array Property.
   if (vProperty->Type != EcVarTypeNull && vProperty->Type != EcVarObjectArrayPropertyHandle) {
     logInvalidSubscriptionPropertyType(__LINE__, vProperty->Type);
     return false;
@@ -628,13 +624,13 @@ void CollectorInitiatedSubscription::unsubscribe() {
 
 int CollectorInitiatedSubscription::processQueue(const std::shared_ptr<core::ProcessSession> &session) {
   struct WriteCallback: public OutputStreamCallback {
-    WriteCallback(const std::string& str)
+    explicit WriteCallback(const std::string& str)
       : str_(str) {
       status_ = 0;
     }
 
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) {
-      return stream->write((uint8_t*)&str_[0], gsl::narrow<int>(str_.size()));
+      return stream->write(reinterpret_cast<uint8_t*>(&str_[0]), gsl::narrow<int>(str_.size()));
     }
 
     std::string str_;
@@ -699,10 +695,10 @@ void CollectorInitiatedSubscription::logWindowsError(int line, const std::string
     error,
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
     (LPTSTR)&lpMsg,
-    0, 
+    0,
     NULL);
 
-  logger_->log_error("Line %d: '%s': error %d: %s\n", line, info.c_str(), (int)error, (char *)lpMsg);
+  logger_->log_error("Line %d: '%s': error %d: %s\n", line, info.c_str(), static_cast<int>(error), reinterpret_cast<char *>(lpMsg));
 
   LocalFree(lpMsg);
 }
diff --git a/extensions/windows-event-log/CollectorInitiatedSubscription.h b/extensions/windows-event-log/CollectorInitiatedSubscription.h
index 1cdc18f..e9b6671 100644
--- a/extensions/windows-event-log/CollectorInitiatedSubscription.h
+++ b/extensions/windows-event-log/CollectorInitiatedSubscription.h
@@ -20,6 +20,14 @@
 
 #pragma once
 
+#include <Windows.h>
+#include <winevt.h>
+#include <EvColl.h>
+
+#include <vector>
+#include <string>
+#include <memory>
+
 #include "core/Core.h"
 #include "FlowFileRecord.h"
 #include "concurrentqueue.h"
@@ -27,8 +35,6 @@
 #include "core/ProcessSession.h"
 #include "SupportedProperty.h"
 
-#include <winevt.h>
-#include <EvColl.h>
 
 namespace org {
 namespace apache {
@@ -38,12 +44,12 @@ namespace processors {
 
 //! CollectorInitiatedSubscription Class
 class CollectorInitiatedSubscription : public core::Processor {
-public:
+ public:
   //! Constructor
   /*!
   * Create a new processor
   */
-  CollectorInitiatedSubscription(const std::string& name, const utils::Identifier& uuid = {});
+  explicit CollectorInitiatedSubscription(const std::string& name, const utils::Identifier& uuid = {});
 
   //! Destructor
   virtual ~CollectorInitiatedSubscription() = default;
@@ -51,7 +57,7 @@ public:
   //! Processor Name
   static const std::string ProcessorName;
 
-public:
+ public:
   /**
   * Function that's executed when the processor is scheduled.
   * @param context process context.
@@ -65,7 +71,7 @@ public:
   void initialize(void) override;
   void notifyStop() override;
 
-protected:
+ protected:
   bool createSubscription(const std::shared_ptr<core::ProcessContext> &context);
   bool subscribe(const std::shared_ptr<core::ProcessContext> &context);
   void unsubscribe();
@@ -75,7 +81,8 @@ protected:
   void logInvalidSubscriptionPropertyType(int line, DWORD type);
   bool getSubscriptionProperty(EC_HANDLE hSubscription, EC_SUBSCRIPTION_PROPERTY_ID propID, DWORD flags, std::vector<BYTE>& buffer, PEC_VARIANT& vProperty);
   bool checkSubscriptionRuntimeStatus();
-private:
+
+ private:
   // Logger
   std::shared_ptr<logging::Logger> logger_;
   moodycamel::ConcurrentQueue<std::string> renderedXMLs_;
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
index eeeeb40..3746826 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
@@ -19,12 +19,14 @@
  */
 
 #include "ConsumeWindowsEventLog.h"
+#include <stdio.h>
 #include <vector>
+#include <tuple>
+#include <utility>
 #include <queue>
 #include <map>
 #include <set>
 #include <sstream>
-#include <stdio.h>
 #include <string>
 #include <iostream>
 #include <memory>
@@ -127,8 +129,10 @@ core::Property ConsumeWindowsEventLog::EventHeaderDelimiter(
 core::Property ConsumeWindowsEventLog::EventHeader(
   core::PropertyBuilder::createProperty("Event Header")->
   isRequired(false)->
-  withDefaultValue("LOG_NAME=Log Name, SOURCE = Source, TIME_CREATED = Date,EVENT_RECORDID=Record ID,EVENTID = Event ID,TASK_CATEGORY = Task Category,LEVEL = Level,KEYWORDS = Keywords,USER = User,COMPUTER = Computer, EVENT_TYPE = EventType")->
-  withDescription("Comma seperated list of key/value pairs with the following keys LOG_NAME, SOURCE, TIME_CREATED,EVENT_RECORDID,EVENTID,TASK_CATEGORY,LEVEL,KEYWORDS,USER,COMPUTER, and EVENT_TYPE. Eliminating fields will remove them from the header.")->
+  withDefaultValue("LOG_NAME=Log Name, SOURCE = Source, TIME_CREATED = Date,EVENT_RECORDID=Record ID,EVENTID = Event ID,"
+      "TASK_CATEGORY = Task Category,LEVEL = Level,KEYWORDS = Keywords,USER = User,COMPUTER = Computer, EVENT_TYPE = EventType")->
+  withDescription("Comma seperated list of key/value pairs with the following keys LOG_NAME, SOURCE, TIME_CREATED,EVENT_RECORDID,"
+      "EVENTID,TASK_CATEGORY,LEVEL,KEYWORDS,USER,COMPUTER, and EVENT_TYPE. Eliminating fields will remove them from the header.")->
   build());
 
 core::Property ConsumeWindowsEventLog::OutputFormat(
@@ -491,15 +495,12 @@ void ConsumeWindowsEventLog::substituteXMLPercentageItems(pugi::xml_document& do
         const auto it = xmlPercentageItemsResolutions_.find(key);
         if (it == xmlPercentageItemsResolutions_.end()) {
           LPTSTR pBuffer{};
-          if (FormatMessage(
-            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,
-            hMsobjsDll_,
-            number,
-            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-            (LPTSTR)&pBuffer,
-            1024,
-            0
-          )) {
+          if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,
+                            hMsobjsDll_,
+                            number,
+                            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                            (LPTSTR)&pBuffer,
+                            1024, 0)) {
             value = pBuffer;
             LocalFree(pBuffer);
 
@@ -656,7 +657,7 @@ void ConsumeWindowsEventLog::refreshTimeZoneData() {
   DYNAMIC_TIME_ZONE_INFORMATION tzinfo;
   auto ret = GetDynamicTimeZoneInformation(&tzinfo);
   std::wstring tzstr;
-  long tzbias = 0;
+  long tzbias = 0;  // NOLINT long comes from WINDOWS API
   bool dst = false;
   switch (ret) {
     case TIME_ZONE_ID_INVALID:
@@ -689,8 +690,8 @@ void ConsumeWindowsEventLog::refreshTimeZoneData() {
 
 void ConsumeWindowsEventLog::putEventRenderFlowFileToSession(const EventRender& eventRender, core::ProcessSession& session) const {
   struct WriteCallback : public OutputStreamCallback {
-    WriteCallback(const std::string& str)
-      : str_(str) {
+    explicit WriteCallback(const std::string& str)
+        : str_(str) {
     }
 
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) {
@@ -755,7 +756,7 @@ void ConsumeWindowsEventLog::LogWindowsError(std::string error) const {
     (LPTSTR)&lpMsg,
     0, NULL);
 
-  logger_->log_error((error + " %x: %s\n").c_str(), (int)error_id, (char *)lpMsg);
+  logger_->log_error((error + " %x: %s\n").c_str(), static_cast<int>(error_id), reinterpret_cast<char *>(lpMsg));
 
   LocalFree(lpMsg);
 }
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.h b/extensions/windows-event-log/ConsumeWindowsEventLog.h
index f6f4835..e40a8f4 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.h
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.h
@@ -20,21 +20,28 @@
 
 #pragma once
 
-#include "core/Core.h"
-#include "wel/WindowsEventLog.h"
-#include "FlowFileRecord.h"
-#include "concurrentqueue.h"
-#include "core/Processor.h"
-#include "core/ProcessSession.h"
-#include "pugixml.hpp"
+#include <Windows.h>
 #include <winevt.h>
+#include <Objbase.h>
+
 #include <sstream>
 #include <regex>
 #include <codecvt>
-#include "utils/OsUtils.h"
-#include <Objbase.h>
 #include <mutex>
 #include <unordered_map>
+#include <tuple>
+#include <map>
+#include <memory>
+#include <string>
+
+#include "core/Core.h"
+#include "core/Processor.h"
+#include "core/ProcessSession.h"
+#include "utils/OsUtils.h"
+#include "wel/WindowsEventLog.h"
+#include "FlowFileRecord.h"
+#include "concurrentqueue.h"
+#include "pugixml.hpp"
 
 namespace org {
 namespace apache {
@@ -53,12 +60,12 @@ class Bookmark;
 
 //! ConsumeWindowsEventLog Class
 class ConsumeWindowsEventLog : public core::Processor {
-public:
+ public:
   //! Constructor
   /*!
   * Create a new processor
   */
-  ConsumeWindowsEventLog(const std::string& name, const utils::Identifier& uuid = {});
+  explicit ConsumeWindowsEventLog(const std::string& name, const utils::Identifier& uuid = {});
 
   //! Destructor
   virtual ~ConsumeWindowsEventLog();
@@ -86,7 +93,7 @@ public:
   //! Supported Relationships
   static core::Relationship Success;
 
-public:
+ public:
   /**
   * Function that's executed when the processor is scheduled.
   * @param context process context.
@@ -100,7 +107,7 @@ public:
   void initialize(void) override;
   void notifyStop() override;
 
-protected:
+ protected:
   void refreshTimeZoneData();
   void putEventRenderFlowFileToSession(const EventRender& eventRender, core::ProcessSession& session) const;
   wel::WindowsEventLogHandler getEventLogHandler(const std::string & name);
@@ -117,7 +124,7 @@ protected:
   static constexpr const char* JSONSimple = "Simple";
   static constexpr const char* JSONFlattened = "Flattened";
 
-private:
+ private:
   struct TimeDiff {
     auto operator()() const {
       return int64_t{ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - time_).count() };
diff --git a/extensions/windows-event-log/SupportedProperty.h b/extensions/windows-event-log/SupportedProperty.h
index 7dd140f..3ab912e 100644
--- a/extensions/windows-event-log/SupportedProperty.h
+++ b/extensions/windows-event-log/SupportedProperty.h
@@ -21,6 +21,8 @@
  */
 
 #include <vector>
+#include <memory>
+#include <string>
 #include <set>
 #include <codecvt>
 
@@ -40,7 +42,7 @@ class SupportedProperties {
   std::vector<ISupportedProperty*> listISupportedProperty_;
   std::vector<core::Property*> listProperties_;
 
-public:
+ public:
   void init(const std::shared_ptr<core::ProcessContext>& context) {
     for (auto pProp : listISupportedProperty_) {
       pProp->Init(context);
@@ -62,7 +64,7 @@ public:
     add(arg, args...);
   }
 
-private:
+ private:
   template <typename Arg>
   void add(Arg& arg) {
     listISupportedProperty_.emplace_back(&arg);
@@ -80,9 +82,9 @@ template <typename T>
 class SupportedProperty : public ISupportedProperty, public core::Property {
   T t_;
 
-public:
+ public:
   template <typename ...Args>
-  SupportedProperty(const Args& ...args): core::Property(args...) {
+  explicit SupportedProperty(const Args& ...args): core::Property(args...) {
   }
 
   void Init(const std::shared_ptr<core::ProcessContext>& context) override {
@@ -99,7 +101,7 @@ void SupportedProperty<std::wstring>::Init(const std::shared_ptr<core::ProcessCo
   context->getProperty(getName(), val);
 
   t_ = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(val);
-};
+}
 
 } /* namespace processors */
 } /* namespace minifi */
diff --git a/extensions/windows-event-log/TailEventLog.cpp b/extensions/windows-event-log/TailEventLog.cpp
index 3e05208..db93cba 100644
--- a/extensions/windows-event-log/TailEventLog.cpp
+++ b/extensions/windows-event-log/TailEventLog.cpp
@@ -19,14 +19,12 @@
  */
 
 #include "TailEventLog.h"
+
 #include <vector>
-#include <queue>
 #include <map>
 #include <set>
-#include <sstream>
-#include <stdio.h>
 #include <string>
-#include <iostream>
+#include <memory>
 
 #include "io/BufferStream.h"
 #include "core/ProcessContext.h"
@@ -77,14 +75,14 @@ void TailEventLog::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
 
   BYTE buffer[MAX_RECORD_BUFFER_SIZE];
 
-  EVENTLOGRECORD *event_record = (EVENTLOGRECORD*)&buffer;
+  EVENTLOGRECORD *event_record = reinterpret_cast<EVENTLOGRECORD*>(&buffer);
 
   DWORD bytes_to_read = 0, min_bytes = 0;
-  
+
   GetOldestEventLogRecord(log_handle_, &current_record_);
   GetNumberOfEventLogRecords(log_handle_, &num_records_);
   current_record_ = num_records_-max_events_;
-  
+
   logger_->log_trace("%d and %d", current_record_, num_records_);
 
   if (ReadEventLog(log_handle_, EVENTLOG_FORWARDS_READ | EVENTLOG_SEEK_READ, current_record_, event_record, MAX_RECORD_BUFFER_SIZE, &bytes_to_read, &min_bytes)) {
@@ -107,23 +105,21 @@ void TailEventLog::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
       flowFile->addAttribute("source", source);
       flowFile->addAttribute("record_number", std::to_string(event_record->RecordNumber));
       flowFile->addAttribute("computer_name", computer_name);
-      
+
       flowFile->addAttribute("event_time", getTimeStamp(event_record->TimeGenerated));
       flowFile->addAttribute("event_type", typeToString(event_record->EventType));
-      
+
       io::BufferStream stream((const uint8_t*)(event_record + event_record->DataOffset), event_record->DataLength);
       // need an import from the data stream.
       session->importFrom(stream, flowFile);
       session->transfer(flowFile, Success);
       bytes_to_read -= event_record->Length;
-      event_record = (EVENTLOGRECORD *)
-        ((LPBYTE)event_record + event_record->Length);
+      event_record = reinterpret_cast<EVENTLOGRECORD *>((LPBYTE)event_record + event_record->Length);
     }
 
-    event_record = (EVENTLOGRECORD *)&buffer;
+    event_record = reinterpret_cast<EVENTLOGRECORD*>(&buffer);
     logger_->log_trace("All done no more");
-  }
-  else {
+  } else {
     LogWindowsError();
     logger_->log_trace("Yielding due to error");
     context->yield();
diff --git a/extensions/windows-event-log/TailEventLog.h b/extensions/windows-event-log/TailEventLog.h
index e1421e8..5d8dfa5 100644
--- a/extensions/windows-event-log/TailEventLog.h
+++ b/extensions/windows-event-log/TailEventLog.h
@@ -17,8 +17,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef TAIL_EVENT_LOG_H_
-#define TAIL_EVENT_LOG_H_
+#pragma once
+
+#include <memory>
+#include <string>
 
 #include "core/Core.h"
 #include "FlowFileRecord.h"
@@ -36,8 +38,8 @@ const LPCWSTR pEventTypeNames[] = { L"Error", L"Warning", L"Informational", L"Au
 const char log_name[255] = "Application";
 
 class TailEventLog : public core::Processor {
-public:
-  TailEventLog(const std::string& name, const utils::Identifier& uuid = {})
+ public:
+  explicit TailEventLog(const std::string& name, const utils::Identifier& uuid = {})
   : core::Processor(name, uuid), logger_(logging::LoggerFactory<TailEventLog>::getLogger()), max_events_(1) {
   }
   virtual ~TailEventLog() = default;
@@ -50,7 +52,7 @@ public:
   // Supported Relationships
   static core::Relationship Success;
 
-public:
+ public:
   /**
    * Function that's executed when the processor is scheduled.
    * @param context process context.
@@ -63,8 +65,7 @@ public:
   // Initialize, over write by NiFi TailEventLog
   void initialize(void) override;
 
-protected:
-
+ protected:
   void notifyStop() override {
     CloseEventLog(log_handle_);
   }
@@ -120,10 +121,12 @@ protected:
       (LPTSTR)&lpMsg,
       0, NULL);
 
-    logger_->log_debug("Error %d: %s\n", (int)error_id, (char *)lpMsg);
+    logger_->log_debug("Error %d: %s\n", static_cast<int>(error_id), reinterpret_cast<char *>(lpMsg));
+
+    LocalFree(lpMsg);
   }
 
-private:
+ private:
   std::mutex log_mutex_;
   std::string log_source_;
   uint32_t max_events_;
@@ -141,5 +144,3 @@ REGISTER_RESOURCE(TailEventLog, "Windows event log reader that functions as a st
 } /* namespace nifi */
 } /* namespace apache */
 } /* namespace org */
-
-#endif
diff --git a/extensions/windows-event-log/tests/CWELCustomProviderTests.cpp b/extensions/windows-event-log/tests/CWELCustomProviderTests.cpp
index 5fb73a0..6898e0a 100644
--- a/extensions/windows-event-log/tests/CWELCustomProviderTests.cpp
+++ b/extensions/windows-event-log/tests/CWELCustomProviderTests.cpp
@@ -58,8 +58,7 @@ bool dispatchCustomEvent(const CustomEventData& event) {
     event.second.c_str(),
     event.third.c_str(),
     event.binary_length,
-    event.binary_data
-  );
+    event.binary_data);
   return result == ERROR_SUCCESS;
 }
 
diff --git a/extensions/windows-event-log/tests/CWELTestUtils.h b/extensions/windows-event-log/tests/CWELTestUtils.h
index fdccd5c..46988ca 100644
--- a/extensions/windows-event-log/tests/CWELTestUtils.h
+++ b/extensions/windows-event-log/tests/CWELTestUtils.h
@@ -17,6 +17,12 @@
 
 #pragma once
 
+#include <utility>
+#include <memory>
+#include <string>
+#include <fstream>
+#include <iterator>
+
 #include "ConsumeWindowsEventLog.h"
 #include "processors/PutFile.h"
 #include "TestBase.h"
diff --git a/extensions/windows-event-log/tests/MetadataWalkerTests.cpp b/extensions/windows-event-log/tests/MetadataWalkerTests.cpp
index 29e5efa..3008a57 100644
--- a/extensions/windows-event-log/tests/MetadataWalkerTests.cpp
+++ b/extensions/windows-event-log/tests/MetadataWalkerTests.cpp
@@ -55,13 +55,13 @@ std::string readFile(const std::string &file_name) {
 }
 
 const std::string METADATA_WALKER_TESTS_LOG_NAME = "MetadataWalkerTests";
-const short event_type_index = 178;
+const short event_type_index = 178;  // NOLINT short comes from WINDOWS API
 
 class FakeWindowsEventLogMetadata : public WindowsEventLogMetadata {
  public:
   std::string getEventData(EVT_FORMAT_MESSAGE_FLAGS flags) const override { return "event_data_for_flag_" + std::to_string(flags); }
   std::string getEventTimestamp() const override { return "event_timestamp"; }
-  short getEventTypeIndex() const override { return event_type_index; }
+  short getEventTypeIndex() const override { return event_type_index; }  // NOLINT short comes from WINDOWS API
 };
 
 }  // namespace
@@ -152,12 +152,12 @@ TEST_CASE("MetadataWalker extracts mappings correctly when there is a single Sid
 
   const std::map<std::string, std::string> expected_identifiers{{"S-1-0-0", "S-1-0-0"}};
 
-  using namespace org::apache::nifi::minifi::wel;
+  using org::apache::nifi::minifi::wel::METADATA;
   const std::map<METADATA, std::string> expected_metadata{
-      {SOURCE, "Microsoft-Windows-Security-Auditing"},
-      {TIME_CREATED, "event_timestamp"},
-      {EVENTID, "4672"},
-      {EVENT_RECORDID, "2575952"}};
+      {METADATA::SOURCE, "Microsoft-Windows-Security-Auditing"},
+      {METADATA::TIME_CREATED, "event_timestamp"},
+      {METADATA::EVENTID, "4672"},
+      {METADATA::EVENT_RECORDID, "2575952"}};
 
   const std::map<std::string, std::string> expected_field_values{};
 
@@ -175,18 +175,18 @@ TEST_CASE("MetadataWalker extracts mappings correctly when there is a single Sid
 
   const std::map<std::string, std::string> expected_identifiers{{"S-1-0-0", "Nobody"}};
 
-  using namespace org::apache::nifi::minifi::wel;
+  using org::apache::nifi::minifi::wel::METADATA;
   const std::map<METADATA, std::string> expected_metadata{
-      {LOG_NAME, "MetadataWalkerTests"},
-      {SOURCE, "Microsoft-Windows-Security-Auditing"},
-      {TIME_CREATED, "event_timestamp"},
-      {EVENTID, "4672"},
-      {OPCODE, "event_data_for_flag_4"},
-      {EVENT_RECORDID, "2575952"},
-      {EVENT_TYPE, "178"},
-      {TASK_CATEGORY, "event_data_for_flag_3"},
-      {LEVEL, "event_data_for_flag_2"},
-      {KEYWORDS, "event_data_for_flag_5"}};
+      {METADATA::LOG_NAME, "MetadataWalkerTests"},
+      {METADATA::SOURCE, "Microsoft-Windows-Security-Auditing"},
+      {METADATA::TIME_CREATED, "event_timestamp"},
+      {METADATA::EVENTID, "4672"},
+      {METADATA::OPCODE, "event_data_for_flag_4"},
+      {METADATA::EVENT_RECORDID, "2575952"},
+      {METADATA::EVENT_TYPE, "178"},
+      {METADATA::TASK_CATEGORY, "event_data_for_flag_3"},
+      {METADATA::LEVEL, "event_data_for_flag_2"},
+      {METADATA::KEYWORDS, "event_data_for_flag_5"}};
 
   SECTION("update_xml is false => fields are collected into walker.getFieldValues()") {
     const std::map<std::string, std::string> expected_field_values{
@@ -212,12 +212,12 @@ TEST_CASE("MetadataWalker extracts mappings correctly when there are multiple Si
 
   const std::map<std::string, std::string> expected_identifiers{{"S-1-0-0", "S-1-0-0"}};
 
-  using namespace org::apache::nifi::minifi::wel;
+  using org::apache::nifi::minifi::wel::METADATA;
   const std::map<METADATA, std::string> expected_metadata{
-      {SOURCE, "Microsoft-Windows-Security-Auditing"},
-      {TIME_CREATED, "event_timestamp"},
-      {EVENTID, "4672"},
-      {EVENT_RECORDID, "2575952"}};
+      {METADATA::SOURCE, "Microsoft-Windows-Security-Auditing"},
+      {METADATA::TIME_CREATED, "event_timestamp"},
+      {METADATA::EVENTID, "4672"},
+      {METADATA::EVENT_RECORDID, "2575952"}};
 
   const std::map<std::string, std::string> expected_field_values{};
 
@@ -241,18 +241,18 @@ TEST_CASE("MetadataWalker extracts mappings correctly when there are multiple Si
       {"S-1-0-0", "Nobody"},
       {"S-1-1-0", "Everyone"}};
 
-  using namespace org::apache::nifi::minifi::wel;
+  using org::apache::nifi::minifi::wel::METADATA;
   const std::map<METADATA, std::string> expected_metadata{
-      {LOG_NAME, "MetadataWalkerTests"},
-      {SOURCE, "Microsoft-Windows-Security-Auditing"},
-      {TIME_CREATED, "event_timestamp"},
-      {EVENTID, "4672"},
-      {OPCODE, "event_data_for_flag_4"},
-      {EVENT_RECORDID, "2575952"},
-      {EVENT_TYPE, "178"},
-      {TASK_CATEGORY, "event_data_for_flag_3"},
-      {LEVEL, "event_data_for_flag_2"},
-      {KEYWORDS, "event_data_for_flag_5"}};
+      {METADATA::LOG_NAME, "MetadataWalkerTests"},
+      {METADATA::SOURCE, "Microsoft-Windows-Security-Auditing"},
+      {METADATA::TIME_CREATED, "event_timestamp"},
+      {METADATA::EVENTID, "4672"},
+      {METADATA::OPCODE, "event_data_for_flag_4"},
+      {METADATA::EVENT_RECORDID, "2575952"},
+      {METADATA::EVENT_TYPE, "178"},
+      {METADATA::TASK_CATEGORY, "event_data_for_flag_3"},
+      {METADATA::LEVEL, "event_data_for_flag_2"},
+      {METADATA::KEYWORDS, "event_data_for_flag_5"}};
 
   SECTION("update_xml is false => fields are collected into walker.getFieldValues()") {
     const std::map<std::string, std::string> expected_field_values{
@@ -278,12 +278,12 @@ TEST_CASE("MetadataWalker extracts mappings correctly when the Sid is unknown an
 
   const std::map<std::string, std::string> expected_identifiers{{"S-1-8-6-5-3-0-9", "S-1-8-6-5-3-0-9"}};
 
-  using namespace org::apache::nifi::minifi::wel;
+  using org::apache::nifi::minifi::wel::METADATA;
   const std::map<METADATA, std::string> expected_metadata{
-      {SOURCE, "Microsoft-Windows-Security-Auditing"},
-      {TIME_CREATED, "event_timestamp"},
-      {EVENTID, "4672"},
-      {EVENT_RECORDID, "2575952"}};
+      {METADATA::SOURCE, "Microsoft-Windows-Security-Auditing"},
+      {METADATA::TIME_CREATED, "event_timestamp"},
+      {METADATA::EVENTID, "4672"},
+      {METADATA::EVENT_RECORDID, "2575952"}};
 
   const std::map<std::string, std::string> expected_field_values{};
 
@@ -301,18 +301,18 @@ TEST_CASE("MetadataWalker extracts mappings correctly when the Sid is unknown an
 
   const std::map<std::string, std::string> expected_identifiers{{"S-1-8-6-5-3-0-9", "S-1-8-6-5-3-0-9"}};
 
-  using namespace org::apache::nifi::minifi::wel;
+  using org::apache::nifi::minifi::wel::METADATA;
   const std::map<METADATA, std::string> expected_metadata{
-      {LOG_NAME, "MetadataWalkerTests"},
-      {SOURCE, "Microsoft-Windows-Security-Auditing"},
-      {TIME_CREATED, "event_timestamp"},
-      {EVENTID, "4672"},
-      {OPCODE, "event_data_for_flag_4"},
-      {EVENT_RECORDID, "2575952"},
-      {EVENT_TYPE, "178"},
-      {TASK_CATEGORY, "event_data_for_flag_3"},
-      {LEVEL, "event_data_for_flag_2"},
-      {KEYWORDS, "event_data_for_flag_5"}};
+      {METADATA::LOG_NAME, "MetadataWalkerTests"},
+      {METADATA::SOURCE, "Microsoft-Windows-Security-Auditing"},
+      {METADATA::TIME_CREATED, "event_timestamp"},
+      {METADATA::EVENTID, "4672"},
+      {METADATA::OPCODE, "event_data_for_flag_4"},
+      {METADATA::EVENT_RECORDID, "2575952"},
+      {METADATA::EVENT_TYPE, "178"},
+      {METADATA::TASK_CATEGORY, "event_data_for_flag_3"},
+      {METADATA::LEVEL, "event_data_for_flag_2"},
+      {METADATA::KEYWORDS, "event_data_for_flag_5"}};
 
   SECTION("update_xml is false => fields are collected into walker.getFieldValues()") {
     const std::map<std::string, std::string> expected_field_values{
diff --git a/extensions/windows-event-log/tests/custom-provider/CPPLINT.cfg b/extensions/windows-event-log/tests/custom-provider/CPPLINT.cfg
new file mode 100644
index 0000000..c180f1d
--- /dev/null
+++ b/extensions/windows-event-log/tests/custom-provider/CPPLINT.cfg
@@ -0,0 +1 @@
+exclude_files=unit-test-provider.h
diff --git a/extensions/windows-event-log/wel/JSONUtils.h b/extensions/windows-event-log/wel/JSONUtils.h
index 5b3b8ab..5afcbc6 100644
--- a/extensions/windows-event-log/wel/JSONUtils.h
+++ b/extensions/windows-event-log/wel/JSONUtils.h
@@ -20,9 +20,11 @@
 #undef RAPIDJSON_ASSERT
 #define RAPIDJSON_ASSERT(x) if (!(x)) throw std::logic_error("rapidjson exception");  // NOLINT
 
-#include <pugixml.hpp>
+#include <stdexcept>  // for the RAPIDJSON_ASSERT redefine
+#include <string>
 
-#include <stdexcept>  // for std::logic_error
+
+#include "pugixml.hpp"
 #include "rapidjson/document.h"
 
 namespace org {
diff --git a/extensions/windows-event-log/wel/MetadataWalker.cpp b/extensions/windows-event-log/wel/MetadataWalker.cpp
index 4b85d6e..7d68676 100644
--- a/extensions/windows-event-log/wel/MetadataWalker.cpp
+++ b/extensions/windows-event-log/wel/MetadataWalker.cpp
@@ -17,9 +17,18 @@
  */
 
 #include <windows.h>
+#include <strsafe.h>
+
+#include <map>
+#include <functional>
+#include <codecvt>
+#include <regex>
+#include <string>
+#include <utility>
+#include <vector>
+
 #include "MetadataWalker.h"
 #include "XMLString.h"
-#include <strsafe.h>
 
 namespace org {
 namespace apache {
@@ -64,20 +73,15 @@ bool MetadataWalker::for_each(pugi::xml_node &node) {
       }
       node.text().set(nodeText.c_str());
     }
-  }
-  else if (node_name == "TimeCreated") {
+  } else if (node_name == "TimeCreated") {
     metadata_["TimeCreated"] = node.attribute("SystemTime").value();
-  }
-  else if (node_name == "EventRecordID") {
+  } else if (node_name == "EventRecordID") {
     metadata_["EventRecordID"] = node.text().get();
-  }
-  else if (node_name == "Provider") {
+  } else if (node_name == "Provider") {
     metadata_["Provider"] = node.attribute("Name").value();
-  }
-  else if (node_name == "EventID") {
+  } else if (node_name == "EventID") {
     metadata_["EventID"] = node.text().get();
-  }
-  else {
+  } else {
     static std::map<std::string, EVT_FORMAT_MESSAGE_FLAGS> formatFlagMap = {
         {"Channel", EvtFormatMessageChannel}, {"Keywords", EvtFormatMessageKeyword}, {"Level", EvtFormatMessageLevel},
         {"Opcode", EvtFormatMessageOpcode}, {"Task", EvtFormatMessageTask}
@@ -94,8 +98,7 @@ bool MetadataWalker::for_each(pugi::xml_node &node) {
         return input;
       };
       updateText(node, node.name(), std::move(updateFunc));
-    }
-    else {
+    } else {
       // no conversion is required here, so let the node fall through
     }
   }
@@ -144,7 +147,7 @@ std::string MetadataWalker::getMetadata(METADATA metadata) const {
         return std::to_string(windows_event_log_metadata_.getEventTypeIndex());
       case COMPUTER:
         return windows_event_log_metadata_.getComputerName();
-    };
+    }
     return "N/A";
 }
 
@@ -168,8 +171,7 @@ std::string MetadataWalker::updateXmlMetadata(const std::string &xml, EVT_HANDLE
     wel::XmlString writer;
     doc.print(writer, "", pugi::format_raw);  // no indentation or formatting
     return writer.xml_;
-  }
-  else {
+  } else {
     throw std::runtime_error("Could not parse XML document");
   }
 }
diff --git a/extensions/windows-event-log/wel/MetadataWalker.h b/extensions/windows-event-log/wel/MetadataWalker.h
index faebc08..f779a7d 100644
--- a/extensions/windows-event-log/wel/MetadataWalker.h
+++ b/extensions/windows-event-log/wel/MetadataWalker.h
@@ -20,18 +20,25 @@
 
 #pragma once
 
-#include "WindowsEventLog.h"
-#include "core/Core.h"
-#include "FlowFileRecord.h"
-#include "concurrentqueue.h"
-#include "core/Processor.h"
-#include "core/ProcessSession.h"
-#include <pugixml.hpp>
+#include <Windows.h>
 #include <winevt.h>
+#include <codecvt>
+
+#include <map>
 #include <sstream>
+#include <string>
 #include <regex>
-#include <codecvt>
+#include <vector>
+
+#include "core/Core.h"
+#include "core/Processor.h"
+#include "core/ProcessSession.h"
 #include "utils/OsUtils.h"
+#include "FlowFileRecord.h"
+#include "WindowsEventLog.h"
+
+#include "concurrentqueue.h"
+#include "pugixml.hpp"
 
 namespace org {
 namespace apache {
@@ -63,7 +70,7 @@ class MetadataWalker : public pugi::xml_tree_walker {
   bool for_each(pugi::xml_node &node) override;
 
   static std::string updateXmlMetadata(const std::string &xml, EVT_HANDLE metadata_ptr, EVT_HANDLE event_ptr, bool update_xml, bool resolve, const std::string &regex = "");
-  
+
   std::map<std::string, std::string> getFieldValues() const;
 
   std::map<std::string, std::string> getIdentifiers() const;
diff --git a/extensions/windows-event-log/wel/UnicodeConversion.h b/extensions/windows-event-log/wel/UnicodeConversion.h
index 90f5200..b382774 100644
--- a/extensions/windows-event-log/wel/UnicodeConversion.h
+++ b/extensions/windows-event-log/wel/UnicodeConversion.h
@@ -20,27 +20,27 @@
 
 #pragma once
 
-#include <string>
-
 #include <atlbase.h>
 #include <atlconv.h>
 
+#include <string>
+
 namespace org {
-  namespace apache {
-    namespace nifi {
-      namespace minifi {
-        namespace wel {
-          inline std::string to_string(const wchar_t* pChar) {
-            ATL::CW2A aString(pChar, CP_UTF8);
-            return std::string(aString);
-          }
+namespace apache {
+namespace nifi {
+namespace minifi {
+namespace wel {
+inline std::string to_string(const wchar_t* pChar) {
+  ATL::CW2A aString(pChar, CP_UTF8);
+  return std::string(aString);
+}
 
-          inline std::wstring to_wstring(const char* pChar) {
-            ATL::CA2W wString(pChar, CP_UTF8);
-            return std::wstring(wString);
-          }
-        } /* namespace wel */
-      } /* namespace minifi */
-    } /* namespace nifi */
-  } /* namespace apache */
+inline std::wstring to_wstring(const char* pChar) {
+  ATL::CA2W wString(pChar, CP_UTF8);
+  return std::wstring(wString);
+}
+} /* namespace wel */
+} /* namespace minifi */
+} /* namespace nifi */
+} /* namespace apache */
 } /* namespace org */
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.cpp b/extensions/windows-event-log/wel/WindowsEventLog.cpp
index 3c9c0b9..5887632 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.cpp
+++ b/extensions/windows-event-log/wel/WindowsEventLog.cpp
@@ -16,11 +16,14 @@
  * limitations under the License.
  */
 #include <winmeta.h>
+
+#include <algorithm>
+#include <memory>
+#include <string>
+
 #include "WindowsEventLog.h"
 #include "UnicodeConversion.h"
 #include "utils/Deleters.h"
-#include <algorithm>
-
 #include "utils/gsl.h"
 
 namespace org {
@@ -46,18 +49,17 @@ void WindowsEventLogMetadataImpl::renderMetadata() {
     EvtClose(context);
   });
   if (!EvtRender(context, event_ptr_, EvtRenderEventValues, dwBufferSize, rendered_values.get(), &dwBufferUsed, &dwPropertyCount)) {
-    if (ERROR_INSUFFICIENT_BUFFER == (status = GetLastError())) {
-      dwBufferSize = dwBufferUsed;
-      rendered_values.reset((PEVT_VARIANT)(malloc(dwBufferSize)));
-      if (!rendered_values) {
-        return;
-      }
-      EvtRender(context, event_ptr_, EvtRenderEventValues, dwBufferSize, rendered_values.get(), &dwBufferUsed, &dwPropertyCount);
+    if (ERROR_INSUFFICIENT_BUFFER != (status = GetLastError())) {
+      return;
     }
-    else {
+
+    dwBufferSize = dwBufferUsed;
+    rendered_values.reset((PEVT_VARIANT)(malloc(dwBufferSize)));
+    if (!rendered_values) {
       return;
     }
 
+    EvtRender(context, event_ptr_, EvtRenderEventValues, dwBufferSize, rendered_values.get(), &dwBufferUsed, &dwPropertyCount);
     if (ERROR_SUCCESS != (status = GetLastError())) {
       return;
     }
@@ -82,7 +84,8 @@ void WindowsEventLogMetadataImpl::renderMetadata() {
     hour -= 12;
   if (hour == 0)
     hour = 12;
-  datestr << st.wMonth << "/" << st.wDay << "/" << st.wYear << " " << std::setfill('0') << std::setw(2) << hour << ":" << std::setfill('0') << std::setw(2) << st.wMinute << ":" << std::setfill('0') << std::setw(2) << st.wSecond << " " << period;
+  datestr << st.wMonth << "/" << st.wDay << "/" << st.wYear << " " << std::setfill('0') << std::setw(2) << hour << ":" << std::setfill('0')
+          << std::setw(2) << st.wMinute << ":" << std::setfill('0') << std::setw(2) << st.wSecond << " " << period;
   event_timestamp_str_ = datestr.str();
   auto level = static_cast<PEVT_VARIANT>(rendered_values.get())[EvtSystemLevel];
   auto keyword = static_cast<PEVT_VARIANT>(rendered_values.get())[EvtSystemKeywords];
@@ -104,9 +107,8 @@ void WindowsEventLogMetadataImpl::renderMetadata() {
         break;
       default:
         event_type_index_ = 0;
-    };
-  }
-  else {
+    }
+  } else {
     event_type_ = "N/A";
   }
 
@@ -205,8 +207,7 @@ void WindowsEventLogHeader::setDelimiter(const std::string &delim) {
 std::string WindowsEventLogHeader::createDefaultDelimiter(size_t max, size_t length) const {
   if (max > length) {
     return ":" + std::string(max - length, ' ');
-  }
-  else {
+  } else {
     return ": ";
   }
 }
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.h b/extensions/windows-event-log/wel/WindowsEventLog.h
index a2247b1..c550e5f 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.h
+++ b/extensions/windows-event-log/wel/WindowsEventLog.h
@@ -18,19 +18,26 @@
 
 #pragma once
 
+#include <Windows.h>
+#include <winevt.h>
+
+#include <algorithm>
+#include <codecvt>
+#include <map>
+#include <sstream>
+#include <string>
+#include <regex>
+#include <utility>
+#include <vector>
+
 #include "core/Core.h"
-#include "FlowFileRecord.h"
 #include "concurrentqueue.h"
 #include "core/Processor.h"
 #include "core/ProcessSession.h"
-#include <pugixml.hpp>
-#include <winevt.h>
-#include <sstream>
-#include <regex>
-#include <codecvt>
 #include "utils/OsUtils.h"
+#include "FlowFileRecord.h"
 
-
+#include "pugixml.hpp"
 
 namespace org {
 namespace apache {
@@ -61,7 +68,7 @@ namespace wel {
 typedef std::vector<std::pair<METADATA, std::string>> METADATA_NAMES;
 
 class WindowsEventLogHandler {
-public:
+ public:
   WindowsEventLogHandler() : metadata_provider_(nullptr) {
   }
 
@@ -73,7 +80,7 @@ public:
 
   EVT_HANDLE getMetadata() const;
 
-private:
+ private:
   EVT_HANDLE metadata_provider_;
 };
 
@@ -82,11 +89,11 @@ class WindowsEventLogMetadata {
   virtual ~WindowsEventLogMetadata() = default;
   virtual std::string getEventData(EVT_FORMAT_MESSAGE_FLAGS flags) const = 0;
   virtual std::string getEventTimestamp() const = 0;
-  virtual short getEventTypeIndex() const = 0;
+  virtual short getEventTypeIndex() const = 0;  // NOLINT short comes from WINDOWS API
 
   static std::string getMetadataString(METADATA val) {
-    static std::map< METADATA, std::string> map = {
-        {LOG_NAME,  "LOG_NAME" },
+    static std::map<METADATA, std::string> map = {
+        {LOG_NAME, "LOG_NAME" },
         {SOURCE, "SOURCE"},
         {TIME_CREATED, "TIME_CREATED" },
         {EVENTID, "EVENTID"},
@@ -104,7 +111,7 @@ class WindowsEventLogMetadata {
   }
 
   static METADATA getMetadataFromString(const std::string &val) {
-    static std::map< std::string, METADATA> map = {
+    static std::map<std::string, METADATA> map = {
         {"LOG_NAME", LOG_NAME},
         {"SOURCE", SOURCE},
         {"TIME_CREATED", TIME_CREATED },
@@ -122,8 +129,7 @@ class WindowsEventLogMetadata {
     auto enumVal = map.find(val);
     if (enumVal != std::end(map)) {
       return enumVal->second;
-    }
-    else {
+    } else {
       return METADATA::UNKNOWN;
     }
   }
@@ -135,8 +141,7 @@ class WindowsEventLogMetadata {
       DWORD size = sizeof(buff);
       if (GetComputerNameExA(ComputerNameDnsFullyQualified, buff, &size)) {
         computer_name = buff;
-      }
-      else {
+      } else {
         computer_name = "N/A";
       }
     }
@@ -145,7 +150,7 @@ class WindowsEventLogMetadata {
 };
 
 class WindowsEventLogMetadataImpl : public WindowsEventLogMetadata {
-public:
+ public:
   WindowsEventLogMetadataImpl(EVT_HANDLE metadataProvider, EVT_HANDLE event_ptr) : metadata_ptr_(metadataProvider), event_timestamp_(0), event_ptr_(event_ptr) {
     renderMetadata();
   }
@@ -154,21 +159,21 @@ public:
 
   std::string getEventTimestamp() const override { return event_timestamp_str_; }
 
-  short getEventTypeIndex() const override { return event_type_index_; }
+  short getEventTypeIndex() const override { return event_type_index_; }  // NOLINT short comes from WINDOWS API
 
  private:
   void renderMetadata();
 
   uint64_t event_timestamp_;
   std::string event_type_;
-  short event_type_index_;
+  short event_type_index_;  // NOLINT short comes from WINDOWS API
   std::string event_timestamp_str_;
   EVT_HANDLE event_ptr_;
   EVT_HANDLE metadata_ptr_;
 };
 
 class WindowsEventLogHeader {
-public:
+ public:
   explicit WindowsEventLogHeader(METADATA_NAMES header_names) : header_names_(header_names) {}
 
   void setDelimiter(const std::string &delim);
@@ -176,7 +181,7 @@ public:
   template<typename MetadataCollection>
   std::string getEventHeader(const MetadataCollection& metadata_collection) const;
 
-private:
+ private:
   std::string createDefaultDelimiter(size_t max, size_t length) const;
 
   std::string delimiter_;
diff --git a/extensions/windows-event-log/wel/XMLString.h b/extensions/windows-event-log/wel/XMLString.h
index d4f1c1f..18d35bb 100644
--- a/extensions/windows-event-log/wel/XMLString.h
+++ b/extensions/windows-event-log/wel/XMLString.h
@@ -20,18 +20,21 @@
 
 #pragma once
 
-#include "core/Core.h"
-#include "FlowFileRecord.h"
-#include "concurrentqueue.h"
-#include "core/Processor.h"
-#include "core/ProcessSession.h"
-#include <pugixml.hpp>
+#include <Windows.h>
 #include <winevt.h>
+
 #include <sstream>
+#include <string>
 #include <regex>
-#include <codecvt>
+
+#include "core/Core.h"
+#include "core/Processor.h"
+#include "core/ProcessSession.h"
+#include "FlowFileRecord.h"
 #include "utils/OsUtils.h"
 
+#include "concurrentqueue.h"
+#include "pugixml.hpp"
 
 
 namespace org {
@@ -40,14 +43,14 @@ namespace nifi {
 namespace minifi {
 namespace wel {
 
-  class XmlString : public pugi::xml_writer {
-  public:
-    std::string xml_;
+class XmlString : public pugi::xml_writer {
+ public:
+  std::string xml_;
 
-    virtual void write(const void* data, size_t size) {
-      xml_.append(static_cast<const char*>(data), size);
-    }
-  };
+  virtual void write(const void* data, size_t size) {
+    xml_.append(static_cast<const char*>(data), size);
+  }
+};
 
 } /* namespace wel */
 } /* namespace minifi */
diff --git a/libminifi/include/io/ClientSocket.h b/libminifi/include/io/ClientSocket.h
index 37626c8..84f3836 100644
--- a/libminifi/include/io/ClientSocket.h
+++ b/libminifi/include/io/ClientSocket.h
@@ -125,8 +125,8 @@ class Socket : public BaseStream {
    */
   int initialize() override;
 
-  virtual void setInterface(io::NetworkInterface interface) {
-    local_network_interface_ = std::move(interface);
+  virtual void setInterface(io::NetworkInterface network_interface) {
+    local_network_interface_ = std::move(network_interface);
   }
 
   /**