Use when adding a new cmake.* configuration setting. Touches package.json (contributes.configuration), package.nls.json, src/config.ts (interface + getter), docs/cmake-settings.md, and CHANGELOG.md. Triggers: "add setting", "new setting", "add configuration".
71
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
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 modifiedSee also: .github/copilot-instructions.md for project-wide conventions.
916baba
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.