[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69B67VACEFYYR745B6WBF4J":3,"skill-same:01M69B67VACEFYYR745B6WBF4J":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M69B67VACEFYYR745B6WBF4J","add-setting",null,"Use when adding a new cmake.* configuration setting. Touches package.json (contributes.configuration), package.nls.json, src\u002Fconfig.ts (interface + getter), docs\u002Fcmake-settings.md, and CHANGELOG.md. Triggers: \"add setting\", \"new setting\", \"add configuration\".","microsoft\u002Fvscode-cmake-tools","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69B5ZETEJ3WM91BA2ZYMTYT",1688,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fadd-setting\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"add setting","add","docs","config","cmake","changelog","package","src","json","settings","use","configuration","triggers","interface","when","new","2026-11-10 10:12:30",false,"---\nname: add-setting\ndescription: >\n  Use when adding a new cmake.* configuration setting. Touches package.json\n  (contributes.configuration), package.nls.json, src\u002Fconfig.ts (interface + getter),\n  docs\u002Fcmake-settings.md, and CHANGELOG.md. Triggers: \"add setting\", \"new setting\",\n  \"add configuration\".\n---\n\n# Adding a New Configuration Setting\n\nRecipe for adding a new `cmake.*` setting to CMake Tools.\n\n## Files you must touch\n\n| File | What to add |\n|------|-------------|\n| `package.json` | Setting declaration in `contributes.configuration.properties` |\n| `package.nls.json` | English description string |\n| `src\u002Fconfig.ts` | Interface property + EventEmitter + getter |\n| `docs\u002Fcmake-settings.md` | Row in the settings table |\n| `CHANGELOG.md` | Entry under the current version |\n\n---\n\n## Step 1 — Declare the setting in `package.json`\n\nAdd an entry inside `contributes.configuration.properties`. Key format is `cmake.\u003CsettingName>`.\n\n```jsonc\n\u002F\u002F package.json  →  contributes.configuration.properties\n\"cmake.myNewSetting\": {\n  \"type\": \"boolean\",\n  \"default\": false,\n  \"description\": \"%cmake-tools.configuration.cmake.myNewSetting.description%\",\n  \"scope\": \"resource\"\n}\n```\n\n### Rules\n\n- **`type`** — `\"boolean\"`, `\"string\"`, `\"number\"`, `\"array\"`, `\"object\"`, or use `\"oneOf\"` for union types.\n- **`default`** — always required.\n- **`scope`** — use `\"resource\"` for project-specific settings (most common), `\"window\"` for global UI settings, `\"machine-overridable\"` for tool paths.\n- **`description`** or **`markdownDescription`** — must use an NLS key, never a bare string.\n- **NLS key format:** `%cmake-tools.configuration.cmake.\u003CsettingName>.description%` (wrapped in `%`).\n\n### Real example — `cmake.saveBeforeBuild`\n\n```json\n\"cmake.saveBeforeBuild\": {\n  \"type\": \"boolean\",\n  \"default\": true,\n  \"description\": \"%cmake-tools.configuration.cmake.saveBeforeBuild.description%\",\n  \"scope\": \"resource\"\n}\n```\n\n---\n\n## Step 2 — Add the English string to `package.nls.json`\n\nAdd the NLS key (without the `%` wrappers) and its English text:\n\n```json\n\"cmake-tools.configuration.cmake.myNewSetting.description\": \"Description of what this setting does.\"\n```\n\n> **Do not** modify any file under `i18n\u002F`. Translations are handled separately.\n\n---\n\n## Step 3 — Wire up `src\u002Fconfig.ts` (three changes)\n\n### 3a — Add property to `ExtensionConfigurationSettings`\n\n```typescript\n\u002F\u002F src\u002Fconfig.ts  →  ExtensionConfigurationSettings interface\nexport interface ExtensionConfigurationSettings {\n    \u002F\u002F ... existing properties ...\n    myNewSetting: boolean;\n}\n```\n\nThe type must match what you declared in `package.json`.\n\n### 3b — Add EventEmitter to the `emitters` map\n\n```typescript\n\u002F\u002F src\u002Fconfig.ts  →  ConfigurationReader.emitters\nprivate readonly emitters: EmittersOf\u003CExtensionConfigurationSettings> = {\n    \u002F\u002F ... existing emitters ...\n    myNewSetting: new vscode.EventEmitter\u003Cboolean>(),\n};\n```\n\nThe emitter type parameter must match the interface property type.\n\n### 3c — Add a getter\n\nSimple pass-through getter (most settings):\n\n```typescript\nget myNewSetting(): boolean {\n    return this.configData.myNewSetting;\n}\n```\n\nGetter with transformation logic (e.g., `sourceDirectory` normalizes to array):\n\n```typescript\nget sourceDirectory(): string[] {\n    if (!Array.isArray(this.configData.sourceDirectory)) {\n        return [this.configData.sourceDirectory];\n    }\n    return this.configData.sourceDirectory;\n}\n```\n\n---\n\n## Step 4 — Document in `docs\u002Fcmake-settings.md`\n\nAdd a row to the settings table. Keep alphabetical order.\n\n```markdown\n| `cmake.myNewSetting` | Description of what this setting does. | `false` | no |\n```\n\nTable columns:\n\n| Column | Content |\n|--------|---------|\n| Setting | Backtick-quoted `cmake.\u003Cname>` |\n| Description | Plain-English description |\n| Default value | Backtick-quoted default |\n| Supports substitution | `yes` if `${variable}` expansion applies, otherwise `no` |\n\n---\n\n## Step 5 — Add a CHANGELOG entry\n\nAdd an entry under the current version in `CHANGELOG.md`, in the `Features:` or `Improvements:` section.\n\n---\n\n## Verification checklist\n\n- [ ] `package.json` — setting declared with correct type, default, scope, and NLS key\n- [ ] `package.nls.json` — English string added\n- [ ] `src\u002Fconfig.ts` — interface property, emitter, and getter all added\n- [ ] `docs\u002Fcmake-settings.md` — table row added in alphabetical order\n- [ ] `CHANGELOG.md` — entry added\n- [ ] `yarn compile` succeeds (or `npm run compile`)\n- [ ] No files under `i18n\u002F` were modified\n\n---\n\n*See also: [`.github\u002Fcopilot-instructions.md`](..\u002Fcopilot-instructions.md) for project-wide conventions.*\n","# Adding a New Configuration Setting\n\nRecipe for adding a new `cmake.*` setting to CMake Tools.\n\n## Files you must touch\n\n| File | What to add |\n|------|-------------|\n| `package.json` | Setting declaration in `contributes.configuration.properties` |\n| `package.nls.json` | English description string |\n| `src\u002Fconfig.ts` | Interface property + EventEmitter + getter |\n| `docs\u002Fcmake-settings.md` | Row in the settings table |\n| `CHANGELOG.md` | Entry under the current version |\n\n---\n\n## Step 1 — Declare the setting in `package.json`\n\nAdd an entry inside `contributes.configuration.properties`. Key format is `cmake.\u003CsettingName>`.\n\n```jsonc\n\u002F\u002F package.json  →  contributes.configuration.properties\n\"cmake.myNewSetting\": {\n  \"type\": \"boolean\",\n  \"default\": false,\n  \"description\": \"%cmake-tools.configuration.cmake.myNewSetting.description%\",\n  \"scope\": \"resource\"\n}\n```\n\n### Rules\n\n- **`type`** — `\"boolean\"`, `\"string\"`, `\"number\"`, `\"array\"`, `\"object\"`, or use `\"oneOf\"` for union types.\n- **`default`** — always required.\n- **`scope`** — use `\"resource\"` for project-specific settings (most common), `\"window\"` for global UI settings, `\"machine-overridable\"` for tool paths.\n- **`description`** or **`markdownDescription`** — must use an NLS key, never a bare string.\n- **NLS key format:** `%cmake-tools.configuration.cmake.\u003CsettingName>.description%` (wrapped in `%`).\n\n### Real example — `cmake.saveBeforeBuild`\n\n```json\n\"cmake.saveBeforeBuild\": {\n  \"type\": \"boolean\",\n  \"default\": true,\n  \"description\": \"%cmake-tools.configuration.cmake.saveBeforeBuild.description%\",\n  \"scope\": \"resource\"\n}\n```\n\n---\n\n## Step 2 — Add the English string to `package.nls.json`\n\nAdd the NLS key (without the `%` wrappers) and its English text:\n\n```json\n\"cmake-tools.configuration.cmake.myNewSetting.description\": \"Description of what this setting does.\"\n```\n\n> **Do not** modify any file under `i18n\u002F`. Translations are handled separately.\n\n---\n\n## Step 3 — Wire up `src\u002Fconfig.ts` (three changes)\n\n### 3a — Add property to `ExtensionConfigurationSettings`\n\n```typescript\n\u002F\u002F src\u002Fconfig.ts  →  ExtensionConfigurationSettings interface\nexport interface ExtensionConfigurationSettings {\n    \u002F\u002F ... existing properties ...\n    myNewSetting: boolean;\n}\n```\n\nThe type must match what you declared in `package.json`.\n\n### 3b — Add EventEmitter to the `emitters` map\n\n```typescript\n\u002F\u002F src\u002Fconfig.ts  →  ConfigurationReader.emitters\nprivate readonly emitters: EmittersOf\u003CExtensionConfigurationSettings> = {\n    \u002F\u002F ... existing emitters ...\n    myNewSetting: new vscode.EventEmitter\u003Cboolean>(),\n};\n```\n\nThe emitter type parameter must match the interface property type.\n\n### 3c — Add a getter\n\nSimple pass-through getter (most settings):\n\n```typescript\nget myNewSetting(): boolean {\n    return this.configData.myNewSetting;\n}\n```\n\nGetter with transformation logic (e.g., `sourceDirectory` normalizes to array):\n\n```typescript\nget sourceDirectory(): string[] {\n    if (!Array.isArray(this.configData.sourceDirectory)) {\n        return [this.configData.sourceDirectory];\n    }\n    return this.configData.sourceDirectory;\n}\n```\n\n---\n\n## Step 4 — Document in `docs\u002Fcmake-settings.md`\n\nAdd a row to the settings table. Keep alphabetical order.\n\n```markdown\n| `cmake.myNewSetting` | Description of what this setting does. | `false` | no |\n```\n\nTable columns:\n\n| Column | Content |\n|--------|---------|\n| Setting | Backtick-quoted `cmake.\u003Cname>` |\n| Description | Plain-English description |\n| Default value | Backtick-quoted default |\n| Supports substitution | `yes` if `${variable}` expansion applies, otherwise `no` |\n\n---\n\n## Step 5 — Add a CHANGELOG entry\n\nAdd an entry under the current version in `CHANGELOG.md`, in the `Features:` or `Improvements:` section.\n\n---\n\n## Verification checklist\n\n- [ ] `package.json` — setting declared with correct type, default, scope, and NLS key\n- [ ] `package.nls.json` — English string added\n- [ ] `src\u002Fconfig.ts` — interface property, emitter, and getter all added\n- [ ] `docs\u002Fcmake-settings.md` — table row added in alphabetical order\n- [ ] `CHANGELOG.md` — entry added\n- [ ] `yarn compile` succeeds (or `npm run compile`)\n- [ ] No files under `i18n\u002F` were modified\n\n---\n\n*See also: [`.github\u002Fcopilot-instructions.md`](..\u002Fcopilot-instructions.md) for project-wide conventions.*\n",{"name":5,"description":7},"main","e0969b894e56d8ea5e6641d48a82e5ba3babcc38",".github\u002Fskills\u002Fadd-setting",557,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools","https:\u002F\u002Faka.ms\u002Fvscode-cmake-tools","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-11 06:52:38",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add microsoft\u002Fvscode-cmake-tools --skill add-setting",{"tool":56,"command":57},"bunx","bunx skills add microsoft\u002Fvscode-cmake-tools --skill add-setting",{"tool":59,"command":60},"pnpm","pnpm dlx skills add microsoft\u002Fvscode-cmake-tools --skill add-setting","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fadd-setting\u002FSKILL.md",true,[],[65,97,116,133,169,186],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":35},"01M69B6J924HHBDH1G30RG9DT3","validation-project","Creates a validation project for testing a specific vscode-cmake-tools pull request. Use this skill when asked to create a validation project, test a PR, validate a pull request, or set up a PR validation environment. The skill creates a structured project directory with documentation, metadata, and checklists for systematically validating PR changes.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fvalidation-project\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[77,78,79,80,81,82,83,84,85,86,87,23,88,89,90,91,92,29,93,94,95,96,33],"validation project","validation","project","testing","directory","test","vscode","validate","documentation","pr","pull request","create","pull","SET","Tools","environment","up","with","for","request",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":35},"01M69B6FDXF7VSNN4VH8MJ2230","presets-vs-kits","Use when writing or reviewing code that must work in both CMake Presets and Kits\u002FVariants modes. Covers configure, build, test, environment, and generator paths. Triggers: \"presets vs kits\", \"useCMakePresets\", \"works in both modes\".","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpresets-vs-kits\u002FSKILL.md",[103],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},[105,106,82,23,107,108,109,92,29,110,31,111,112,113,114,115,33],"presets vs kits","writing","code","configure","work","build","paths","reviewing code","generator","modes","variants",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":35},"01M69B6CQT3K9X5HSCQ10ZX54T","pr-readiness","Verify that a pull request into microsoft\u002Fvscode-cmake-tools meets contribution requirements. Use when preparing, reviewing, or finalizing a PR to check for a descriptive title, a meaningful description, a properly formatted CHANGELOG entry, code correctness, regression risks, adherence to existing patterns, and whether documentation updates are needed.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpr-readiness\u002FSKILL.md",[],[86,123,124,9,83,85,87,23,107,24,89,125,126,29,127,128,129,130,95,131,132,33],"pr readiness","readiness","regression","check","requirements","contribution","correctness","updates","Existing","title",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":154,"publishedAt":35},"01M69B69SPZQSR8YNAZMMNERE4","backend-tests","Use when writing unit tests under test\u002Funit-tests\u002Fbackend\u002F*.test.ts that run in Node with Mocha+Chai and no VS Code API. For pure logic: parsers, helpers, env merging. Triggers: \"backend test\", \"unit test\", \"mocha test without vscode\".","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbackend-tests\u002FSKILL.md",[139,140,143,146,151],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},{"categoryNo":141,"categoryName":142,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":144,"categoryName":145,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":147,"categoryName":148,"taxonomyType":149,"taxonomyTypeDesc":150},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":152,"categoryName":153,"taxonomyType":149,"taxonomyTypeDesc":150},"01JBSEEDCAT000000000000036","内容创作者",[155,156,157,106,82,83,158,159,107,160,161,162,29,31,163,164,165,166,95,167,33,168],"backend tests","backend","tests","unit tests","run","api","parsers","node","chai","unit","unit-tests","mocha","unit test","helpers",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":35},"01M69B64R9S01TGSH17SSHW9V6","add-diagnostic-parser","Use when adding a compiler or tool output parser for the Problems panel. Touches src\u002Fdiagnostics\u002F\u003Cname>.ts, src\u002Fdiagnostics\u002Fbuild.ts, package.json (cmake.enabledOutputParsers), and package.nls.json. Triggers: \"add parser\", \"new diagnostic parser\", \"parse compiler output\".","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fadd-diagnostic-parser\u002FSKILL.md",[],[176,177,20,178,179,180,23,25,181,26,182,29,110,31,183,184,95,185,33,34],"add diagnostic parser","parser","add diagnostic","diagnostic","diagnostics","compiler","tool","panel","output","parse",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":192,"publishedAt":35},"01M69B622J8838QDVAQMQ0854Z","add-command","Use when adding a new cmake.* command to CMake Tools. Touches package.json (contributes.commands), package.nls.json, src\u002Fextension.ts (funs array), and CHANGELOG.md. Triggers: \"add command\", \"register command\", \"new command palette entry\".","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-cmake-tools\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fadd-command\u002FSKILL.md",[],[193,194,20,23,195,24,25,91,26,27,29,196,31,197,198,199,200,33,34],"add command","command","command palette","commands","extension","register","palette","entry"]