AI毛毛的blog

配置Pylance和clangd插件优化vscode下Python和C++的开发体验

今天折腾了一下Pylance和clangd插件,用vscode写Python、C和C++的体验好了不少,记录流程以备忘。

Pylance插件

在vscode的插件商店直接下载安装Pylance就可以了,它依赖于之前的Python插件,这个很简单。

相比与Python插件,Pylance主要是在代码补全和参数提示上更加友好,其他方面,像类型检查、引用跳转以及docstrings上也做得不错,不过代码调试、格式化之类的工作还是要交给Python插件完成。

启用Pylance的方法是,在设置里将Python插件的languageServer选取为Pylance,对应的json格式配置为:

1
"python.languageServer": "Pylance"

Pylance默认的配置已经比较好使了,不过额外的输入时类型检查默认是关闭的,可以简单修改成basic,还有个strict模式,感觉似乎过于严格了,修改的配置为:

1
"python.analysis.typeCheckingMode": "basic"

这样配置后,敲Python代码也很愉悦了。

clangd插件

论坛里看到有人推荐clangd插件代替微软的C/C++插件,去商店把这个clangd下载来体验了一下,看发布者名字,应该是LLVM官方提供的。

clangd是LLVM项目的一个language server,在Qt Creator中默认集成了,对于C/C++代码的补全、提示都很友好。

安装好clangd插件后,第一次打开C/C++代码时,插件会检查系统有无安装clangd,如果没有,可以根据提示直接下载,一步到位。

clangd插件默认的配置项比较少,但是部分配置是可以通过命令行参数形式,在clangd启动时传给它的,这样就很灵活了,对应的vscode配置项是clangd.arguments。例如,我的Windows系统下装的编译器有msvc、minGW和clang,为了让clangd使用minGW的配置、头文件、库等,需要给clangd传递“–query-driver”参数,对应插件的配置是如下,clangd启动时,列表内的这行配置就传递给了它。

1
2
3
"clangd.arguments": [
"--query-driver=D:\\HeavyProgram\\Qt\\Tools\\mingw810_64\\bin\\g*"
]

配置Compilation Database

根据clangd配置页的说法,clangd需要通过Compilation Database来查找AST之类的索引信息,这是一份json格式的文件,默认文件名为“compile_commands.json”,所以在让clangd工作之前,先得生成这个文件,具体的Compilation Database说明可以查看LLVM官方文档

目前有很多工具都能生成Compilation Database,我比较习惯用CMake,手动生成需要使用cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1参数,好在vscode的CMake插件默认是会生成它的。

由于clangd会在项目根目录查找compile_commands.json,而CMake插件自动生成的文件一般是在build目录下,这就需要修改插件的copyCompileCommands配置,让它把该文件复制到项目根目录下,配置如下:

1
"cmake.copyCompileCommands": "${workspaceFolder}/compile_commands.json"

这样每次CMake生成后,compile_commands.json文件就自动出现在工作区根目录,clangd插件再根据这个文件做相应的初始化配置。

关于Debug

clangd的代码补全、提示等是比微软官方的C/C++插件快速而且友好很多,但是并未提供调试功能,所以想要debug还是需要C/C++插件的配合。

装好C/C++插件后,为了防止它的IntelliSense功能与clangd插件冲突,需要把这些冲突配置项全部关闭,只用它来作为调试使用的插件,需要的配置项如下:

1
2
3
4
"C_Cpp.autocomplete": "Disabled",
"C_Cpp.errorSquiggles": "Disabled",
"C_Cpp.intelliSenseEngine": "Disabled",
"C_Cpp.formatting": "Disabled"

这样,clangd与C/C++这两个插件就可以同时工作了,一个用于写代码,一个用于调试。