====== VSCode Extension Checklist ====== Specific checks for VSCode Extensions with pas2js. This checklist supplements the [[.:audit-core|Core Checklist]] for VSCode extensions. ===== Required Checks ===== ==== Activation Events ==== [ ] Activation Events are minimal and correct [ ] No "activate on *" unless justified [ ] Events match actual functionality **Example package.json:** { "activationEvents": [ "onCommand:wvds.build.run", "onLanguage:pascal", "workspaceContains:**/*.lpr" ] } ==== Performance ==== [ ] No long-running operations on Extension Host Thread [ ] Async work is cancellable (Cancellation Token) [ ] Progress reporting for long operations **Example: Cancellable Operation:** procedure LongOperation(AToken: TCancellationToken); begin while not Finished do begin if AToken.IsCancellationRequested then begin Logger.Info(rsOperationCancelled); Exit; end; ProcessNextItem; end; end; ==== Commands ==== [ ] Commands have consistent IDs [ ] All Commands have title and category [ ] Command grouping is logical **Naming Convention:** wvds.. └── wvds.build.run └── wvds.build.clean └── wvds.projects.create ==== Settings ==== [ ] All Settings in contributes.configuration [ ] Settings are documented (description) [ ] Settings have secure defaults [ ] Settings are validated **Example:** { "contributes": { "configuration": { "title": "WvdS Toolchain", "properties": { "wvds.toolchain.fpcPath": { "type": "string", "default": "", "description": "Path to fpc.exe. Leave empty for auto-detection." } } } } } ==== Security ==== [ ] External tool calls validated/sanitized [ ] Workspace paths treated as untrusted [ ] No Command Injection possible [ ] shell: false for Spawn calls **Example: Secure Tool Call:** (* FORBIDDEN - Command Injection possible *) Exec('fpc ' + UserInput); (* CORRECT - Secure alternative *) var Options: TSpawnOptions; begin Options.shell := False; Options.cwd := ValidatedPath; Spawn('fpc', ['-O2', ValidatedInput], Options); end; ==== Cross-Platform ==== [ ] Paths are cross-platform safe [ ] Encodings considered (UTF-8) [ ] Line Endings considered [ ] Path separators correct (use PathJoin) ==== package.json Metadata ==== [ ] publisher set [ ] name correct (lowercase, hyphens) [ ] version follows SemVer [ ] license specified [ ] repository linked [ ] engines.vscode set to minimum version ==== Marketplace Assets ==== [ ] README.md present and current [ ] CHANGELOG.md with version history [ ] Icon present (128x128 PNG) [ ] Screenshots for complex features ===== pas2js-Specific Checks ===== ==== Compilation ==== [ ] Compiles without errors with pas2js [ ] No pas2js-incompatible features used [ ] No class var (use Unit-Level Variable instead) [ ] No Int64 (use Integer instead) [ ] No // comments in asm blocks ==== Entry Point Pattern ==== [ ] extension_main.pas present [ ] Activate/Deactivate exported [ ] Initialization block calls ExportActivateDeactivate **Template:** unit extension_main; {$mode objfpc}{$H+} interface uses JS, VSCode.API, WvdS.VSCode.ExtensionExports; procedure Activate(AContext: TExtensionContext); procedure Deactivate; implementation procedure Activate(AContext: TExtensionContext); begin (* Initialization *) end; procedure Deactivate; begin (* Cleanup *) end; initialization ExportActivateDeactivate(@Activate, @Deactivate); end. ==== SSOT for VSCode APIs ==== [ ] VSCode APIs via ~/sources/common/web/vscode/ [ ] No direct require('vscode') in Extensions [ ] WvdS.VSCode.* Wrapper used ===== Recommended Checks ===== [ ] Progress Reporting for operations > 1s [ ] Cancellation Tokens implemented [ ] Debouncing for File Watching [ ] Extension size minimized [ ] No unnecessary binaries/assets ===== Optional Checks ===== [ ] Smoke Tests (Activation + Command) [ ] Offline mode when Remote Services used [ ] Telemetry documented (or none) ===== VSIX Creation ===== ==== Build Process ==== # 1. Compile Pascal to JavaScript pas2js @../../common/wvds_common.pas2js.cfg @build.cfg pas/extension_main.pas # 2. Package VSIX vsce package --no-dependencies # 3. Validate vsce ls ==== Pre-VSIX Creation Checks ==== [ ] dist/extension_main.js present [ ] package.json version incremented [ ] CHANGELOG.md updated [ ] README.md current [ ] No debug artifacts included [ ] .vscodeignore correctly configured ===== Quick Checklist for Copying ===== Review Checklist (VSCode Extension): Required: - [ ] Minimal Activation Events - [ ] No blocking operations - [ ] Commands with IDs, titles, categories - [ ] Settings documented and validated - [ ] Tool calls sanitized (shell: false) - [ ] Cross-Platform safe (paths, encodings) - [ ] package.json Metadata complete pas2js: - [ ] Compiles without errors - [ ] No pas2js-incompatible features - [ ] Entry Point Pattern followed - [ ] SSOT for VSCode APIs Assets: - [ ] README.md present - [ ] CHANGELOG.md current - [ ] Icon present ===== See Also ===== * [[.:qualitaetssicherung|Quality Assurance Overview]] * [[.:audit-core|Core Checklist]] * [[.:extension-entwicklung|Extension Development]] * [[.:code-konventionen|Code Conventions (pas2js)]] * [[.:build-pipeline|Build Pipeline]]