Проблема vscodeMatcher не распознает предупреждения компилятора Tasking

Следующее регулярное выражение средства сопоставления задач Tasks.json должно соответствовать следующему типичному предупреждению. Но это не так. ctc W505: ["somedirectory/somefile.c" 350/18] неявное объявление бла-бла-бла

В чем проблема? Я проверил, что встроенный парсер соответствует ошибкам и предупреждениям вывода gcc.

Спасибо,

Сатиш К

"tasks": [
        {
            "label": "build.bat",
            "type": "shell",
            "command": "build.bat",
            "problemMatcher": {
                "owner": "cpptools",
                "fileLocation": [
                    "relative",
                    "${env:PWD}"
                ],
                "pattern": {
                    "regexp": "^ctc W(\\d+): \\[\\\"(.*)\\\" (\\d+)\\\/(\\d+)\\] (.*)$",
                    "file": 2,
                    "line": 3,
                    "column": 4,
                    "message": 5
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]

2 ответа

Я не мог заставить это работать. Но я запустил рабочий regex101 через json escpare. Он сделал еще несколько попыток избежать косой черты и закончился так:

      "regexp": "^ctc W(\\d+): \\[\\\"(.*)\\\" (\\d+)\\/(\\d+)\\] (.*)$",

Вы добавляете дополнительный \ к выражению, вам нужно только избежать " и тебе не нужно убегать /

"tasks": [
        {
            "label": "build.bat",
            "type": "shell",
            "command": "build.bat",
            "problemMatcher": {
                "owner": "cpptools",
                "fileLocation": [
                    "relative",
                    "${env:PWD}"
                ],
                "pattern": {
                    "regexp": "^ctc W(\\d+): \\[\"(.*)\" (\\d+)/(\\d+)\\] (.*)$",
                    "file": 2,
                    "line": 3,
                    "column": 4,
                    "message": 5
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]


редактировать

Это работает в regex101 (аромат Javascript)

^ctc W(\d+): \["(.*)" (\d+)\/(\d+)\] (.*)$

Чтобы преобразовать его в строку JSON, экранируйте \" и регулярное выражение также хочет, чтобы вы сбежали / но это потребуется только в том случае, если вы используете регулярное выражение в буквальном Javascript (например, /\d+/g) но мы не делаем этого в VSC, но это не повредит.

В результате чего:

"^ctc W(\\d+): \\[\"(.*)\" (\\d+)\\/(\\d+)\\] (.*)$"
Другие вопросы по тегам