代码自动提示:CLANGD VSCODE入门

引言

在现代软件开发中,智能提示可以极大提高代码编写的效率。然而,随着项目的复杂性增加,很多智能提示可能无法有效跳转。为了解决这个问题,我们可以使用LLVM的Clangd与compile_commands.json结合来改善这一体验。

1. Clangd简介

Clangd是LLVM项目中的一部分,它为C/C++提供了强大的代码分析和智能提示功能。它相较于GCC的G++,更像是一个前端工具,主要负责代码解析和语义分析。关于Clangd的详细信息和安装指南,可以访问它的官方网页

2. 生成compile_commands.json

在Clangd的官方网页中,推荐使用一个名为bazel-compile-commands-extractor的插件来生成compile_commands.json文件。这个插件的开源地址为GitHub – hedronvision/bazel-compile-commands-extractor

2.1 在WORKSPACE中添加配置

在你的Bazel项目的顶层目录(top dir)中的WORKSPACE文件中,添加以下内容:

# Hedron's Compile Commands Extractor for Bazel
# https://github.com/hedronvision/bazel-compile-commands-extractor
http_archive(
    name = "hedron_compile_commands",
    url = "https://github.com/hedronvision/bazel-compile-commands-extractor/archive/1e08f8e0507b6b6b1f4416a9a22cf5c28beaba93.tar.gz",
    strip_prefix = "bazel-compile-commands-extractor-1e08f8e0507b6b6b1f4416a9a22cf5c28beaba93",
)

load("@hedron_compile_commands//:workspace_setup.bzl", "hedron_compile_commands_setup")
hedron_compile_commands_setup()

Bazel Workspace的作用与http_archive语法

  • Bazel Workspace:定义了一个Bazel项目的根目录,包含了构建的所有依赖和配置。
  • http_archive:用于从网络获取外部库或工具,并将其作为依赖项。你需要根据需要替换url中的提交哈希,以确保使用最新版本。

2.2 在项目中添加refresh_compile_commands

在你指定的工程中,添加以下内容:

load("@hedron_compile_commands//:refresh_compile_commands.bzl", "refresh_compile_commands")

refresh_compile_commands(
    name = "refresh_compile_commands",
    targets = ["//apps/sensor_fusion/tros/src:module_fusion"]
)

load的作用与hedron_compile_commands的交互

  • load:用于加载外部的Bazel规则或功能,以便在当前文件中使用。
  • hedron_compile_commands:通过加载相应的规则,可以方便地更新和生成compile_commands.json文件。

3. 安装Clangd

要使用Clangd,你需要先安装它,目前我们使用的是clangd-12版本。

3.1 在VSCode中安装LLVM的Clangd插件

在VSCode中搜索并安装“LLVM”插件,这样可以启用Clangd的功能。

3.2 配置settings.json

最后,在VSCode的全局或工作区的settings.json中添加以下配置:

"clangd.path": "/usr/bin/clangd-12",
"clangd.arguments": [
    "--log=verbose",
    "--pretty",
    "--all-scopes-completion",
    "--completion-style=bundled",
    "--cross-file-rename",
    "--header-insertion=iwyu",
    "--header-insertion-decorators",
    "--background-index",
    "--clang-tidy",
    "--clang-tidy-checks=cppcoreguidelines-*,performance-*,bugprone-*,portability-*,modernize-*,google-*",
    "-j=2",
    "--pch-storage=disk",
    "--function-arg-placeholders=false",
    "--compile-commands-dir=/path/to/your/compile_commands"
]

clangd.arguments字段解释

  • --log=verbose:生成详细日志。
  • --pretty:使输出的JSON文件更美观。
  • --all-scopes-completion:提供全局补全建议。
  • --completion-style=bundled:采用打包的建议风格。
  • --cross-file-rename:支持跨文件重命名变量。
  • --header-insertion=iwyu:自动补充头文件。
  • --background-index:在后台自动分析文件。
  • --clang-tidy:启用静态检查功能。
  • --clang-tidy-checks=...:配置静态检查的规则。
  • -j=2:同时开启的任务数量。
  • --pch-storage=disk:指定预编译头的位置。
  • --compile-commands-dir=/path/to/your/compile_commands:指定compile_commands.json文件的目录。

结语

通过以上步骤,你可以在VSCode中使用Clangd来提升代码编写的智能提示功能,极大地改善开发效率。


已发布

分类

,

来自

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注