be-code-style
Fix BE (C++) code formatting issues using clang-format
Source facts
- Repository
- apache/doris
- Last source activity
- June 1, 2026 at 09:10
- Detected SKILL.md language
- English
- Stars
- 16,090
- Forks
- 3,981
Install options
The review-first prompt is selected by default. You can switch to a direct command or download a local copy.
Review the source files
Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.
Showing SKILL.md
SKILL.md
Source instructions · Read-only preview- name
- be-code-style
- description
- Fix BE (C++) code formatting issues using clang-format
- compatibility
- opencode
## What I do
Fix C++ code formatting issues in the BE and Cloud modules using the project's clang-format configuration (v16).
## When to use me
- Before committing BE/Cloud C++ code changes
- When CI reports clang-format failures
- When you need to check or fix C++ code style
## Prerequisites
You need to confirm that the major version of the called clang-format is 16. If the current environment's default does not meet this requirement, try the following:
1. If `.vscode/settings.json` exists, use the clang-format.executable item in it.
2. If it is a worktree directory, use the `.vscode/settings.json` from the main directory.
3. Check the path to the compiler toolchain by trying to find it from the `PATH` environment variable, the current directory, and the main directory's `custom_env.sh`. Look for a clang-format with the major version number 16 in that path and its parent directory.
## Procedure
### Step 1: Auto-fix formatting
Run the project's formatting script, which enforces clang-format v16:
```bash
build-support/clang-format.sh
```
This formats all C++ files under `be/src`, `be/test`, `cloud/src`, `cloud/test` in-place, respecting `.clang-format` and `.clang-format-ignore`.
**Important**: Always use this script instead of invoking `clang-format` directly. The script checks that clang-format version 16 is installed and exits with an error if the wrong version is found. Using a different version will produce inconsistent formatting.
### Step 2: Check-only (no modification)
To verify formatting without modifying files:
```bash
build-support/check-format.sh
```
This outputs a diff of any formatting violations and exits non-zero if there are any.
### Step 3: Review and commit
After running `clang-format.sh`, review the changes with `git diff` to verify only formatting was changed, then stage and commit.
## Key Configuration
| File | Purpose |
|------|---------|
| `.clang-format` | Main formatting rules (Google-based, 100 col, 4-space indent) |
| `.clang-format-ignore` | Files excluded from formatting (third-party, generated) |
| `build-support/run_clang_format.py` | Python wrapper for parallel execution |
## Excluded Directories
The following are excluded from formatting (see `.clang-format-ignore`):
- `be/src/apache-orc/*`, `be/src/clucene/*`, `be/src/gutil/*`
- `be/src/glibc-compatibility/*`
- Specific third-party vendored files (mustache, sse2neon, utf8_check)
- `cloud/src/common/defer.h`
## Troubleshooting
| Problem | Solution |
|---------|----------|
| `clang-format not found` | Install clang-format v16 or set `CLANG_FORMAT_BINARY` env var |
| `version is not 16` | Install clang-format v16; on macOS: `brew install llvm@16` |
| Files not being formatted | Check `.clang-format-ignore` for exclusions |
View on GitHub