VSCode: как я могу выполнить произвольную задачу с помощью JavaScript API?

В более новых версиях VSCode я могу создавать привязки к любой задаче, определенной в tasks.json. Например, с 3 задачами ниже

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Clean",
      "type": "shell",
      "command": "clean.cmd",
      "problemMatcher": []
    },
    {
      "label": "Build",
      "type": "shell",
      "command": "build.cmd",
      "problemMatcher": [],
      "group": { "kind": "build", "isDefault": true }
    },
    {
      "label": "Flash",
      "type": "shell",
      "command": "flash.cmd",
      "problemMatcher": []
    }
  ]
}

Я могу создавать привязки клавиш с помощью

[
  {
    "key": "alt+f9",
    "command": "workbench.action.tasks.runTask",
    "args": "Clean"
  },
  {
    "key": "ctrl+f9",
    "command": "workbench.action.tasks.build"
  },
  {
    "key": "f9",
    "command": "workbench.action.tasks.runTask",
    "args": "Flash"
  }
]  

и все работает как положено. Я пытаюсь сделать то же самое из расширения (например, с помощью Команды сценария) с использованием VSCode API, но он работает только для задач build и test.

Звонок

vscode.commands.executeCommand("workbench.action.tasks.build")

работает, но

vscode.commands.executeCommand("workbench.action.tasks.runTask", ["Clean"])

открывает список выбора задач.

Как я мог напрямую запустить другие задачи помимо build и test, используя код JavaScript?


person Borcut    schedule 16.10.2017    source источник


Ответы (1)


Файл конфигурации ваших задач выглядит старым. Если вы используете новую версию Visual Studio Code, вам следует выполнить обновление.

Я думаю, что api ожидает, что у задачи будет поле «метка».

https://code.visualstudio.com/docs/editor/tasks#_convert-from-010-to-200

Итак, помимо:

{
   "taskName": "Clean",
   "type": "shell",
   "command": "clean.cmd",
   "problemMatcher": []
},

Должен быть:

{
  "label": "Clean",
  "type": "shell",
  "command": "clean.cmd",
  "problemMatcher": []
},

Обновление: попробуйте вызвать его только со строкой вместо того, чтобы обернуть его в массив, например:

vscode.commands.executeCommand("workbench.action.tasks.runTask", "Clean")
person Clintm    schedule 15.11.2017
comment
Я выполнил обновление, но это не повлияло на мою проблему .label или taskName (которые все еще поддерживаются), я могу запускать задачи из пользовательского интерфейса, но не с помощью JavaScript API. Тем не менее ваш ответ напомнил мне обновить вопрос. Спасибо. - person Borcut; 16.11.2017