Description

August 1, 2026 ยท View on GitHub

As the 'My Dev Tools' extension is primarily intended to serve my needs it may be very limited in its configuration possibilities, but I will try to change this over time.

If there is a larger group of common functions in the extension then this will be separated into a separate extension as soon as the collection of these functions becomes large enough. I do not want the extension to grow indefinitely.

Features:

General

OptionAvailable inDescription
Go to nearest index.tsCommand paletteOpen nearest index.ts file in one of the parent folders.
Add to exports in index.tsCommand paletteAdd selected symbol to exports in nearest index.ts. If no symbol is selected then everything will be exported (export *)
Convert EOL to LFCommand paletteConvert line endings from CRLF/CR to LF for files matching a glob pattern. Prompts for pattern (default: **/*).
Delete empty directoriesCommand paletteRecursively finds and deletes all empty directories in the workspace. Directories containing any file are skipped. Directories matching .gitignore patterns (e.g. node_modules) are skipped.
Rename to...File context menu / Command paletteRename file to camelCase, PascalCase, snake_case or kebab-case.
Auto renameFile context menu / Command paletteAutomatically rename file based on exported symbols (class, function, interface, etc.). Uses configurable naming strategy.
Toggle File VisibilityExplorer toolbarToggle visibility of files in Explorer based on workspace files.exclude patterns. Eye icon appears when patterns exist.

Auto Rename

The Auto rename feature intelligently renames files based on their exported symbols:

Configuration: Set myDevTools.autoRenameStrategy in your VS Code settings:

  1. Open VS Code settings (File > Preferences > Settings)
  2. Search for "My Dev Tools"
  3. Select your preferred "Auto Rename Strategy" from the dropdown

Or add this to your settings.json:

"myDevTools.autoRenameStrategy": "kebab-case"

Toggle File Visibility

This feature allows you to quickly hide or show files in the Explorer based on your workspace files.exclude settings:

How it works:

  1. Configure patterns in your workspace settings (.vscode/settings.json):
    {
      "files.exclude": {
        "**/node_modules": false,
        "**/dist": false,
        "**/.git": false
      }
    }
    
  2. An eye icon appears in the Explorer toolbar when patterns exist
  3. Click the icon to toggle between hiding and showing the configured files
    • Eye icon (open): Files are visible, click to hide
    • Eye-closed icon: Files are hidden, click to show

Note: The icon only appears when you have files.exclude patterns configured in your workspace settings. If no patterns exist, the icon won't be shown.

React

OptionAvailable inDescription
Update Props DestructuringAutomatic / Command paletteUpdates the props destructuring object in React components to match the Props interface. Can be triggered manually or automatically.
Add empty props to React componentCommand paletteAdds an empty Props interface to a React component that doesn't have any props.
Add undefined props to interfaceCommand paletteDetects undefined symbols used in JSX and adds them to the Props interface with smart type guessing.
Add className to React PropsCommand paletteAdds className?: string to the Props interface. Creates Props interface if it doesn't exist.

Git

OptionAvailable inDescription
Generate Commit Message (My Dev Tools)Source Control title bar / Command paletteWrites a Conventional Commits message for the pending change, using any model available through OpenRouter.
Quick CommitSource Control context menuRight-click on one or multiple files in the Source Control panel to stage and commit them with a single action.
Auto StageSource Control panel / Command paletteStages every changed file that is the same code as the version already staged, only reformatted.
Stage Active FileCtrl+Alt+S in a diff / Command paletteStages the file you are currently looking at, without leaving the diff editor.

Generate Commit Message

Fills the Source Control message box with a message that follows Conventional Commits. Press the sparkle icon in the Source Control title bar, or run "Generate Commit Message (My Dev Tools)" from the palette.

Before the first use, run "Set OpenRouter API Key" and paste a key from openrouter.ai/keys. It is kept in VS Code's secret storage; OPENROUTER_API_KEY in the environment is used as a fallback. The model is myDevTools.openRouter.model and can be anything OpenRouter serves.

Whatever you have already typed into the message box is sent along as a hint about your intent, then replaced by the finished message.

Settings

SettingDefaultPurpose
myDevTools.openRouter.modelopenai/gpt-5.6-lunaAny model id OpenRouter serves.
myDevTools.openRouter.baseUrlhttps://openrouter.ai/api/v1For a proxy or a self-hosted gateway.
myDevTools.commitMessage.maxDiffCharacters80000Character budget for the diff.
myDevTools.commitMessage.stripImportsAboveLines200Line count past which import churn is dropped.
myDevTools.commitMessage.excludeGlobslock files, bundles, dist/Paths listed by name but never diffed.
myDevTools.commitMessage.maxDiffLineLength160Each diff line is truncated to this length. 0 sends every line in full.
myDevTools.commitMessage.summarizeAddedScriptsAboveLines60A new .ts/.js file longer than this is sent as declarations only. 0 disables it.
myDevTools.commitMessage.outlineAddedMarkdownAboveLines150A new Markdown file longer than this is sent as headings only. 0 disables it.
myDevTools.commitMessage.additionalInstructionsemptyAppended to the prompt, for project-specific conventions.

Not working yet: the button inside the message box

Out of the box you get the title bar icon only. The sparkle inside the commit message box - where Copilot's sits - does not appear, and cannot be made to appear by installing the extension.

That spot is the scm/inputBox contribution point, which is still a proposed API (contribSourceControlInputBoxMenu). VS Code ignores proposed contributions from any extension not explicitly allowed on the machine, so there is no way to ship it enabled - that gate is the whole point of a proposed API.

To turn it on for yourself, run "Preferences: Configure Runtime Arguments" from the palette, add the extension to argv.json, and restart VS Code:

{
    "enable-proposed-api": ["przpl.my-dev-tools"]
}

Caveats once you have done that:

  • It is per machine. Every machine you use needs the same argv.json edit; it does not travel with Settings Sync.
  • It can break on a VS Code update. If the proposal is ever finalized, renamed, or dropped, the button disappears again until the extension is rebuilt against whatever replaced it.
  • Everything else works without it. The title bar icon and the palette command are on stable API and need no flags.

Quick Commit

This feature allows you to quickly stage and commit selected files from the Source Control panel:

  1. Open the Source Control panel (Ctrl+Shift+G)
  2. Right-click on one or more changed files
  3. Select "Quick Commit..." from the context menu
  4. Write the commit message in the editor that opens, or press the sparkle icon to have one written from the diff of just those files
  5. Press Ctrl+Enter (Cmd+Enter on macOS), or the check mark in the editor title bar, to stage and commit the selection

Auto Stage

Stages the changes that are not worth reading, so that what is left in the Changes group is only what you actually need to review.

  1. Open the Source Control panel (Ctrl+Shift+G)
  2. Click the sparkle icon on the "Changes" group header, or right-click the group and select "Auto Stage"

A file qualifies when its working-tree version is the same code as the version already in the index, only laid out differently. Both versions are parsed and compared, so the verdict never depends on how the diff happens to be laid out.

Covered formats: .ts .tsx .mts .cts .js .jsx .mjs .cjs, .json .jsonc (including files that carry comments, such as tsconfig.json), and .css .scss .less.

Everything else is left for you to read: any real content change, added, deleted, untracked and conflicted files, mode-only changes, lock files, and every format where whitespace is content - Markdown, YAML, Python, plain text - where an "invisible" change can quietly be a different document.

The classification is deliberately a separate step from the staging, so further rules can be added over time without changing how the command behaves.

Stage Active File

Staging one file at a time from the Source Control panel means moving the mouse back and forth between the diff and the list. This command stages whatever file is in front of you instead:

  1. Open a changed file as a diff
  2. Press Ctrl+Alt+S (Cmd+Alt+S on macOS)

It works from either side of the diff, from a diff tab that does not have focus in its content, and on the file the caret sits in inside a multi-diff editor. Outside a diff editor the shortcut is inactive, but the command is still available in the palette for the file in the active editor.

Note: when reviewing changes in the multi-diff editor ("Open All Changes"), VS Code's built-in Git extension already puts a + button in each file's header toolbar that does the same thing with one click.

Update Props Destructuring

This feature helps keep your React component props up-to-date with their interface definitions:

  • Can be manually triggered using the "Update React Props destructuring" command in the command palette.
  • Automatic real-time updates are disabled by default but can be enabled in settings.
  • Real-time updates can be toggled on/off using the "Toggle React Real-Time Props Update" command.
  • Configuration: Set myDevTools.enableRealTimePropsUpdate to true or false (default) in your VS Code settings.

To enable real-time updates:

  1. Open VS Code settings (File > Preferences > Settings)
  2. Search for "My Dev Tools"
  3. Check the box next to "Enable real-time updates for React Props destructuring"

Or add this to your settings.json:

"myDevTools.enableRealTimePropsUpdate": true

NestJS

OptionAvailable inDescription
Create controllerFolder context menuRight click on a folder and select the option to create a new controller. The controller will be automatically registered in the nearest module.
Go to NestJS moduleCommand paletteOpen nearest module file (*.module.ts) in one of the parent folders.