2025-07-16 05:16:22 +02:00

103 lines
4.1 KiB
Markdown

# Spine Runtimes Code Formatters
This directory contains formatting scripts and tools to ensure consistent code style across all Spine runtime implementations.
## Scripts
### format-cpp.sh
Formats C/C++ source files using clang-format.
- **Prerequisites**: clang-format 18.1.8
- **Coverage**: All C/C++ files in spine-cpp, spine-c, spine-godot, spine-ue, spine-glfw, spine-sdl, spine-sfml, spine-cocos2dx, spine-ios, spine-flutter
- **Configuration**: Uses .clang-format configuration file
- **Behavior**: Batches all files in a single clang-format call for performance
### format-csharp.sh
Formats C# source files using dotnet format.
- **Prerequisites**: .NET SDK with dotnet format tool
- **Coverage**: All C# files in spine-csharp, spine-monogame, spine-unity
- **Configuration**: Uses .editorconfig (temporarily copied to each project)
- **Behavior**: Runs with --no-restore and --verbosity quiet to suppress warnings
### format-dart.sh
Formats Dart source files using dart format.
- **Prerequisites**: Dart SDK
- **Coverage**: All Dart files in spine-flutter
- **Configuration**: Uses --page-width 120 parameter
- **Behavior**: Formats all files in place
### format-haxe.sh
Formats Haxe source files using haxelib formatter.
- **Prerequisites**: Haxe and haxelib formatter package
- **Coverage**: All Haxe files in spine-haxe
- **Configuration**: Uses hxformat.json configuration file
- **Behavior**: Formats all files in place
### format-java.sh
Formats Java source files using a custom Eclipse formatter.
- **Prerequisites**: Java JDK and Maven
- **Coverage**: All Java files in spine-libgdx and spine-android
- **Configuration**: Uses eclipse-formatter.xml configuration file
- **Behavior**: Builds Eclipse formatter JAR if needed, only outputs changed files
### format-ts.sh
Formats TypeScript source files using typescript-formatter.
- **Prerequisites**: Node.js and npm
- **Coverage**: All TypeScript files in spine-ts and tests
- **Configuration**: Uses tsfmt.json configuration files
- **Behavior**: Uses npx to auto-download formatter, validates tsfmt.json consistency
### setup-clang-format-docker.sh
Helper script for GitHub Actions to set up clang-format via Docker.
- **Prerequisites**: Docker
- **Purpose**: Creates a wrapper script that runs clang-format 18.1.8 in a Docker container
- **Usage**: Called by GitHub Actions workflow to ensure version consistency
## Configuration Files
- **.clang-format**: C/C++ formatting rules
- **.editorconfig**: C# formatting rules
- **eclipse-formatter.xml**: Java formatting rules for Eclipse formatter
- **hxformat.json**: Haxe formatting rules
## Eclipse Formatter
The eclipse-formatter directory contains a Maven project that builds a standalone Eclipse code formatter:
- **Source**: eclipse-formatter/src/main/java/com/esotericsoftware/spine/formatter/EclipseFormatter.java
- **Build**: Automatically built by format-java.sh when the JAR doesn't exist or source is newer
- **Output**: Only prints files that were actually modified
## GitHub Actions Workflow
The formatting check runs automatically on push and can be triggered manually:
1. **Workflow file**: .github/workflows/format-check-new.yml
2. **Process**:
- Sets up all required formatters and dependencies
- Runs all format scripts
- Captures any file changes to format-diff.txt
- Uploads diff as artifact
- Fails if any files were modified
### Docker-based clang-format
To ensure consistent formatting across local development and CI, the workflow uses Docker to run clang-format 18.1.8. The setup-clang-format-docker.sh script creates a wrapper that:
- Mounts the project directory in the Docker container
- Converts relative paths to absolute paths
- Runs clang-format with the same version everywhere
## Local Development
To run formatters locally:
```bash
cd formatters
./format-cpp.sh # Format C/C++ files
./format-csharp.sh # Format C# files
./format-dart.sh # Format Dart files
./format-haxe.sh # Format Haxe files
./format-java.sh # Format Java files
./format-ts.sh # Format TypeScript files
./format.sh # Format everything
```
Ensure you have the required tools installed for each formatter you want to run.