| --- | |
| title: C++ Code Formatting Specification | |
| language: en | |
| description: "Apache Doris C++ code formatting: clang-format tool configuration and usage from the command line and IDE." | |
| keywords: | |
| - Apache Doris | |
| - C++ code formatting | |
| - clang-format | |
| - LDB toolchain | |
| - Clion | |
| - VS Code | |
| - BE development | |
| --- | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The ASF licenses this file | |
| to you under the Apache License, Version 2.0 (the | |
| "License"); you may not use this file except in compliance | |
| with the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, | |
| software distributed under the License is distributed on an | |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations | |
| under the License. | |
| --> | |
| # C++ Code Formatting Specification | |
| <!-- Knowledge type: Code specification --> | |
| <!-- Applicable scenario: BE development / Pull Request submission --> | |
| Apache Doris uses `clang-format` to format C++ code, and provides wrapper scripts under the `build-support` directory so that developers can unify the format before submitting code. | |
| ## Wrapper Scripts | |
| | Script | Purpose | | |
| |------|------| | |
| | `build-support/clang-format.sh` | Formats C/C++ code under `be/src` and `be/test` | | |
| | `build-support/check-format.sh` | Checks the code format of `be/src` and `be/test` and prints the diff without modifying any files | | |
| ## Code Style Customization | |
| - The Apache Doris code style is based on Google Style with minor customizations. The configuration file `.clang-format` is located at the Doris root directory. | |
| - `.clang-format` is compatible with `clang-format-16.0.0` and later. | |
| - The `.clang-format-ignore` file lists code that should not be formatted, typically third-party libraries that should keep their original style. | |
| ## Environment Setup | |
| You need to install `clang-format`, or use a `clang-format` plugin provided by your IDE/editor. Doris currently uses `clang-format 16` for code formatting (different versions of `clang-format` may produce different results). | |
| ### Install clang-format | |
| | System | Recommended approach | | |
| |------|---------| | |
| | Linux | Use the [LDB toolchain](/community/source-install/compilation-with-ldb-toolchain) (which already includes the matching version), or build/install the binary yourself | | |
| | macOS | `brew install clang-format@16` | | |
| LDB toolchain notes: the latest version (>= v0.18) already includes a prebuilt `clang-format 16.0.0` binary. For downloads, see [ldb_toolchain_gen Releases](https://github.com/amosbird/ldb_toolchain_gen/releases). | |
| ### Use an IDE Plugin | |
| | IDE | Plugin | Notes | | |
| |-----|------|---------| | |
| | CLion | `ClangFormat` (search and download under `File -> Setting -> Plugins`) | Make sure the `clang-format` version is 16 | | |
| | VS Code | `Clang-Format` extension | You need to manually specify the path to the `clang-format` executable | | |
| ## Usage | |
| ### Run from the Command Line | |
| 1. Enter the Doris root directory: | |
| ```bash | |
| cd ${DORIS_HOME} | |
| ``` | |
| 2. Run the formatting script: | |
| ```bash | |
| build-support/clang-format.sh | |
| ``` | |
| > Note: the `clang-format.sh` script requires Python 3 to be installed on the machine. | |
| ### Use clang-format in CLion | |
| After installing the `ClangFormat` plugin, click `Reformat Code` to format the current file. | |
| ### Use clang-format in VS Code | |
| 1. Install the `Clang-Format` extension. | |
| 2. Open the VS Code settings page, search for `clang_format`, and fill in the following configuration: | |
| ```json | |
| { | |
| "clang_format_path": "$clang-format path$", | |
| "clang_format_style": "file" | |
| } | |
| ``` | |
| 3. Right-click and select `Format Document` to format the file. | |
| ## FAQ | |
| **Q: Will different `clang-format` versions cause inconsistent formatting?** | |
| Yes. Use the `clang-format 16` series strictly, otherwise the format may not match what the project expects and CI may fail. | |
| **Q: Will third-party code also be formatted?** | |
| No. Directories listed in `.clang-format-ignore` are skipped, so that third-party dependencies keep their original code style. |