2015-06-30 4 views
1

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

{ 
    "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 
      } 
     }] 
    }] 
} 

Regex цели, как так:

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

файла: Group 1 "C: \ TMP \ С1-ИНТ, чтобы C1-QA \ A.ps1"

линия: Группа 2 ""

колонка: Группа 3 ""

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

+0

Я хотел бы помочь вам, но я не понимаю, в чем вопрос/в чем проблема? (Возможно, это связано с тем, что я не использовал VSCode) –

+0

Проблема: обнаружение ошибок с помощью регулярных выражений работает во внешнем инструменте тестирования регулярных выражений, но в VSCode ошибка подчеркивания/маркировки не работает (красная подчеркивание/ошибка outpout) – smichaud

ответ

3

Я не уверен, что регулярное выражение для совпадения проблем может обрабатывать разрывы строк. По умолчанию совпадения по проблеме являются однострочными, но вы можете создавать многострочные матчи, как описано здесь: 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 
    }] 
} 

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

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

+0

Спасибо, работает отлично – smichaud

+1

Что делать, если количество строк в середине (строки, которые вам не нужны) могут быть переменными? Я имею дело с выводами Pester, и номер строки и информация о пути к файлу отображаются на следующей строке последней строки вывода ошибки. К сожалению, количество строк между первой (индикатор ошибки) и этой линией является переменной. –

+0

Для Pester я написал специальный сценарий выполнения, который отформатировал вывод, когда он снова заработал и снова запустил :-) https://github.com/stuartleeks/posh-HumpCompletion/blob/master/RunPester.ps1#L26 –

Смежные вопросы