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-easily-swappable-parameters
|
||||||
- -bugprone-narrowing-conversions
|
- -bugprone-narrowing-conversions
|
||||||
- -modernize-avoid-c-arrays,-warnings-as-errors
|
- -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
|
# HeaderFilterRegex no aplica a clang-analyzer-*, així que cal desactivar
|
||||||
# explícitament. El primer: inferència sobre variables locals de legacy C
|
# explícitament. El check d'inferència sobre variables locals de legacy C
|
||||||
# (stb_vorbis.c). El segon: ús de malloc() a stb_image_write.h, que
|
# genera reports que no reflecteixen bugs reals.
|
||||||
# l'analitzador marca com a possible "size=0" en rutes que a la pràctica
|
|
||||||
# no es donen.
|
|
||||||
- -clang-analyzer-core.UndefinedBinaryOperatorResult
|
- -clang-analyzer-core.UndefinedBinaryOperatorResult
|
||||||
- -clang-analyzer-optin.portability.UnixAPI
|
|
||||||
|
|
||||||
WarningsAsErrors: '*'
|
WarningsAsErrors: '*'
|
||||||
# Headers nostres (excloem source/external/ que conté dependències de tercers no editables)
|
# 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/render_info.cpp
|
||||||
source/core/rendering/gif.cpp
|
source/core/rendering/gif.cpp
|
||||||
source/core/rendering/screenshot.cpp
|
source/core/rendering/screenshot.cpp
|
||||||
|
source/external/stb_image_write_impl.cpp
|
||||||
source/core/rendering/surface.cpp
|
source/core/rendering/surface.cpp
|
||||||
source/core/rendering/text.cpp
|
source/core/rendering/text.cpp
|
||||||
source/core/rendering/sprite/sprite.cpp
|
source/core/rendering/sprite/sprite.cpp
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
|
||||||
#include "external/stb_image_write.h"
|
#include "external/stb_image_write.h"
|
||||||
|
|
||||||
namespace Screenshot {
|
namespace Screenshot {
|
||||||
@@ -43,7 +42,6 @@ namespace Screenshot {
|
|||||||
const std::uint32_t B = P & 0xFF;
|
const std::uint32_t B = P & 0xFF;
|
||||||
buffer[i] = R | (G << 8) | (B << 16) | (A << 24);
|
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;
|
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