| --- |
| 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. |