Stop wasting CPU cycles searching for PHP files.
PHP Classmap Watcher is a lightweight VS Code extension for any PHP project.
It automatically generates a high-performance classmap, replacing expensive recursive autoloading with instant O(1) lookups.
Think of it as Composer-style optimized autoloading, without requiring Composer.
Works with WordPress plugins, Laravel, Symfony, custom frameworks — any PHP project.
- ⚡ Lightning-Fast Autoloading — replace filesystem scans with direct array lookups
- 🔄 Automatic Rebuilding — updates instantly when files are created, renamed or deleted
- 👁 Window Focus Rebuild — detects changes made outside VS Code (terminal, git) when you switch back
- 📁 Multi-Directory Support — scan multiple folders, each gets its own classmap file
⚠️ Smart Warnings — alerts on duplicate class names and multiple classes per file- 🚫 Directory Exclusions — skip
tests/,fixtures/or any folder;vendor,node_modules,.gitalways excluded - 📊 Status Bar Integration — live class count, rebuild progress, warning badge
- 🖱 Right-Click Rebuild — trigger rebuild from Explorer or editor context menu
- 🚫 No Composer Required
- 🚫 No PSR-4 Required — files can live anywhere, named anything
Traditional autoloaders do this on every request:
// Scans filesystem on every class load
foreach ($paths as $path) {
if (file_exists($path . $class . '.php')) {
require_once $path . $class . '.php';
}
}PHP Classmap Watcher converts that into:
// One hash lookup — no filesystem scan
if (isset($classMap[$class])) {
require $classMap[$class];
}| Traditional | Classmap | |
|---|---|---|
| Lookup cost | O(n) filesystem stats | O(1) hash lookup |
| Miss cost | Scans all paths | 1 hash lookup, done |
| OPcache friendly | ✗ | ✅ array interned in shared memory |
| PSR-4 required | Often | Never |
Install directly from the VS Code Marketplace:
👉 https://marketplace.visualstudio.com/items?itemName=saurab-gupta.wp-classmap-watcher
Or via VS Code:
- Open Extensions (
Ctrl + Shift + X) - Search:
PHP Classmap Watcher - Click Install
Paths are absolute. Add to your global VS Code settings (Ctrl + , → open settings.json):
{
"wpClassmap.directories": [
{
"includesDir": "/home/user/my-plugin/includes",
"outputFile": "/home/user/my-plugin/classmap.php",
"exclude": ["tests", "fixtures"]
}
]
}Multiple directories — each gets its own classmap file:
{
"wpClassmap.directories": [
{
"includesDir": "/home/user/my-plugin/includes",
"outputFile": "/home/user/my-plugin/includes/classmap.php"
},
{
"includesDir": "/home/user/my-plugin/src",
"outputFile": "/home/user/my-plugin/src/classmap.php"
}
]
}| Setting | Type | Default | Description |
|---|---|---|---|
wpClassmap.directories |
array |
[] |
List of { includesDir, outputFile, exclude? } |
wpClassmap.exclude |
array |
[] |
Directory names excluded from all scans |
wpClassmap.watchOnSave |
boolean |
false |
Also rebuild when a PHP file is saved |
vendor,node_modules, and.gitare always excluded regardless of config.
Add this to your main bootstrap file:
<?php
$classMap = require __DIR__ . '/classmap.php';
$base = __DIR__ . '/includes/';
spl_autoload_register(function (string $class) use ($classMap, $base): void {
if (!isset($classMap[$class])) return; // O(1) — only check on miss
require $base . $classMap[$class]; // direct require on hit
});- Miss = 1 hash lookup, nothing else
- Hit = 1 hash lookup +
require - No
str_replace, no path derivation, no filesystem stat
<?php
// Auto-generated by PHP Classmap Watcher — 2025-01-01T00:00:00.000Z
// Do not edit manually.
return array(
'MyPlugin\\Admin\\Settings' => 'Admin/Settings.php',
'MyPlugin\\Api\\Routes' => 'Api/Routes.php',
'MyPlugin\\Core\\Loader' => 'Core/Loader.php',
);| Command | Description |
|---|---|
PHP: Rebuild Classmap(s) |
Force a full rebuild of all configured directories |
PHP: Add Classmap Directory |
Add a new directory via prompt |
Right-click any .php file or folder in the Explorer → PHP: Rebuild Classmap
$(symbol-class) Classmap: 42 — idle, 42 classes indexed
$(sync~spin) Rebuilding... — rebuild in progress
$(check) Classmap: 42 — just finished
$(warning) Classmap: 42 $(warning)3 — finished with 3 warnings
$(error) Classmap: 1 error(s) — a directory was not found
Click the status bar item at any time to trigger a manual rebuild.
The extension warns about:
- Multiple classes in one file — only the first is mapped; split into separate files
- Duplicate class names — same fully-qualified class in two files; last one wins
Warnings appear as VS Code notifications with a Show Files / Show Details action.
The watcher covers file changes inside VS Code. For changes made outside (terminal, git):
- Window focus — the map automatically rebuilds whenever you switch back to VS Code
- Right-click rebuild — manually trigger from Explorer or editor at any time
- VS Code 1.70+
- Any PHP project (WordPress, Laravel, Symfony, custom)
- PHP files must declare
namespaceandclass/interface/trait/enum
Supported platforms: Windows · macOS · Linux
Does not require Composer, PSR-4, vendor directories, or any third-party libraries.
npm install
npm run package # compiles TypeScript + produces .vsixInstall the .vsix:
code --install-extension php-classmap-watcher-0.2.0.vsixMIT