VS Code + LSP in OpenFOAM

使用 VS Code + Language Server Protocol 更好地阅读以及编写 OpenFOAM 代码。

本文的操作需要 Linux 环境,博主是在 WIN10 下的 Ubuntu WSL 试验的。

第 1 步:在 WIN10 下安装 VS code,然后安装 Remote - WSL 插件。

第 2 步:在 VS code 的 WSL 端安装 ccls 插件。

第 3 步:在 Ubuntu 下安装 bear:sudo apt install bear,安装 ccls:sudo apt install ccls

第 4 步:修改 OpenFOAM/wmake/wmake,在 checkEnv 的这一行下边添加:

#------------------------------------------------------------------------------
# check if bear is installed and we are not already running under bear
#------------------------------------------------------------------------------

if [ -z "${RUNNING_UNDER_BEAR}" ] ; then
if ! bear --version > /dev/null ; then
echo "WARNING: bear is not installed -> There will be no compile_commands.json output." 1>&2
elif printf '%s\n%s\n' "bear 3.0.0" "$(bear --version)" | sort -V -C ; then
#bear version >= 3.0.0
export RUNNING_UNDER_BEAR=true
mkdir -p $FOAM_LIBBIN
bear --append --output $FOAM_LIBBIN/../compile_commands.json -- wmake $@
exit $?
elif printf '%s\n%s\n' "bear 2.0.0" "$(bear --version)" | sort -V -C ; then
#bear version >= 2.0.0
export RUNNING_UNDER_BEAR=true
mkdir -p $FOAM_LIBBIN
bear --append -o $FOAM_LIBBIN/../compile_commands.json wmake $@
exit $?
else
echo "WARNING: bear version is below 2.0.0 -> There will be no compile_commands.json output." 1>&2
fi
fi

第 5 步:重新编译 OpenFOAM,在此过程中,bear 会监控整个编译过程,生成代码之间的依赖关系。我的测试下,生成了 ~/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/compile_commands.json,大概 4MB,这是下列步骤成功的关键。

第 6 步:点击下载 setupVScodeFOAM。Ubuntu 下,激活 OpenFOAM 后,在任意目录执行 setupVScodeFOAM 生成 VS code 配置文件(.vscode/settings.json)或者 setupVScodeFOAM --generate-workspace 生成工作区。

第 7 步:在 VS code 中,打开刚刚创建的 .vscode 所在的文件夹,或者刚刚创建的工作区。此时你应该可以看到,ccls 正在后台运行,尝试理解你所有的代码,并占用了你所有的 CPU。

第 8 步:等上一步结束,就可以愉快地开始阅读或者编写代码了,尽情享用比较精确的 Go to definition 功能。

不过功能也不完美,ccls对代码的理解也不够透彻。并且OpenFOAM里边很多同名函数,跳转的时候,有时候就瞎跳转,随机扔给你一个(甚至参数个数都不同的)同名函数。。。

后来又尝试了一下 ccls 的替代品 clangd。但是经过我的测试,对于 OpenFOAM 代码的理解能力而言,ccls 更胜一筹。
如果有人也想试一试,我简单提供一下方法。还是上边的硬件设备,WIN10+WSL Ubuntu。
在 Ubuntu 里安装 clangd,然后把上边生成的 compile_commands.json,放到 src 或者是底下的那些单独的库的文件夹里。
然后耐心等待 Ubuntu 建立索引就行了,就像上边的第 7 步一样。


参考资料:

文章作者: Yan Zhang
文章链接: https://openfoam.top/vscodeLSP/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OpenFOAM 成长之路
您的肯定会给我更大动力~