Пользовательское средство сопоставления проблем с файлами

#visual-studio-code #vscode-tasks

#visual-studio-code #vscode-задачи

Вопрос:

Я хотел бы сопоставить вывод проблемы из программы с выводом JSON.

У меня есть файл output.json . Формат примерно такой:

   "warnings": [
    {
      "file_location": "abc.hpp",
      "line": 73,
      "msg": "Some warning message"
    }
  

Я хотел бы показать их в представлении проблем.

  1. Как мне прочитать проблемы из файла (нужно ли мне использовать cat/type ?). Похоже, что все примеры предназначены для npm watch или аналогичных.

  2. Даже с output.json моими текущими задачами это не отображается.

Я определил следующую задачу:

     {
        "label": "show problems",
        "type": "shell",
        "command": "cat output.json",
        "problemMatcher": {
            "fileLocation": ["relative", "${workspaceFolder}"],
            "pattern": [
                {
                    "regexp": "^\s*"file_location"\s*:\s*"(. )",$",
                    "file": 1
                },
                {
                    "regexp": "^\s*"line"\s*:\s*(\d ),$",
                    "line": 1
                },
                {
                    "regexp": "^\s*"msg"\s*:\s*(\d )$",
                    "message": 1
                }
            ]
        }
    }
  

Комментарии:

1. Не уверен, что не так с вашим средством сопоставления проблем, но средства сопоставления проблем всегда имеют тенденцию быть немного неудобными, особенно для «проблем с чтением из файла», как здесь. Рассматривали ли вы возможность написания расширения с использованием API диагностики? Это кажется гораздо более чистым, простым и гибким подходом.

2. @Gama11 Нет, но я проверю это, я не слышал об этом раньше. У меня уже есть внутреннее расширение для фрагментов, так что, возможно, я мог бы легко его расширить. Спасибо 🙂

3. @Gama11 Теперь я создал расширение, и оно прекрасно работает и в любом случае намного лучше подходит для распространения. Если вы добавите правильный ответ, я могу принять ваш ответ там. (Вы не можете принимать комментарии в качестве ответов).

4. Хм .. рад, что это помогло, но я не думаю, что «сделайте что-то другое вместо этого» действительно отвечает на первоначальный вопрос. Кому-то еще, кто найдет вопрос, возможно, все еще интересно, как это можно сделать с помощью средств сопоставления проблем. 🙂