blob: a48f5718fdc1f023cecc988c18265f5846c23bb5 [file] [view]
---
title: C++ Static Code Analysis
language: en
description: "Apache Doris C++ static code analysis: Clang-Tidy and Clangd configuration (including VSCode integration)."
keywords:
- Apache Doris
- C++ static analysis
- Clang-Tidy
- Clangd
- VSCode
- LDB toolchain
- compile_commands.json
---
<!--
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++ Static Code Analysis
<!-- Knowledge type: Code conventions -->
<!-- Applicable scenarios: BE development / Code quality checks -->
Apache Doris supports static analysis of C++ code with [Clangd](https://clangd.llvm.org/) and [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/). Both are bundled in the [LDB-toolchain](/community/source-install/compilation-with-ldb-toolchain), and you can also install or build them yourself.
## Tool Comparison
| Tool | Purpose | Configuration file |
|------|---------|--------------------|
| Clangd | Provides IDE capabilities such as code navigation, completion, and hover hints | Passed in via `clangd.arguments` |
| Clang-Tidy | Static analysis and code quality checks (can be invoked by Clangd) | `.clang-tidy` in the Doris root directory |
Compared with `vscode-cpptools`, Clangd offers more accurate code navigation and integrates the diagnostics and quick-fix features of Clang-Tidy.
## Clang-Tidy Configuration
Clang-Tidy check rules are centralized in the `.clang-tidy` file in the Doris root directory. You can enable or disable specific checks by editing this file.
## Configuring Clangd in VSCode
<!-- Knowledge type: Tool usage -->
### Steps
1. Install the `clangd` plugin.
2. Before use, compile `be(RELEASE)` and `be-ut(ASAN)` once to generate the corresponding `compile_commands.json` files.
3. Edit `settings.json` or change the plugin configuration directly in Preferences.
### Configuration Example
```json
{
"clangd.path": "ldb_toolchain/bin/clangd",
"clangd.arguments": [
"--background-index",
"--clang-tidy",
"--compile-commands-dir=doris/be/build_Release/",
"--completion-style=detailed",
"-j=5",
"--all-scopes-completion",
"--pch-storage=memory",
"--pretty",
"--query-driver=ldb_toolchain/bin/*"
],
"clangd.trace": "output/clangd-server.log"
}
```
### Key Parameters
| Parameter | Description |
|-----------|-------------|
| `clangd.path` | Path to the Clangd executable |
| `--background-index` | Indexes the entire project in the background to speed up symbol lookup |
| `--clang-tidy` | Enables Clang-Tidy static checks |
| `--compile-commands-dir` | Specifies the directory containing `compile_commands.json` |
| `--completion-style=detailed` | Shows detailed information during completion |
| `-j=5` | Number of parallel jobs Clangd uses to analyze files |
| `--query-driver` | Path to the compiler, used to resolve system header files |
## FAQ
**Q: How do I troubleshoot `clangd` when it reports a missing header file or symbol?**
Confirm that BE has been compiled at least once to generate `compile_commands.json`, and that `--compile-commands-dir` points to the correct directory.