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:
1 parent
dc8a7723e3
commit
6c1c042637
4 files changed
+17
-8
No files matched your search
+3
-6
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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"
|
||||
Reference in new issue
Block a user