build: aïlla la implementació de stb_image_write en un TU propi

screenshot.cpp ara només inclou les declaracions de stb_image_write.h;
la macro STB_IMAGE_WRITE_IMPLEMENTATION viu a un .cpp nou dins de
source/external/, que ja està exclòs del pre-commit hook (clang-format
i clang-tidy) i cobert pel seu .clang-tidy amb Checks: '-*'. Així
podem retirar la desactivació global de clang-analyzer-optin.portability
.UnixAPI i el check queda actiu arreu del nostre propi codi.
This commit is contained in:
JailDesigner committed 2026-04-24 11:15:32 +02:00
1 parent dc8a7723e3
commit 6c1c042637
4 files changed
+17 -8

No files matched your search

+3 -6
View File
@@ -9,14 +9,11 @@ Checks:
- -bugprone-easily-swappable-parameters
- -bugprone-narrowing-conversions
- -modernize-avoid-c-arrays,-warnings-as-errors
# Fals positius recurrents en codi C de tercers dins source/external/.
# Fals positiu recurrent en codi C de tercers (source/external/stb_vorbis.c).
# HeaderFilterRegex no aplica a clang-analyzer-*, així que cal desactivar
# explícitament. El primer: inferència sobre variables locals de legacy C
# (stb_vorbis.c). El segon: ús de malloc() a stb_image_write.h, que
# l'analitzador marca com a possible "size=0" en rutes que a la pràctica
# no es donen.
# explícitament. El check d'inferència sobre variables locals de legacy C
# genera reports que no reflecteixen bugs reals.
- -clang-analyzer-core.UndefinedBinaryOperatorResult
- -clang-analyzer-optin.portability.UnixAPI
WarningsAsErrors: '*'
# Headers nostres (excloem source/external/ que conté dependències de tercers no editables)
+1
View File
@@ -68,6 +68,7 @@ set(APP_SOURCES
source/core/rendering/render_info.cpp
source/core/rendering/gif.cpp
source/core/rendering/screenshot.cpp
source/external/stb_image_write_impl.cpp
source/core/rendering/surface.cpp
source/core/rendering/text.cpp
source/core/rendering/sprite/sprite.cpp
-2
View File
@@ -7,7 +7,6 @@
#include <string>
#include <vector>
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "external/stb_image_write.h"
namespace Screenshot {
@@ -43,7 +42,6 @@ namespace Screenshot {
const std::uint32_t B = P & 0xFF;
buffer[i] = R | (G << 8) | (B << 16) | (A << 24);
}
// NOLINTNEXTLINE(clang-analyzer-optin.portability.UnixAPI) — fals positiu dins de stb_image_write
return stbi_write_png(filepath.c_str(), width, height, 4, buffer, width * 4) != 0;
}
+13
View File
@@ -0,0 +1,13 @@
// Unitat de compilació aïllada per a la implementació de stb_image_write.
// Viu dins de source/external/ perquè el `.clang-tidy` d'aquesta carpeta
// desactiva tots els checks (com fa per stb_vorbis.c) i el pre-commit hook
// ja filtra aquesta ruta de clang-format / clang-tidy. Així els fals
// positius de clang-analyzer-* dins de codi de tercers no afecten el
// nostre codi, que continua tenint tots els checks actius.
//
// La resta del codi inclou només el header (sense la macro d'implementació),
// que queda només amb declaracions — clang-analyzer no pot trobar cap bug
// dins d'una declaració, així que l'inclusió és innòcua.
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "external/stb_image_write.h"