如何让VS Code与HLS将子目录设为Haskell项目根目录?
解决VS Code中HLS在子目录项目的工作目录问题
以下是几种可行的解决方案,按优先级排序:
直接打开子目录作为工作区
直接在VS Code中打开/workspace/haskell目录作为工作区根,而非/workspace。这是最直接的方式,所有Haskell工具会默认使用该目录作为操作根,无需额外配置。配置VS Code工作区设置
在/workspace/.vscode/settings.json中添加以下配置,强制HLS使用子目录作为工作根:{ "haskell.rootPath": "/workspace/haskell", "haskell.serverExtraArgs": ["--cwd", "/workspace/haskell"], "haskell.manageHieYaml": false }rootPath:告诉HLS去哪里查找Haskell项目的核心文件serverExtraArgs:确保HLS启动时切换到指定目录manageHieYaml:禁用VS Code自动生成hie.yaml,避免覆盖你手动生成的配置
调整hie.yaml的路径配置
在/workspace/haskell/hie.yaml中明确指定项目根路径,修改cradle部分:cradle: path: "/workspace/haskell" # 保留implicit-hie生成的其他cradle配置(如stack/cabal相关)这样HLS读取hie.yaml时会强制使用该路径作为工作目录执行
ghc --print-libdir等命令。添加子目录为独立工作区文件夹
如果必须保留/workspace作为主工作区,在VS Code中通过文件 -> 添加文件夹到工作区,将/workspace/haskell添加为独立的工作区文件夹。HLS会自动识别该子文件夹为Haskell项目根,优先使用其配置执行操作。
配置完成后,通过VS Code命令面板执行Haskell: Restart Haskell Language Server,并查看日志确认ghc --print-libdir是否在/workspace/haskell目录下执行。
内容的提问来源于stack exchange,提问作者Saurabh Nanda
相关产品推荐
相关产品推荐

