如何在VSCode任务错误中配置文件路径

时间:2017-01-31 12:28:58

标签: delphi visual-studio-code omnipascal

我在VSCode中配置了一个任务来编译Delphi 2005 dpk。它正在工作并返回“问题视图”上的错误,但它没有显示文件中的错误。

我认为它正在发生,因为当我点击错误时,我收到错误消息:

  

无法打开'sr075pro.pas':找不到文件   (... projectfolder \ sr075pro.pas)

但该文件位于...projectfolder\webservices\sr075pro.pas

我找不到告诉任务该文件在子文件夹中的方法。我尝试在“fileLocation”标签上使用“relative”选项而没有成功。

返回错误:

Compiling sa_webservices...
Borland Delphi  Version 13.0  Copyright (c) 1983,99 Inprise Corporation
sr075pro.pas(99) Error: Undeclared identifier: 'ni'
sa_webservices.dpk(802) Fatal: Could not compile used unit 'sr075pro.pas'

我的任务配置:

{
  "version": "0.1.0",
  "name": "Compilar",
  "command": "C:\\Compilers\\compile.bat",
  "suppressTaskName": true,
  "isShellCommand": true,
  "isBuildCommand": true,
  "tasks": [
{
      "taskName": "Compile sa_webservices",
      "isBuildCommand": false,
      "isTestCommand": false,
      "showOutput": "always",
      "args": [
        "sa_webservices"
      ],
      "problemMatcher": {
        "owner": "external",
        "fileLocation": "relative",
        "pattern": {
          "regexp": "^([\\w]+\\.(pas|dpr|dpk))\\((\\d+)\\)\\s(Fatal|Error|Warning|Hint):(.*)",
          "file": 1,
          "line": 3,
          "message": 5
        }
      }
    }

我的compile.bat:

@echo off
@P:
@set arg1=%1
shift

...
if "%arg1%" == "sa_webservices" set arg2="webservices" 
...
echo Compiling %arg1%...
cd\%arg2% 
dcc32.exe -H -W -Q %arg1%.dpk

1 个答案:

答案 0 :(得分:1)

您的任务配置错误。首先,你不要关闭所有括号,但我想这是通过在StackOverflow上复制和粘贴它而犯的错误。否则,任务配置根本不起作用。

现在来到真正的问题: DCC32生成包含相对文件路径的提示和警告。这些路径相对于项目文件 。在任务配置中,通过设置

定义编译器的输出以包含相对路径
"fileLocation": "relative"

Visual Studio Code不知道如何根据编译器消息给出的相对路径构建正确的绝对路径。因此,它会猜测您当前的${workspaceRoot}(在您的情况下,它是projectfolder)将是绝对路径。

这解释了为什么您会看到包含错误文件路径的错误和警告。为了获得正确的路径,您需要告诉VSCode 正确的路径以组合相对路径。 只需在fileLocation中添加tasks.json条目的正确路径即可实现此目的:

"fileLocation": ["relative", "${workspaceRoot}\\webservices"]

整个 tasks.json 看起来像这样:

{
    "version": "0.1.0",
    "name": "Compilar",
    "command": "C:\\Compilers\\compile.bat",
    "suppressTaskName": true,
    "isShellCommand": true,
    "isBuildCommand": true,
    "tasks": [
        {
            "taskName": "Compile sa_webservices",
            "isBuildCommand": false,
            "isTestCommand": false,
            "showOutput": "always",
            "args": [
                "sa_webservices"
            ],
            "problemMatcher": {
                "owner": "external",
                "fileLocation": ["relative", "${workspaceRoot}\\webservices"],
                "pattern": {
                    "regexp": "^([\\w]+\\.(pas|dpr|dpk))\\((\\d+)\\)\\s(Fatal|Error|Warning|Hint):(.*)",
                    "file": 1,
                    "line": 3,
                    "message": 5
                }
            }
        }
    ]
}