Haskell 语言服务器在 VS Code 中的错误文件夹中启动

问题描述 投票:0回答:2

我有一个看起来像这样的项目:

- 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 的目录吗?

visual-studio-code haskell haskell-stack haskell-language-server
2个回答
0
投票

解决方法

我将

stack.yaml
,
stack.yaml.lock
文件移至根目录, 并将
packages
文件中的
stack.yaml
更改为

packages:
  - .

packages:
  - backend

这样 HLS 就会很高兴,并且可以正确找到我的 Haskell 项目。

其他想法

我查看了 vscode-haskell 扩展的代码,它看起来除了根目录之外不支持任何其他内容作为工作区的 HLS 目录。

我正在考虑为 vscode haskell 扩展做出贡献,添加更改 HLS 工作目录的功能,但目前我用于调试扩展更改的设置不起作用,所以我稍后会再次研究这一点。

目前解决方法是我发现的最好的方法:(


0
投票

我遇到了类似的问题,但我使用的是 Cabal 而不是 Stack。我对将文件移动到根目录只是为了使 VS Code 插件工作的解决方案不太满意,因为这会破坏我的代码结构。

我找到了以下解决方法,我的

.cabal
(希望你的
stack.yaml
)文件可以保留在
./backend/
目录中:

  1. my-project.code-workspace
    添加到您的项目根目录:
{
    "folders": [
        {
            "name": "my-workspace",
            "path": "."
        },
        {
            "name": "backend",
            "path": "backend"
        }
    ],
}
  1. 使用
    File -> Open Workspace from File...
    并选择
    my-project.code-workspace
  2. (可选)添加
    ./backend/settings.json
    以隐藏资源管理器侧栏中多余的
    ./backend/
    目录。
    注意:每当您在
    ./backend/
    中编辑文件时,资源管理器都会在
    backend
    文件夹中突出显示该文件,而不是
    my-workspace/backend
    文件夹 - 但至少,一旦您切换到另一个文件,它会再次消失。
© www.soinside.com 2019 - 2024. All rights reserved.