====== 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]]