可得一人,共赏山河否
686 字
3 分钟
clangd-clang-format-global
我们使用clangd插件来替代Microsoft C/C++插件,那么我们应当学会如何配置其来符合我们的使用。我的clangd插件配置如下。
// clangd 及 微软C/C++扩展设置 "C_Cpp.intelliSenseEngine": "disabled", // 禁用微软的IntelliSense "C_Cpp.errorSquiggles": "disabled", "clangd.enable": true, "clangd.detectExtensionConflicts": false, "clangd.checkUpdates": false, "clangd.onConfigChanged": "prompt", "clangd.arguments": [ // 让 Clangd 生成精简的日志 详细是verbose "--log=info", // 输出的 JSON 文件更美观 "--pretty", // 全局补全 "--all-scopes-completion", // 建议风格:打包(重载函数只会给出一个建议) // 相反可以设置为detailed "--completion-style=bundled", // 跨文件重命名变量 "--cross-file-rename", // 允许补充头文件 "--header-insertion=iwyu", // 输入建议中,已包含头文件的项与还未包含头文件的项会以圆点加以区分 "--header-insertion-decorators", // 在后台自动分析文件(基于 complie_commands,我们用CMake生成) "--background-index", // 启用 Clang-Tidy 以提供「静态检查」 "--clang-tidy", // Clang-Tidy 静态检查的参数,指出按照哪些规则进行静态检查 // 参数后部分的*表示通配符 // 在参数前加入-,如-modernize-use-trailing-return-type,将会禁用某一规则 "--clang-tidy-checks=cppcoreguidelines-*,performance-*,bugprone-*,portability-*,modernize-*,google-*", // 同时开启的任务数量 "-j=8", // pch优化的位置(memory 或 disk,选择memory会增加内存开销,但会提升性能) 推荐在板子上使用disk "--pch-storage=disk", // 启用这项时,补全函数时,将会给参数提供占位符,键入后按 Tab 可以切换到下一占位符,乃至函数末 // 我选择禁用 "--function-arg-placeholders=false", // compelie_commands.json 文件的目录位置 "--compile-commands-dir=${workspaceRoot}/build", // 启用.clangd配置文件 "--enable-config", // 设置格式化style "--fallback-style=google", "--pch-storage=memory", "--ranking-model=heuristics", "--suggest-missing-includes" ],其中有点坑人的是format不起作用,除非设置.clang-format文件来描述格式化的样式。但这个在clangd插件里是设置不了的。虽说我们可以每个文件夹下设置.clang-format,这对于工程来说也是良好实践,但我想全局设置来降低工作量(对于无须和别人合作的项目之类的)。**解决方案是:在家目录下放置一个.clang-format文件,即可作为全局。**对于.clangd也是一样的,有项目设置和全局设置。在vscode的设置里是完成不了全局clang-format的设置的
BasedOnStyle: Webkit# 设置 tab 长度和缩进IndentWidth: 4TabWidth: 4UseTab: Never # 或者 Always, ForIndentation, ForContinuationAndIndentation
# 大括号换行设置BreakBeforeBraces: CustomBraceWrapping: AfterClass: true AfterControlStatement: Always # if, for, while 等后的大括号换行 AfterEnum: true AfterFunction: true AfterNamespace: true AfterStruct: true AfterUnion: true BeforeCatch: true BeforeElse: true BeforeLambdaBody: true BeforeWhile: false SplitEmptyFunction: false SplitEmptyRecord: false SplitEmptyNamespace: false以下是在win上的设置,设置了这个后就能正确提示msys2 ucrt 的gcc的头文件了,如其专有的<bits/stdc++.h>等,对应的把x86_64-pc-windows-gnu换成x86_64-pc-windows-msvc即可提示MSVC的头文件
CompileFlags: Add: - --target=x86_64-pc-windows-gnu clangd-clang-format-global
https://yjdyamv.github.io/posts/clangd-clang-format-global/