Diff CommitDiff Commit is a VSCode extension that helps you generate commit messages following the conventional commits specification using Anthropic's AI models like Claude 3.5 Sonnet. Commit messages are generated using the diff of staged changes and entered directly into the SCM message input or previewed in a new editor window. The generated commit messages are compatible with googleapis/release-please and other tools that use conventional commits. Table of Contents
Features
Requirements
InstallationInstall the extension directly from the Visual Studio Code Marketplace or:
Typical Workflow
CommandsDiffCommit commands can be accessed from the Command Palette (Cmd/Ctrl + Shift + P) or using the default keyboard shortcuts.
|
Platform | Keyboard Shortcut |
---|---|
macOS | Cmd + K → Cmd + G |
Linux | Ctrl + K → Ctrl + G |
Windows | Ctrl + K → Ctrl + G |
DiffCommit: Preview Commit Message
This will generate a commit message for staged changes and open it in a new editor window. You can preview and edit the generated message before committing.
Platform | Keyboard Shortcut |
---|---|
macOS | Cmd + K → Cmd + P |
Linux | Ctrl + K → Ctrl + P |
Windows | Ctrl + K → Ctrl + P |
DiffCommit: Update API Key
This will update the Anthropic API key used for API access.
- Enter your API key when prompted
- Press Enter to confirm or Esc to cancel
DiffCommit: Delete API Key
This will delete the stored API key from your system and prevent DiffCommit from accessing the API in the future.
Configuration
DiffCommit provides the following settings to customise its behavior.
diffCommit.allowedTypes
A list of allowed commit types. If provided, this replaces the default options. You need to ensure all required commit types are included in the list.
Type | Description | Default Value |
---|---|---|
Array<string> | A list (array) of any string/s you want available as commit types | [ "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "style", "test" ] |
[!WARNING] Changing the default, replaces the option value. If you set this option, be sure to include a complete list of all required commit types.
diffCommit.customInstructions
Add additional custom instructions to the commit generation prompt. Useful for providing context or specific requirements like 'Use Australian English spelling'.
Type | Description | Default Value |
---|---|---|
string | Free formatted string that you want included as custom instructions for the AI prompt | "" |
diffCommit.model
The Anthropic AI model to use for generating commit messages.
Type | Options | Default Value |
---|---|---|
enum | "claude-3-5-sonnet-latest" | "claude-3-5-haiku-latest" |
"claude-3-5-haiku-latest" | ||
"claude-3-opus-latest" | ||
"claude-3-sonnet-20240229" | ||
"claude-3-haiku-20240307" |
diffCommit.maxTokens
Maximum number of tokens to generate in the response. Higher values allow for longer commit messages but use more API tokens.
Type | Minimum | Maximum | Default Value |
---|---|---|---|
number | 1 | 8192 | 1024 |
diffCommit.temperature
Controls randomness in the response. Lower values (like 0.3) produce more focused and consistent commit messages, while higher values introduce more variety.
[!TIP] For concise, focused & repeatable commit messages, use a value in the range of 0.1 to 0.4.
If you want a little more creativity or more room for the AI model to interpret the reason for changes, try a higher value like 0.7.
Type | Minimum | Maximum | Default Value |
---|---|---|---|
number | 0 | 1 | 0.3 |
Error Handling
Diff Commit provides clear feedback for various scenarios to help troubleshoot issues. Here are the common messages you might encounter:
Error | Description | |
---|---|---|
Git Related | Git extension not found in VSCode | VSCode's Git extension is not installed or enabled |
No Git repository found in the current workspace | The current workspace is not a Git repository | |
No workspace folder found | No workspace is open in VSCode | |
No changes detected | No staged changes found to generate a commit message for | |
API Key Related | API key is missing or not provided | No API key has been set |
Invalid API key format (should start with sk-ant-api) | The provided API key doesn't match the expected format | |
Failed to access or update secure storage | Unable to store or retrieve the API key from secure storage | |
Anthropic API Errors | Bad Request: Review your prompt and try again | Invalid request to the Anthropic API (400) |
Unauthorized: Invalid API key, update your API key and try again | The API key is invalid or expired (401) | |
Forbidden: Permission denied, update your API key and try again | The API key doesn't have permission for this operation (403) | |
Rate Limited: Too many requests, try again later | You've exceeded your API rate limit (429) | |
Server Error: Anthropic API server error | An error occurred on Anthropic's servers (500) | |
Other Errors | Failed to write commit message to Source Control | Unable to update the SCM input box with the generated message |
Failed to open commit message preview | Unable to open the preview editor | |
No commit message was generated by the API | The API response didn't contain a valid commit message |
Each error includes specific guidance on how to resolve the issue. For persistent problems, please check your configuration and if appropriate, raise an issue on GitHub.
Contributing
Feature requests, suggestions and contributions to Diff Commit are welcome! Please feel free to submit an idea or Pull Request.
Local Development
- Clone the repository
- Install dependencies:
pnpm install
- Build the extension:
pnpm compile
- Run the tests:
pnpm test
Local Testing
- Press F5 (Cmd/Ctrl + Shift + P and select
Debug: Start Debugging
) to start the debugger - This will open a new VSCode window with the extension loaded
- Make changes to files and use the source control panel to test the extension
License
This project is licensed under the MIT License.