From a8c381f4eff5b300cb76b9219277c1cc200ccc80 Mon Sep 17 00:00:00 2001 From: Ansh Agrawal Date: Sun, 1 Mar 2026 00:54:57 -0700 Subject: [PATCH 1/2] ci: add separate clang-format check workflow --- .github/workflows/format.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/format.yml diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000..1356ea4 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,22 @@ +name: Format + +on: + pull_request: + +permissions: + contents: read + +jobs: + clang-format: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - uses: actions/checkout@v4 + + - name: Install clang-format + run: sudo apt-get update && sudo apt-get install -y clang-format + + - name: Check formatting + run: | + git ls-files -z '*.cpp' '*.h' | xargs -0 clang-format --dry-run --Werror From b933dfac58e50748692894498fb15cc4ef757670 Mon Sep 17 00:00:00 2001 From: Ansh Agrawal Date: Sun, 1 Mar 2026 00:59:10 -0700 Subject: [PATCH 2/2] style: apply clang-format across C++ codebase --- src/command_exec.cpp | 2 +- src/exit_codes.h | 4 +--- src/free_command.cpp | 7 +++---- src/list_command.cpp | 5 ++--- src/port_inspection.cpp | 8 ++++---- src/usage.cpp | 2 +- src/who_command.cpp | 2 +- tests/unit_tests.cpp | 7 +++---- 8 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/command_exec.cpp b/src/command_exec.cpp index 07a3151..c1bdfd1 100644 --- a/src/command_exec.cpp +++ b/src/command_exec.cpp @@ -3,9 +3,9 @@ #include #include #include +#include #include #include -#include CommandResult runCommand(const std::vector &args) { CommandResult result{1, ""}; diff --git a/src/exit_codes.h b/src/exit_codes.h index 15ac7cd..327995b 100644 --- a/src/exit_codes.h +++ b/src/exit_codes.h @@ -10,9 +10,7 @@ enum class ExitCode : int { kUnresolved = 4, }; -inline int toExitCode(ExitCode code) { - return static_cast(code); -} +inline int toExitCode(ExitCode code) { return static_cast(code); } inline ExitCode classifySignalErrno(int errorNumber) { if (errorNumber == EPERM) { diff --git a/src/free_command.cpp b/src/free_command.cpp index 2900f21..adfc8a6 100644 --- a/src/free_command.cpp +++ b/src/free_command.cpp @@ -1,6 +1,6 @@ +#include "free_command.h" #include "cli_constants.h" #include "exit_codes.h" -#include "free_command.h" #include "free_options.h" #include "port_inspection.h" #include "process_actions.h" @@ -190,9 +190,8 @@ int runFreeCommand(int argc, char *argv[]) { return toExitCode(ExitCode::kOk); } - ConfirmResult gracefulConfirm = - confirmAction("Send SIG" + gracefulName + " to PIDs " + joinPids(initialPids) + "?", - options.yes); + ConfirmResult gracefulConfirm = confirmAction( + "Send SIG" + gracefulName + " to PIDs " + joinPids(initialPids) + "?", options.yes); if (gracefulConfirm == ConfirmResult::kRequiresYes) { return toExitCode(ExitCode::kUsage); } diff --git a/src/list_command.cpp b/src/list_command.cpp index da3383f..251a6ce 100644 --- a/src/list_command.cpp +++ b/src/list_command.cpp @@ -1,6 +1,6 @@ -#include "exit_codes.h" #include "list_command.h" #include "command_exec.h" +#include "exit_codes.h" #include "table_output.h" #include "usage.h" @@ -167,8 +167,7 @@ int runListCommand(int argc, char *argv[]) { rows.reserve(listeners.size()); for (const auto &listener : listeners) { std::string portText = listener.port > 0 ? std::to_string(listener.port) : "unknown"; - rows.push_back( - {portText, listener.pid, listener.user, listener.command, listener.endpoint}); + rows.push_back({portText, listener.pid, listener.user, listener.command, listener.endpoint}); } std::cout << renderTable({"PORT", "PID", "USER", "PROCESS", "ENDPOINT"}, rows) << "\n"; diff --git a/src/port_inspection.cpp b/src/port_inspection.cpp index 1079323..fc1d446 100644 --- a/src/port_inspection.cpp +++ b/src/port_inspection.cpp @@ -1,8 +1,8 @@ #include "port_inspection.h" #include "command_exec.h" -#include #include +#include #include #include #include @@ -52,8 +52,7 @@ static bool sortByPidThenEndpoint(const ListenerInfo &a, const ListenerInfo &b) } static bool sameListener(const ListenerInfo &a, const ListenerInfo &b) { - return a.pid == b.pid && a.user == b.user && a.command == b.command && - a.endpoint == b.endpoint; + return a.pid == b.pid && a.user == b.user && a.command == b.command && a.endpoint == b.endpoint; } static std::vector parseAllListeners(const std::string &raw) { @@ -135,7 +134,8 @@ InspectResult inspectPort(int port) { if (inspect.listeners.empty()) { inspect.status = InspectStatus::kError; inspect.error = "Port " + std::to_string(port) + - " appears occupied, but listener parsing failed.\nRaw lsof fields:\n" + result.output; + " appears occupied, but listener parsing failed.\nRaw lsof fields:\n" + + result.output; return inspect; } diff --git a/src/usage.cpp b/src/usage.cpp index 62faea5..2fa2c15 100644 --- a/src/usage.cpp +++ b/src/usage.cpp @@ -1,5 +1,5 @@ -#include "cli_constants.h" #include "usage.h" +#include "cli_constants.h" #include diff --git a/src/who_command.cpp b/src/who_command.cpp index 70d0d97..f599ba2 100644 --- a/src/who_command.cpp +++ b/src/who_command.cpp @@ -1,5 +1,5 @@ -#include "exit_codes.h" #include "who_command.h" +#include "exit_codes.h" #include "port_inspection.h" #include "table_output.h" #include "types.h" diff --git a/tests/unit_tests.cpp b/tests/unit_tests.cpp index 45d503d..7c4352c 100644 --- a/tests/unit_tests.cpp +++ b/tests/unit_tests.cpp @@ -20,8 +20,7 @@ void expectTrue(bool condition, const std::string &name) { } } -template -void expectEq(const T &actual, const T &expected, const std::string &name) { +template void expectEq(const T &actual, const T &expected, const std::string &name) { if (!(actual == expected)) { std::cerr << "FAIL: " << name << " (expected: " << expected << ", actual: " << actual << ")\n"; ++g_failures; @@ -49,8 +48,8 @@ void testParsePort() { void testParseFreeOptions() { FreeOptions options; std::string error; - bool ok = parseFreeOptionsFrom({"portctrl", "free", "3000", "--apply", "--signal", "INT", "--yes"}, - options, error); + bool ok = parseFreeOptionsFrom( + {"portctrl", "free", "3000", "--apply", "--signal", "INT", "--yes"}, options, error); expectTrue(ok, "parseFreeOptions valid input"); expectTrue(options.apply, "parseFreeOptions apply"); expectTrue(options.yes, "parseFreeOptions yes");