microsoft/add-setting
> Use when adding a new cmake.* configuration setting. Touches package.json (contributes.configuration), package.nls.json, src/config.ts (interface + getter), "add configuration".
npx skills add https://github.com/microsoft/vscode-cmake-tools --skill add-setting
Recipe for adding a new cmake.* setting to CMake Tools.
| File | What to add |
|------|-------------|
| package.json | Setting declaration in contributes.configuration.properties |
| package.nls.json | English description string |
| src/config.ts | Interface property + EventEmitter + getter |
| docs/cmake-settings.md | Row in the settings table |
| CHANGELOG.md | Entry under the current version |
package.jsonAdd an entry inside contributes.configuration.properties. Key format is cmake.<settingName>.
// package.json → contributes.configuration.properties
"cmake.myNewSetting": {
"type": "boolean",
"default": false,
"description": "%cmake-tools.configuration.cmake.myNewSetting.description%",
"scope": "resource"
}
type — "boolean", "string", "number", "array", "object", or use "oneOf" for union types.default — always required.scope — use "resource" for project-specific settings (most common), "window" for global UI settings, "machine-overridable" for tool paths.description or markdownDescription — must use an NLS key, never a bare string.%cmake-tools.configuration.cmake.<settingName>.description% (wrapped in %).cmake.saveBeforeBuild"cmake.saveBeforeBuild": {
"type": "boolean",
"default": true,
"description": "%cmake-tools.configuration.cmake.saveBeforeBuild.description%",
"scope": "resource"
}
package.nls.jsonAdd the NLS key (without the % wrappers) and its English text:
"cmake-tools.configuration.cmake.myNewSetting.description": "Description of what this setting does."
> Do not modify any file under i18n/. Translations are handled separately.
src/config.ts (three changes)ExtensionConfigurationSettings// src/config.ts → ExtensionConfigurationSettings interface
export interface ExtensionConfigurationSettings {
// ... existing properties ...
myNewSetting: boolean;
}
The type must match what you declared in package.json.
emitters map// src/config.ts → ConfigurationReader.emitters
private readonly emitters: EmittersOf<ExtensionConfigurationSettings> = {
// ... existing emitters ...
myNewSetting: new vscode.EventEmitter<boolean>(),
};
The emitter type parameter must match the interface property type.
Simple pass-through getter (most settings):
get myNewSetting(): boolean {
return this.configData.myNewSetting;
}
Getter with transformation logic (e.g., sourceDirectory normalizes to array):
get sourceDirectory(): string[] {
if (!Array.isArray(this.configData.sourceDirectory)) {
return [this.configData.sourceDirectory];
}
return this.configData.sourceDirectory;
}
docs/cmake-settings.mdAdd a row to the settings table. Keep alphabetical order.
| `cmake.myNewSetting` | Description of what this setting does. | `false` | no |
Table columns:
| Column | Content |
|--------|---------|
| Setting | Backtick-quoted cmake.<name> |
| Description | Plain-English description |
| Default value | Backtick-quoted default |
| Supports substitution | yes if ${variable} expansion applies, otherwise no |
Add an entry under the current version in CHANGELOG.md, in the Features: or Improvements: section.
package.json — setting declared with correct type, default, scope, and NLS keypackage.nls.json — English string addedsrc/config.ts — interface property, emitter, and getter all addeddocs/cmake-settings.md — table row added in alphabetical orderCHANGELOG.md — entry addedyarn compile succeeds (or npm run compile)i18n/ were modified*See also: .github/copilot-instructions.md for project-wide conventions.*
Take microsoft/add-setting from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.