From 25c9f8f383c99b06592df8831c91b86bed56aaa6 Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Mon, 27 Jan 2025 19:08:15 -0500 Subject: [PATCH] Add more rules to .clang-format --- .clang-format | 4 ++++ include/asm/warning.hpp | 9 ++++++--- include/error.hpp | 12 ++++++++---- include/gfx/main.hpp | 15 ++++++++++----- include/helpers.hpp | 3 ++- include/link/main.hpp | 12 ++++++------ src/asm/section.cpp | 6 ++++-- src/asm/symbol.cpp | 2 +- src/asm/warning.cpp | 3 ++- src/error.cpp | 12 ++++++++---- src/fix/main.cpp | 3 ++- src/gfx/main.cpp | 6 ++++-- src/gfx/pal_spec.cpp | 3 ++- src/gfx/process.cpp | 6 ++++-- src/gfx/reverse.cpp | 3 ++- src/link/main.cpp | 6 ++++-- test/gfx/rgbgfx_test.cpp | 13 +++++-------- 17 files changed, 74 insertions(+), 44 deletions(-) diff --git a/.clang-format b/.clang-format index 6b47069c..a11bfd09 100644 --- a/.clang-format +++ b/.clang-format @@ -24,6 +24,7 @@ AttributeMacros: BinPackArguments: false BinPackParameters: false BitFieldColonSpacing: Both +BreakAfterAttributes: Always BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: Attach BreakBeforeConceptDeclarations: true @@ -60,6 +61,7 @@ IndentPPDirectives: BeforeHash IndentRequires: true IndentWidth: 4 IndentWrappedFunctionNames: true +InsertNewlineAtEOF: true # Only support for Javascript as of clang-format 14... # InsertTrailingCommas: Wrapped KeepEmptyLinesAtTheStartOfBlocks: false @@ -71,6 +73,8 @@ PPIndentWidth: -1 PointerAlignment: Right QualifierAlignment: Right ReflowComments: true +RemoveParentheses: ReturnStatement +RemoveSemicolon: true SortIncludes: CaseSensitive SortUsingDeclarations: true SpaceAfterCStyleCast: false diff --git a/include/asm/warning.hpp b/include/asm/warning.hpp index aa33e9b8..0bbc927a 100644 --- a/include/asm/warning.hpp +++ b/include/asm/warning.hpp @@ -64,19 +64,22 @@ void processWarningFlag(char const *flag); // Used to warn the user about problems that don't prevent the generation of // valid code. -[[gnu::format(printf, 2, 3)]] void warning(WarningID id, char const *fmt, ...); +[[gnu::format(printf, 2, 3)]] +void warning(WarningID id, char const *fmt, ...); // Used for errors that compromise the whole assembly process by affecting the // following code, potencially making the assembler generate errors caused by // the first one and unrelated to the code that the assembler complains about. // It is also used when the assembler goes into an invalid state (for example, // when it fails to allocate memory). -[[gnu::format(printf, 1, 2), noreturn]] void fatalerror(char const *fmt, ...); +[[gnu::format(printf, 1, 2), noreturn]] +void fatalerror(char const *fmt, ...); // Used for errors that make it impossible to assemble correctly, but don't // affect the following code. The code will fail to assemble but the user will // get a list of all errors at the end, making it easier to fix all of them at // once. -[[gnu::format(printf, 1, 2)]] void error(char const *fmt, ...); +[[gnu::format(printf, 1, 2)]] +void error(char const *fmt, ...); #endif // RGBDS_ASM_WARNING_HPP diff --git a/include/error.hpp b/include/error.hpp index d12da366..b353fd54 100644 --- a/include/error.hpp +++ b/include/error.hpp @@ -4,11 +4,15 @@ #define RGBDS_ERROR_HPP extern "C" { - [[gnu::format(printf, 1, 2)]] void warn(char const *fmt...); - [[gnu::format(printf, 1, 2)]] void warnx(char const *fmt, ...); + [[gnu::format(printf, 1, 2)]] + void warn(char const *fmt...); + [[gnu::format(printf, 1, 2)]] + void warnx(char const *fmt, ...); - [[gnu::format(printf, 1, 2), noreturn]] void err(char const *fmt, ...); - [[gnu::format(printf, 1, 2), noreturn]] void errx(char const *fmt, ...); + [[gnu::format(printf, 1, 2), noreturn]] + void err(char const *fmt, ...); + [[gnu::format(printf, 1, 2), noreturn]] + void errx(char const *fmt, ...); } #endif // RGBDS_ERROR_HPP diff --git a/include/gfx/main.hpp b/include/gfx/main.hpp index c33bac20..28435b49 100644 --- a/include/gfx/main.hpp +++ b/include/gfx/main.hpp @@ -57,7 +57,8 @@ struct Options { static constexpr uint8_t VERB_TRACE = 5; // Step-by-step algorithm details static constexpr uint8_t VERB_VVVVVV = 6; // What, can't I have a little fun? // clang-format on - [[gnu::format(printf, 3, 4)]] void verbosePrint(uint8_t level, char const *fmt, ...) const; + [[gnu::format(printf, 3, 4)]] + void verbosePrint(uint8_t level, char const *fmt, ...) const; mutable bool hasTransparentPixels = false; uint8_t maxOpaqueColors() const { return nbColorsPerPal - hasTransparentPixels; } @@ -66,19 +67,23 @@ struct Options { extern Options options; // Prints the error count, and exits with failure -[[noreturn]] void giveUp(); +[[noreturn]] +void giveUp(); // If any error has been emitted thus far, calls `giveUp()`. void requireZeroErrors(); // Prints a warning, and does not change the error count -[[gnu::format(printf, 1, 2)]] void warning(char const *fmt, ...); +[[gnu::format(printf, 1, 2)]] +void warning(char const *fmt, ...); // Prints an error, and increments the error count -[[gnu::format(printf, 1, 2)]] void error(char const *fmt, ...); +[[gnu::format(printf, 1, 2)]] +void error(char const *fmt, ...); // Prints an error, and increments the error count // Does not take format arguments so `format_` and `-Wformat-security` won't complain about // calling `errorMessage(msg)`. void errorMessage(char const *msg); // Prints a fatal error, increments the error count, and gives up -[[gnu::format(printf, 1, 2), noreturn]] void fatal(char const *fmt, ...); +[[gnu::format(printf, 1, 2), noreturn]] +void fatal(char const *fmt, ...); struct Palette { // An array of 4 GBC-native (RGB555) colors diff --git a/include/helpers.hpp b/include/helpers.hpp index 108e459f..e68eeada 100644 --- a/include/helpers.hpp +++ b/include/helpers.hpp @@ -14,7 +14,8 @@ #else // This seems to generate similar code to __builtin_unreachable, despite different semantics // Note that executing this is undefined behavior (declared [[noreturn]], but does return) -[[noreturn]] static inline void unreachable_() { +[[noreturn]] +static inline void unreachable_() { } #endif diff --git a/include/link/main.hpp b/include/link/main.hpp index 12e0fb40..6e4c6913 100644 --- a/include/link/main.hpp +++ b/include/link/main.hpp @@ -58,11 +58,11 @@ struct FileStackNode { std::string const &dump(uint32_t curLineNo) const; }; -[[gnu::format(printf, 3, 4)]] void - warning(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...); -[[gnu::format(printf, 3, 4)]] void - error(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...); -[[gnu::format(printf, 3, 4), noreturn]] void - fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...); +[[gnu::format(printf, 3, 4)]] +void warning(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...); +[[gnu::format(printf, 3, 4)]] +void error(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...); +[[gnu::format(printf, 3, 4), noreturn]] +void fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...); #endif // RGBDS_LINK_MAIN_HPP diff --git a/src/asm/section.cpp b/src/asm/section.cpp index d3b81023..2b17f56d 100644 --- a/src/asm/section.cpp +++ b/src/asm/section.cpp @@ -49,7 +49,8 @@ static std::pair currentLoadLabelScopes = {nullp int32_t loadOffset; // Offset into the LOAD section's parent (see sect_GetOutputOffset) // A quick check to see if we have an initialized section -[[nodiscard]] static bool requireSection() { +[[nodiscard]] +static bool requireSection() { if (currentSection) return true; @@ -59,7 +60,8 @@ int32_t loadOffset; // Offset into the LOAD section's parent (see sect_GetOutput // A quick check to see if we have an initialized section that can contain // this much initialized data -[[nodiscard]] static bool requireCodeSection() { +[[nodiscard]] +static bool requireCodeSection() { if (!requireSection()) return false; diff --git a/src/asm/symbol.cpp b/src/asm/symbol.cpp index face968b..9bb839e3 100644 --- a/src/asm/symbol.cpp +++ b/src/asm/symbol.cpp @@ -92,7 +92,7 @@ int32_t Symbol::getOutputValue() const { } ContentSpan const &Symbol::getMacro() const { - assume((std::holds_alternative(data))); + assume(std::holds_alternative(data)); return std::get(data); } diff --git a/src/asm/warning.cpp b/src/asm/warning.cpp index 3f499805..26dc08b3 100644 --- a/src/asm/warning.cpp +++ b/src/asm/warning.cpp @@ -308,7 +308,8 @@ void error(char const *fmt, ...) { ); } -[[noreturn]] void fatalerror(char const *fmt, ...) { +[[noreturn]] +void fatalerror(char const *fmt, ...) { va_list args; va_start(args, fmt); diff --git a/src/error.cpp b/src/error.cpp index 3c4478c5..99add990 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -22,7 +22,8 @@ static void vwarnx(char const *fmt, va_list ap) { putc('\n', stderr); } -[[noreturn]] static void verr(char const *fmt, va_list ap) { +[[noreturn]] +static void verr(char const *fmt, va_list ap) { char const *error = strerror(errno); fprintf(stderr, "error: "); @@ -32,7 +33,8 @@ static void vwarnx(char const *fmt, va_list ap) { exit(1); } -[[noreturn]] static void verrx(char const *fmt, va_list ap) { +[[noreturn]] +static void verrx(char const *fmt, va_list ap) { fprintf(stderr, "error: "); vfprintf(stderr, fmt, ap); putc('\n', stderr); @@ -56,14 +58,16 @@ void warnx(char const *fmt, ...) { va_end(ap); } -[[noreturn]] void err(char const *fmt, ...) { +[[noreturn]] +void err(char const *fmt, ...) { va_list ap; va_start(ap, fmt); verr(fmt, ap); } -[[noreturn]] void errx(char const *fmt, ...) { +[[noreturn]] +void errx(char const *fmt, ...) { va_list ap; va_start(ap, fmt); diff --git a/src/fix/main.cpp b/src/fix/main.cpp index 36a8f028..7d0cfe1f 100644 --- a/src/fix/main.cpp +++ b/src/fix/main.cpp @@ -75,7 +75,8 @@ static void printUsage() { static uint8_t nbErrors; -[[gnu::format(printf, 1, 2)]] static void report(char const *fmt, ...) { +[[gnu::format(printf, 1, 2)]] +static void report(char const *fmt, ...) { va_list ap; va_start(ap, fmt); diff --git a/src/gfx/main.cpp b/src/gfx/main.cpp index 85fd23d0..1e7462e8 100644 --- a/src/gfx/main.cpp +++ b/src/gfx/main.cpp @@ -41,7 +41,8 @@ static struct LocalOptions { static uintmax_t nbErrors; -[[noreturn]] void giveUp() { +[[noreturn]] +void giveUp() { fprintf(stderr, "Conversion aborted after %ju error%s\n", nbErrors, nbErrors == 1 ? "" : "s"); exit(1); } @@ -82,7 +83,8 @@ void errorMessage(char const *msg) { nbErrors++; } -[[noreturn]] void fatal(char const *fmt, ...) { +[[noreturn]] +void fatal(char const *fmt, ...) { va_list ap; fputs("FATAL: ", stderr); diff --git a/src/gfx/pal_spec.cpp b/src/gfx/pal_spec.cpp index fb820f8a..4e2b3db9 100644 --- a/src/gfx/pal_spec.cpp +++ b/src/gfx/pal_spec.cpp @@ -191,7 +191,8 @@ static T readLE(U const *bytes) { // **Appends** the first line read from `file` to the end of the provided `buffer`. // @return true if a line was read. -[[gnu::warn_unused_result]] static bool readLine(std::filebuf &file, std::string &buffer) { +[[gnu::warn_unused_result]] +static bool readLine(std::filebuf &file, std::string &buffer) { assume(buffer.empty()); // TODO: maybe this can be optimized to bulk reads? for (;;) { diff --git a/src/gfx/process.cpp b/src/gfx/process.cpp index 8889a7fe..646a49f9 100644 --- a/src/gfx/process.cpp +++ b/src/gfx/process.cpp @@ -34,7 +34,8 @@ public: // Registers a color in the palette. // If the newly inserted color "conflicts" with another one (different color, but same CGB // color), then the other color is returned. Otherwise, `nullptr` is returned. - [[nodiscard]] Rgba const *registerColor(Rgba const &rgba) { + [[nodiscard]] + Rgba const *registerColor(Rgba const &rgba) { decltype(_colors)::value_type &slot = _colors[rgba.cgbColor()]; if (rgba.cgbColor() == Rgba::transparent) { @@ -77,7 +78,8 @@ class Png { int nbTransparentEntries; png_bytep transparencyPal = nullptr; - [[noreturn]] static void handleError(png_structp png, char const *msg) { + [[noreturn]] + static void handleError(png_structp png, char const *msg) { Png *self = reinterpret_cast(png_get_error_ptr(png)); fatal("Error reading input image (\"%s\"): %s", self->c_str(), msg); diff --git a/src/gfx/reverse.cpp b/src/gfx/reverse.cpp index 2d0711d4..74d37f8f 100644 --- a/src/gfx/reverse.cpp +++ b/src/gfx/reverse.cpp @@ -49,7 +49,8 @@ static DefaultInitVec readInto(std::string const &path) { return data; } -[[noreturn]] static void pngError(png_structp png, char const *msg) { +[[noreturn]] +static void pngError(png_structp png, char const *msg) { fatal( "Error writing reversed image (\"%s\"): %s", static_cast(png_get_error_ptr(png)), diff --git a/src/link/main.cpp b/src/link/main.cpp index 44394b6b..f3444e9e 100644 --- a/src/link/main.cpp +++ b/src/link/main.cpp @@ -113,7 +113,8 @@ void argErr(char flag, char const *fmt, ...) { nbErrors++; } -[[noreturn]] void fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) { +[[noreturn]] +void fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) { va_list args; va_start(args, fmt); @@ -308,7 +309,8 @@ next: // Can't `continue` a `for` loop with this nontrivial iteration logic } } -[[noreturn]] void reportErrors() { +[[noreturn]] +void reportErrors() { fprintf( stderr, "Linking failed with %" PRIu32 " error%s\n", nbErrors, nbErrors == 1 ? "" : "s" ); diff --git a/test/gfx/rgbgfx_test.cpp b/test/gfx/rgbgfx_test.cpp index d394464e..a3f127f4 100644 --- a/test/gfx/rgbgfx_test.cpp +++ b/test/gfx/rgbgfx_test.cpp @@ -63,7 +63,8 @@ static void error(char const *fmt, ...) { } } -[[noreturn]] static void fatal(char const *fmt, ...) { +[[noreturn]] +static void fatal(char const *fmt, ...) { va_list ap; fputs("FATAL: ", stderr); @@ -96,7 +97,8 @@ class Png { int nbTransparentEntries; png_bytep transparencyPal = nullptr; - [[noreturn]] static void handleError(png_structp png, char const *msg) { + [[noreturn]] + static void handleError(png_structp png, char const *msg) { Png *self = reinterpret_cast(png_get_error_ptr(png)); fatal("Error reading input image (\"%s\"): %s", self->path.c_str(), msg); @@ -314,12 +316,7 @@ static char *execProg(char const *name, char * const *argv) { if (int info; waitpid(pid, &info, 0) == -1 || !WIFEXITED(info)) { fatal("Error waiting for %s: %s", name, strerror(errno)); } else if (int status = WEXITSTATUS(info); status != 0) { - fatal( - "%s returned with status %d\n\tThe command was: [%s]", - name, - status, - formatArgv() - ); + fatal("%s returned with status %d\n\tThe command was: [%s]", name, status, formatArgv()); } #else // defined(_MSC_VER) || defined(__MINGW32__)