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(becomesgitlens.myNewFeature) - Label — Display name in command palette
- Base class:
GlCommandBase— No editor required (opening panels, showing pickers)ActiveEditorCommand— Requires active editorActiveEditorCachedCommand— Like ActiveEditorCommand with "repeat last command" support
- Variants (optional):
:views,:graph,:scmsuffixes 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 {
// Define args if needed
}
@command()
export class {CommandName}Command extends {BaseClass} {
constructor(private readonly container: Container) {
super([
'gitlens.{commandId}',
// Add variants here
]);
}
async execute(editor?: TextEditor, uri?: Uri, args?: {CommandName}CommandArgs): Promise<void> {
// TODO: Implement
}
}
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 trustedgitlens:plus— Pro features availableviewItem =~ /gitlens:commit/— On a commit nodeviewItem =~ /gitlens:branch/— On a branch node