VS Code中Haskell-language-server启动目录错误的解决方法
解决VS Code中HLS无法识别子目录Haskell项目的问题
问题场景
项目结构如下:
- my-project - backend - stack.yaml - src - ... 一堆Haskell文件 - ... 还有exe和test目录 - frontend - ... Elm前端应用 - flake.nix - ... 其他文件
在项目根目录执行cd my-project && codium .打开VS Code后,查看Haskell文件时出现无法找到包的错误;但进入backend目录执行cd my-project/backend && codium .打开时一切正常。推测是HLS在项目根目录启动,无法正确识别子目录里的Haskell项目。尝试在.vscode/settings.json中添加"haskell.serverExtraArgs": "--cwd /home/theoddler/Dev/my-project/backend",但问题依旧。
解决方案
方法1:修改HLS启动的环境变量
直接修改项目根目录下的.vscode/settings.json,替换之前的配置为以下内容:
{ "haskell.serverEnvironment": { "PWD": "/home/theoddler/Dev/my-project/backend" } }
这个配置会强制HLS以backend目录作为工作路径启动,让它能正确读取stack.yaml和项目依赖信息。
方法2:创建多文件夹工作区
在项目根目录新建一个backend.code-workspace文件,内容如下:
{ "folders": [ { "path": "backend" }, { "path": "frontend" } ] }
之后用codium backend.code-workspace打开项目,HLS会自动识别backend目录下的Haskell配置,同时你还能在同一个窗口里操作frontend的文件,不用来回切换窗口。
方法3:用Stack工作区统一配置
如果你的项目适合用Stack的工作区特性,可以在项目根目录新建一个stack.yaml文件,内容指向backend的项目:
packages: - ./backend
这样HLS在根目录启动时,会通过这个根目录的stack.yaml识别到backend的项目,自动加载对应的依赖和编译配置。
内容的提问来源于stack exchange,提问作者The Oddler
相关产品推荐
相关产品推荐

