testsAndMisc-archive/C/imageViewer/LINTING.md
Krzysztof kuhy Rudnicki ee41f014b2 chore: optimize pre-commit, remove tracked binaries, fix lint issues
- Move slow hooks (mypy, pylint, bandit, pytest, prettier) to pre-push stage
- Remove redundant autoflake (ruff covers F401/F841)
- Fix shellcheck OOM by batching files with xargs -n 40
- Remove tracked .o, .wav, .pyc binaries from git
- Move pomodoro wav files to ../testsAndMisc_binaries/ with symlinks
- Add *.o, *.so, *.a to .gitignore
- Refactor hltb._pick_best_hltb_entry to fix C901/PLR0911/SIM102
- Fix SC2034 warnings in gif_to_square.sh and upgrade.sh
- Add disk_cleanup_check.sh script
- Various test and code improvements across screen_locker,
  steam_backlog_enforcer, word_frequency, moviepy_showcase
2026-04-10 18:48:37 +02:00

138 lines
3.0 KiB
Markdown

# C Language Linter Setup for imageViewer Project
This directory contains a comprehensive linting setup for the imageViewer C project.
## Tools Included
### 1. **clang-tidy** - Static Analysis
- Configuration: `.clang-tidy`
- Checks for bugs, performance issues, and style violations
- Enforces modern C coding standards
### 2. **clang-format** - Code Formatting
- Configuration: `.clang-format`
- Automatically formats code to consistent style
- 100-character line limit, 4-space indentation
### 3. **cppcheck** - Additional Static Analysis
- Detects memory leaks, null pointer dereferences
- Checks for undefined behavior
### 4. **gcc with warnings** - Compiler Analysis
- Comprehensive warning flags
- Standards compliance checking
## Usage
### Quick Start
```bash
# Install dependencies (Arch Linux)
make deps-arch
# Run all lint checks
make lint
# Format code
make format
# Run all checks
make check
# Check for memory leaks
make memcheck
```
### Individual Commands
```bash
# Manual linting
./lint.sh
# Format specific file
clang-format -i main.c
# Run clang-tidy
clang-tidy main.c -- -I/usr/include/SDL2 -D_REENTRANT
# Run cppcheck
cppcheck --enable=all main.c
```
## VS Code Integration
The `.vscode/settings.json` file provides:
- Automatic formatting on save
- C99 standard compliance
- IntelliSense configuration for SDL2
- Integrated linting with clang-tidy and cppcheck
## Recommended Extensions for VS Code
- C/C++ (Microsoft)
- clang-tidy (mine-cetinkaya-fianso)
- cppcheck (unixwrapped)
## Linting Rules
### Enabled Checks
- **clang-diagnostic-\***: Compiler diagnostics
- **clang-analyzer-\***: Static analysis
- **bugprone-\***: Bug-prone patterns
- **cert-\***: CERT secure coding standards
- **misc-\***: Miscellaneous checks
- **performance-\***: Performance improvements
- **portability-\***: Cross-platform issues
- **readability-\***: Code readability
### Disabled Checks
- `readability-magic-numbers`: Allows constants like window dimensions
- `cert-err33-c`: Allows ignoring some function return values
- `misc-unused-parameters`: Common in callback functions
## Code Quality Workflow
1. **Write Code**: Develop features in `main.c`
2. **Lint**: Run `make lint` to check for issues
3. **Format**: Run `make format` to fix formatting
4. **Build**: Run `make` to compile
5. **Test**: Run `make test` with sample images
6. **Memory Check**: Run `make memcheck` for leak detection
## Configuration Files
- `.clang-tidy`: Static analysis rules
- `.clang-format`: Code formatting style
- `.vscode/settings.json`: VS Code integration
- `lint.sh`: Comprehensive linting script
- `Makefile`: Build and quality targets
## Installation on Different Systems
### Arch Linux
```bash
sudo pacman -S clang cppcheck valgrind
```
### Ubuntu/Debian
```bash
sudo apt install clang-tidy cppcheck clang-format valgrind
```
### Fedora/RHEL
```bash
sudo dnf install clang-tools-extra cppcheck clang valgrind
```
This setup ensures high code quality, consistency, and helps catch potential issues early in development.