Skip to content

Commands

Commands trigger actions. Commands expose functionality to users, bind to actions in VS Code's UI, and implement internal logic.

There are some built-in commands in VSCode, and you can also define your own commands.

Define in Manifest Non-Proprietary

As described in the official documentation, you need to define the commands in the contributes.commands field in the package.json.

json
{
  "contributes": {
    "commands": [
      {
        "command": "extension.sayHello",
        "title": "Hello World",
        "category": "Hello",
        "icon": {
          "light": "path/to/light/icon.svg",
          "dark": "path/to/dark/icon.svg"
        }
      }
    ]
  }
}

Register Commands

You can use the useCommand or useCommands function to register commands in your extension.

ts
import { 
defineExtension
,
ref
,
useCommand
,
watchEffect
} from 'reactive-vscode'
import { window } from 'vscode' export =
defineExtension
(() => {
const
helloCounter
=
ref
(0)
useCommand
('extension.sayHello', () => {
window.
showInformationMessage
('Hello World')
helloCounter
.
value
++
})
watchEffect
(() => {
if (
helloCounter
.
value
> 99)
window.
showWarningMessage
('You have said hello too many times!')
}) })

Caveats

Command Palette Visibility Non-Proprietary

Commands can be used as view actions, or be called by other extensions. In that case, commands may have params and shouldn't be called via the Command Palette. We should hide these commands from the Command Palette by setting the contributes.menus[*].when property to false:

json
{
  "contributes": {
    "commands": [
      {
        "command": "extension.doSomething",
        "title": "This requires params"
      }
    ],
    "menus": {
      "commandPalette": [
        {
          "command": "extension.doSomething",
          "when": "false"
        }
      ]
    }
  }
}

See the official documentation for more information.