VSCode Powershell проблемаMatcher

У меня есть задача для Powershell в VSCode, но я не могу понять, как заставить problemMatch работать

{
    "version": "0.1.0",
    "command": "PowerShell.exe",
    "isShellCommand": true,
    "suppressTaskName": true,
    "args": [
        "& '${file}'"
    ],
    "tasks": [
    {
        "taskName": "Build",
        "isBuildCommand": true,
        "showOutput": "always",
        "fileLocation": ["absolute"],
        "problemMatcher": [
        {
            "pattern": {
            "regexp": "At (.*\\.ps1):(\\d*) char:(\\d*)(.*)\\n\\+(.*)\\n\\+(.*)\\n(.*)",
            "file": 1,
            "line": 2,
            "column": 3,
            "message": 7
            }
        }]
    }]
}

Цели регулярного выражения таковы:

At C:\tmp\C1-INT to C1-QA\a.ps1:1 char:11
+ "asdasds" !
+           ~
Unexpected token '!' in expression or statement.

файл: Группа 1 "C: \ tmp \ C1-INT до C1-QA \ a.ps1"

строка: Группа 2 "1"

столбец: Группа 3 "11"

сообщение: Группа 7 Неожиданный токен '!' в выражении или утверждении.


person smichaud    schedule 30.06.2015    source источник
comment
Я хотел бы помочь вам, но я не понимаю, в чем вопрос / в чем проблема? (Возможно, это потому, что я не использовал VSCode)   -  person David Abrahamsson    schedule 01.07.2015
comment
Проблема заключается в том, что обнаружение ошибок с помощью регулярного выражения работает во внешнем инструменте тестирования регулярных выражений, но в VSCode подчеркивание / маркировка ошибки не работает (красное подчеркивание / вывод ошибки)   -  person smichaud    schedule 02.07.2015


Ответы (1)


Я не уверен, что регулярное выражение для сопоставителя проблем может обрабатывать разрывы строк. По умолчанию средства сопоставления задач являются однострочными, но вы можете создавать сопоставители многострочных задач, как описано здесь: https://code.visualstudio.com/Docs/editor/tasks#_defining-a-multiline-problem-matcher

По сути, вы предоставляете несколько регулярных выражений. Для вашего сценария вы можете попробовать что-то вроде следующего:

"problemMatcher": {
    "owner": "custom",
    "fileLocation": ["absolute"],
    "pattern": [{
        "regexp": "At (.*\\.ps1):(\\d*) char:(\\d*)(.*)",
        "file": 1,
        "line": 2,
        "column": 3                 
    }, {
        "regexp": "\\+.*"
    },{
        "regexp": "\\+.*"
    },{
        "regexp": "(.+)",
        "message": 1
    }]
}

Первый шаблон соответствует файлу, строке и столбцу в первой строке. Второй и третий шаблоны соответствуют следующим двум строкам вывода, но не фиксируют никаких значений. Последняя строка соответствует следующей строке вывода и фиксирует все это как сообщение.

Надеюсь, это поможет!

person Stuart Leeks    schedule 03.07.2015
comment
Что, если количество строк в середине (строк, которые вам не нужны) может быть переменным? Я имею дело с выводом Pester, и номер строки и информация о пути к файлу появляются в предпоследней строке вывода ошибок. К сожалению, количество строк между первой строкой (индикатор ошибки) и этой строкой может меняться. - person Keith Hill; 13.02.2016
comment
Для Пестера я написал собственный сценарий выполнения, который переформатировал вывод, поскольку он заставил меня снова запустить и запустить :-) github.com/stuartleeks/posh-HumpCompletion/blob/master/ - person Stuart Leeks; 27.10.2016