| name | add-command |
| description | Create new VS Code commands with all required boilerplate |
/add-command - Create New Command
Scaffold a new VS Code command with all required boilerplate.
Usage
/add-command [name]
Information Needed
- Command ID — e.g.,
myNewFeature (becomes gitlens.myNewFeature)
- Label — Display name in command palette
- Base class:
GlCommandBase — No editor required (opening panels, showing pickers)
ActiveEditorCommand — Requires active editor
ActiveEditorCachedCommand — Like ActiveEditorCommand with "repeat last command" support
- Variants (optional):
:views, :graph, :scm suffixes for context menus
Files to Create/Modify
1. Command File: src/commands/{commandName}.ts
import type { TextEditor, Uri } from 'vscode';
import type { Container } from '../container.js';
import { command } from '../system/-webview/command.js';
import { {BaseClass} } from './commandBase.js';
export interface {CommandName}CommandArgs {
}
@command()
export class {CommandName}Command extends {BaseClass} {
constructor(private readonly container: Container) {
super([
'gitlens.{commandId}',
]);
}
async execute(editor?: TextEditor, uri?: Uri, args?: {CommandName}CommandArgs): Promise<void> {
}
}
2. Import in src/commands.ts
import './commands/{commandName}.js';
3. Add to contributions.json
Under "commands" key:
"gitlens.{commandId}": {
"label": "{Label}",
"category": "GitLens",
"commandPalette": "gitlens:enabled"
}
For :views variant:
"gitlens.{commandId}:views": {
"label": "{Label}",
"icon": "$(icon-name)",
"menus": {
"view/item/context": [{
"when": "viewItem =~ /gitlens:/ && gitlens:enabled",
"group": "1_gitlens"
}]
}
}
4. Run Generation
pnpm run generate:contributions && pnpm run generate:commandTypes
Common when Clauses
gitlens:enabled — Extension is enabled
!gitlens:readonly — Not in readonly mode
!gitlens:untrusted — Workspace is trusted
gitlens:plus — Pro features available
viewItem =~ /gitlens:commit/ — On a commit node
viewItem =~ /gitlens:branch/ — On a branch node