我有一个看起来像这样的项目:
- my-project
- backend
- stack.yaml
- src
- ... a bunch of haskell files
- ... exe & test folders here too
- frontend
- ... an Elm frontend app
- flake.nix
- ... other files
当我在 vscode (
cd my-project && codium .
) 中打开它并转到其中一个 haskell 文件时,我收到一些错误,它无法找到包。
但是,当我首先 cd 进入后端文件夹,然后打开代码 (
cd my-project/backend && codium .
) 时,一切都会完美运行。
所以我认为 HLS 只是从根开始启动,然后无法正确拾取 haskell 项目。
我尝试将
"haskell.serverExtraArgs": "--cwd /home/theoddler/Dev/my-project/backend"
添加到我的 .vscode/.settings.json
文件中,但出现了相同的错误。
我该如何解决这个问题?我可以更改 vscode 插件启动 HLS 的目录吗?
我将
stack.yaml
,stack.yaml.lock
文件移至根目录,
并将 packages
文件中的 stack.yaml
更改为
packages:
- .
到
packages:
- backend
这样 HLS 就会很高兴,并且可以正确找到我的 Haskell 项目。
我查看了 vscode-haskell 扩展的代码,它看起来除了根目录之外不支持任何其他内容作为工作区的 HLS 目录。
我正在考虑为 vscode haskell 扩展做出贡献,添加更改 HLS 工作目录的功能,但目前我用于调试扩展更改的设置不起作用,所以我稍后会再次研究这一点。
目前解决方法是我发现的最好的方法:(
我遇到了类似的问题,但我使用的是 Cabal 而不是 Stack。我对将文件移动到根目录只是为了使 VS Code 插件工作的解决方案不太满意,因为这会破坏我的代码结构。
我找到了以下解决方法,我的
.cabal
(希望你的 stack.yaml
)文件可以保留在 ./backend/
目录中:
my-project.code-workspace
添加到您的项目根目录:{
"folders": [
{
"name": "my-workspace",
"path": "."
},
{
"name": "backend",
"path": "backend"
}
],
}
File -> Open Workspace from File...
并选择 my-project.code-workspace
./backend/settings.json
以隐藏资源管理器侧栏中多余的 ./backend/
目录。 ./backend/
中编辑文件时,资源管理器都会在 backend
文件夹中突出显示该文件,而不是 my-workspace/backend
文件夹 - 但至少,一旦您切换到另一个文件,它会再次消失。