From 6e3cd05cd2d66f87aabcdba6578e80e7114abac4 Mon Sep 17 00:00:00 2001 From: Sergio Date: Fri, 7 Nov 2025 17:01:29 +0100 Subject: [PATCH] cppcheck --- source/core/input/input.cpp | 2 +- .../core/rendering/opengl/opengl_shader.cpp | 2 +- source/core/rendering/screen.cpp | 7 +- source/core/rendering/surface.cpp | 2 +- source/core/rendering/surface.hpp | 2 +- source/core/resources/resource.cpp | 16 +-- source/core/system/director.hpp | 2 +- source/game/scenes/title.cpp | 3 + tools/linter/cppcheck-result-all.txt | 0 .../linter/cppcheck-result-unusedFunction.txt | 0 ...check-result-warning-style-performance.txt | 0 tools/linter/run_cppcheck.sh | 131 +++++++++++++++--- 12 files changed, 129 insertions(+), 38 deletions(-) delete mode 100644 tools/linter/cppcheck-result-all.txt delete mode 100644 tools/linter/cppcheck-result-unusedFunction.txt delete mode 100644 tools/linter/cppcheck-result-warning-style-performance.txt diff --git a/source/core/input/input.cpp b/source/core/input/input.cpp index d21b5d5e..2de032ed 100644 --- a/source/core/input/input.cpp +++ b/source/core/input/input.cpp @@ -51,7 +51,7 @@ void Input::applyGamepadBindingsFromOptions() { } // Obtener el primer gamepad conectado - auto& gamepad = gamepads_[0]; + const auto& gamepad = gamepads_[0]; // Aplicar bindings desde Options // Los valores pueden ser: diff --git a/source/core/rendering/opengl/opengl_shader.cpp b/source/core/rendering/opengl/opengl_shader.cpp index 9d123525..1460a507 100644 --- a/source/core/rendering/opengl/opengl_shader.cpp +++ b/source/core/rendering/opengl/opengl_shader.cpp @@ -201,7 +201,7 @@ void OpenGLShader::createQuadGeometry() { checkGLError("glVertexAttribPointer(position)"); // Atributo 1: Coordenadas de textura (2 floats) - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float))); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), reinterpret_cast(2 * sizeof(float))); glEnableVertexAttribArray(1); checkGLError("glVertexAttribPointer(texcoord)"); diff --git a/source/core/rendering/screen.cpp b/source/core/rendering/screen.cpp index e30a6a25..a3b741de 100644 --- a/source/core/rendering/screen.cpp +++ b/source/core/rendering/screen.cpp @@ -39,7 +39,9 @@ auto Screen::get() -> Screen* { // Constructor Screen::Screen() - : palettes_(Asset::get()->getListByType(Asset::Type::PALETTE)) { + : window_width_(0), + window_height_(0), + palettes_(Asset::get()->getListByType(Asset::Type::PALETTE)) { // Arranca SDL VIDEO, crea la ventana y el renderizador initSDLVideo(); if (Options::video.fullscreen) { @@ -456,11 +458,10 @@ void Screen::initShaders() { // Obtiene información sobre la pantalla void Screen::getDisplayInfo() { - int i; int num_displays = 0; SDL_DisplayID* displays = SDL_GetDisplays(&num_displays); if (displays != nullptr) { - for (i = 0; i < num_displays; ++i) { + for (int i = 0; i < num_displays; ++i) { SDL_DisplayID instance_id = displays[i]; const char* name = SDL_GetDisplayName(instance_id); diff --git a/source/core/rendering/surface.cpp b/source/core/rendering/surface.cpp index 74f97882..9e0f63c8 100644 --- a/source/core/rendering/surface.cpp +++ b/source/core/rendering/surface.cpp @@ -138,7 +138,7 @@ void Surface::loadPalette(const std::string& file_path) { } // Carga una paleta desde otra paleta -void Surface::loadPalette(Palette palette) { +void Surface::loadPalette(const Palette& palette) { palette_ = palette; } diff --git a/source/core/rendering/surface.hpp b/source/core/rendering/surface.hpp index 51982251..7f96914f 100644 --- a/source/core/rendering/surface.hpp +++ b/source/core/rendering/surface.hpp @@ -74,7 +74,7 @@ class Surface { // Carga una paleta desde un archivo void loadPalette(const std::string& file_path); - void loadPalette(Palette palette); + void loadPalette(const Palette& palette); // Copia una región de la SurfaceData de origen a la SurfaceData de destino void render(float dx, float dy, float sx, float sy, float w, float h); diff --git a/source/core/resources/resource.cpp b/source/core/resources/resource.cpp index 4dc43b46..a7266023 100644 --- a/source/core/resources/resource.cpp +++ b/source/core/resources/resource.cpp @@ -35,8 +35,8 @@ void Resource::destroy() { delete Resource::resource; } auto Resource::get() -> Resource* { return Resource::resource; } // Constructor -Resource::Resource() { - loading_text_ = Screen::get()->getText(); +Resource::Resource() + : loading_text_(Screen::get()->getText()) { load(); } @@ -353,9 +353,9 @@ void Resource::createText() { {"subatomic", "subatomic.gif", "subatomic.txt"}, {"8bithud", "8bithud.gif", "8bithud.txt"}}; - for (const auto& resource : resources) { - texts_.emplace_back(resource.key, std::make_shared(getSurface(resource.texture_file), getTextFile(resource.text_file))); - printWithDots("Text : ", resource.key, "[ DONE ]"); + for (const auto& res_info : resources) { + texts_.emplace_back(res_info.key, std::make_shared(getSurface(res_info.texture_file), getTextFile(res_info.text_file))); + printWithDots("Text : ", res_info.key, "[ DONE ]"); } } @@ -415,7 +415,7 @@ void Resource::renderProgress() { Screen::get()->clearSurface(static_cast(PaletteColor::BLACK)); auto surface = Screen::get()->getRendererSurface(); - const auto TEXT_COLOR = static_cast(PaletteColor::BRIGHT_WHITE); + const auto LOADING_TEXT_COLOR = static_cast(PaletteColor::BRIGHT_WHITE); const auto BAR_COLOR = static_cast(PaletteColor::WHITE); const int TEXT_HEIGHT = loading_text_->getCharacterSize(); const int CENTER_X = Options::game.width / 2; @@ -427,7 +427,7 @@ void Resource::renderProgress() { CENTER_X - (loading_text_->lenght(APP_NAME) / 2), CENTER_Y - TEXT_HEIGHT, APP_NAME, - TEXT_COLOR); + LOADING_TEXT_COLOR); // Draw VERSION centered below center const std::string VERSION_TEXT = "(" + std::string(Version::GIT_HASH) + ")"; @@ -435,7 +435,7 @@ void Resource::renderProgress() { CENTER_X - (loading_text_->lenght(VERSION_TEXT) / 2), CENTER_Y + TEXT_HEIGHT, VERSION_TEXT, - TEXT_COLOR); + LOADING_TEXT_COLOR); // Draw progress bar border const float WIRED_BAR_WIDTH = Options::game.width - (X_PADDING * 2); diff --git a/source/core/system/director.hpp b/source/core/system/director.hpp index 167c8029..4944e9bc 100644 --- a/source/core/system/director.hpp +++ b/source/core/system/director.hpp @@ -7,7 +7,7 @@ class Director { public: - Director(std::vector const& args); // Constructor + explicit Director(std::vector const& args); // Constructor ~Director(); // Destructor static auto run() -> int; // Bucle principal diff --git a/source/game/scenes/title.cpp b/source/game/scenes/title.cpp index 3b49d5e8..ee09cff9 100644 --- a/source/game/scenes/title.cpp +++ b/source/game/scenes/title.cpp @@ -41,6 +41,9 @@ Title::Title() axis_cooldown_(0.0F), remap_completed_(false) { // Inicializa variables + temp_keys_[0] = temp_keys_[1] = temp_keys_[2] = SDL_SCANCODE_UNKNOWN; + temp_buttons_[0] = temp_buttons_[1] = temp_buttons_[2] = -1; + state_ = SceneManager::options == SceneManager::Options::TITLE_WITH_LOADING_SCREEN ? State::SHOW_LOADING_SCREEN : State::MAIN_MENU; SceneManager::current = SceneManager::Scene::TITLE; SceneManager::options = SceneManager::Options::NONE; diff --git a/tools/linter/cppcheck-result-all.txt b/tools/linter/cppcheck-result-all.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/tools/linter/cppcheck-result-unusedFunction.txt b/tools/linter/cppcheck-result-unusedFunction.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/tools/linter/cppcheck-result-warning-style-performance.txt b/tools/linter/cppcheck-result-warning-style-performance.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/tools/linter/run_cppcheck.sh b/tools/linter/run_cppcheck.sh index 57c1551a..36ca572e 100755 --- a/tools/linter/run_cppcheck.sh +++ b/tools/linter/run_cppcheck.sh @@ -1,5 +1,55 @@ #!/bin/bash +# ============================================================================ +# CONFIGURACIÓN - Editar estas constantes para personalizar el script +# ============================================================================ + +# Detectar la ubicación del script y la raíz del proyecto +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" + +# Rutas del proyecto +DEFAULT_ANALYSIS_PATH="$PROJECT_ROOT/source" +INCLUDE_PATH="$PROJECT_ROOT/source" +SUPPRESSIONS_FILE="$SCRIPT_DIR/cppcheck_suppressions" +OUTPUT_DIR="$SCRIPT_DIR" +BUILD_DIR="$PROJECT_ROOT/build" +COMPILE_COMMANDS="$BUILD_DIR/compile_commands.json" + +# Parámetros de compilación comunes (fallback para análisis de archivos específicos) +CPPCHECK_STD="--std=c++20" + +# Calcular número de threads (cores - 1, mínimo 1) +THREADS=$(($(nproc) - 1)) +[[ $THREADS -lt 1 ]] && THREADS=1 + +# ============================================================================ + +# Función para asegurar que compile_commands.json existe +ensure_compile_commands() { + if [[ ! -f "$COMPILE_COMMANDS" ]]; then + echo "⚠ compile_commands.json no encontrado en $BUILD_DIR" + echo "Generando compile_commands.json con CMake..." + + # Crear directorio build si no existe + mkdir -p "$BUILD_DIR" + + # Ejecutar CMake para generar compile_commands.json + (cd "$BUILD_DIR" && cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. > /dev/null 2>&1) + + if [[ ! -f "$COMPILE_COMMANDS" ]]; then + echo "❌ Error: No se pudo generar compile_commands.json" + echo "Por favor, ejecuta manualmente:" + echo " cd $BUILD_DIR && cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .." + exit 1 + fi + + echo "✓ compile_commands.json generado exitosamente" + else + echo "✓ Usando compile_commands.json existente: $COMPILE_COMMANDS" + fi +} + # Función para mostrar el uso del script mostrar_uso() { echo "Uso: $0 [OPCIÓN] [RUTA]" @@ -10,7 +60,7 @@ mostrar_uso() { echo " -u, --unused Ejecutar cppcheck para unusedFunction" echo "" echo "Opciones de ruta:" - echo " -p, --path Especificar ruta a analizar (default: ../source/)" + echo " -p, --path Especificar ruta a analizar (default: PROJECT_ROOT/source)" echo " [RUTA] Ruta como último argumento posicional" echo "" echo "Ejemplos:" @@ -22,7 +72,7 @@ mostrar_uso() { # Inicializar las variables opcion="" -ruta="../source/" +ruta="$DEFAULT_ANALYSIS_PATH" # Procesar las opciones while [[ $# -gt 0 ]]; do @@ -76,30 +126,67 @@ fi # Ejecutar según la opción seleccionada case $opcion in warning) - echo "Ejecutando cppcheck con warning, style, performance en: $ruta" - cppcheck --force --enable=warning,style,performance --std=c++20 \ - --check-level=exhaustive \ - --suppressions-list=./cppcheck_suppressions \ - "$ruta" \ - 2>./cppcheck-result-warning-style-performance.txt - echo "Resultados guardados en: ./cppcheck-result-warning-style-performance.txt" + ensure_compile_commands + if [[ "$ruta" == "$DEFAULT_ANALYSIS_PATH" ]]; then + echo "Ejecutando cppcheck con warning, style, performance en proyecto completo (usando $THREADS threads)" + cppcheck --force --enable=warning,style,performance \ + --check-level=exhaustive \ + -j$THREADS \ + --project="$COMPILE_COMMANDS" \ + --suppressions-list="$SUPPRESSIONS_FILE" \ + 2>"$OUTPUT_DIR/cppcheck-result-warning-style-performance.txt" + else + echo "Ejecutando cppcheck con warning, style, performance en: $ruta (usando $THREADS threads)" + cppcheck --force --enable=warning,style,performance $CPPCHECK_STD \ + --check-level=exhaustive \ + -j$THREADS \ + -I "$INCLUDE_PATH" \ + --suppressions-list="$SUPPRESSIONS_FILE" \ + "$ruta" \ + 2>"$OUTPUT_DIR/cppcheck-result-warning-style-performance.txt" + fi + echo "Resultados guardados en: $OUTPUT_DIR/cppcheck-result-warning-style-performance.txt" ;; all) - echo "Ejecutando cppcheck con todas las opciones en: $ruta" - cppcheck --force --enable=all -I /usr/include --std=c++20 \ - --suppress=missingIncludeSystem \ - --suppressions-list=./cppcheck_suppressions \ - "$ruta" \ - 2>./cppcheck-result-all.txt - echo "Resultados guardados en: ./cppcheck-result-all.txt" + ensure_compile_commands + if [[ "$ruta" == "$DEFAULT_ANALYSIS_PATH" ]]; then + echo "Ejecutando cppcheck con todas las opciones en proyecto completo (usando $THREADS threads)" + cppcheck --force --enable=all \ + -j$THREADS \ + --project="$COMPILE_COMMANDS" \ + --suppress=missingIncludeSystem \ + --suppressions-list="$SUPPRESSIONS_FILE" \ + 2>"$OUTPUT_DIR/cppcheck-result-all.txt" + else + echo "Ejecutando cppcheck con todas las opciones en: $ruta (usando $THREADS threads)" + cppcheck --force --enable=all -I /usr/include -I "$INCLUDE_PATH" $CPPCHECK_STD \ + -j$THREADS \ + --suppress=missingIncludeSystem \ + --suppressions-list="$SUPPRESSIONS_FILE" \ + "$ruta" \ + 2>"$OUTPUT_DIR/cppcheck-result-all.txt" + fi + echo "Resultados guardados en: $OUTPUT_DIR/cppcheck-result-all.txt" ;; unused) - echo "Ejecutando cppcheck para unusedFunction en: $ruta" - cppcheck --enable=style --std=c++20 \ - --suppressions-list=./cppcheck_suppressions \ - "$ruta" \ - 2>./cppcheck-result-unusedFunction.txt - echo "Resultados guardados en: ./cppcheck-result-unusedFunction.txt" + ensure_compile_commands + if [[ "$ruta" == "$DEFAULT_ANALYSIS_PATH" ]]; then + echo "Ejecutando cppcheck para unusedFunction en proyecto completo (usando $THREADS threads)" + cppcheck --enable=style \ + -j$THREADS \ + --project="$COMPILE_COMMANDS" \ + --suppressions-list="$SUPPRESSIONS_FILE" \ + 2>"$OUTPUT_DIR/cppcheck-result-unusedFunction.txt" + else + echo "Ejecutando cppcheck para unusedFunction en: $ruta (usando $THREADS threads)" + cppcheck --enable=style $CPPCHECK_STD \ + -j$THREADS \ + -I "$INCLUDE_PATH" \ + --suppressions-list="$SUPPRESSIONS_FILE" \ + "$ruta" \ + 2>"$OUTPUT_DIR/cppcheck-result-unusedFunction.txt" + fi + echo "Resultados guardados en: $OUTPUT_DIR/cppcheck-result-unusedFunction.txt" ;; *) echo "Error: Opción inválida"