VSCode Extension Checkliste

Spezifische Prüfungen für VSCode Extensions mit pas2js.

Diese Checkliste ergänzt die Core-Checkliste für VSCode-Extensions.

Pflicht-Prüfungen

Activation Events

[ ] Activation Events sind minimal und korrekt
[ ] Kein "activate on *" außer wenn begründet
[ ] Events entsprechen tatsächlicher Funktionalität

Beispiel package.json:

{
  "activationEvents": [
    "onCommand:wvds.build.run",
    "onLanguage:pascal",
    "workspaceContains:**/*.lpr"
  ]
}

Performance

[ ] Keine lang-laufenden Operationen auf Extension Host Thread
[ ] Async-Arbeit ist abbrechbar (Cancellation Token)
[ ] Progress-Reporting für lange Operationen

Beispiel: 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 haben konsistente IDs
[ ] Alle Commands haben Titel und Kategorie
[ ] Command-Gruppierung ist logisch

Naming Convention:

wvds.<domain>.<action>
  └── wvds.build.run
  └── wvds.build.clean
  └── wvds.projects.create

Settings

[ ] Alle Settings in contributes.configuration
[ ] Settings sind dokumentiert (description)
[ ] Settings haben sichere Defaults
[ ] Settings werden validiert

Beispiel:

{
  "contributes": {
    "configuration": {
      "title": "WvdS Toolchain",
      "properties": {
        "wvds.toolchain.fpcPath": {
          "type": "string",
          "default": "",
          "description": "Path to fpc.exe. Leave empty for auto-detection."
        }
      }
    }
  }
}

Sicherheit

[ ] Externe Tool-Aufrufe validiert/sanitisiert
[ ] Workspace-Pfade als untrusted behandelt
[ ] Keine Command Injection möglich
[ ] shell: false bei Spawn-Aufrufen

Beispiel: Sicherer Tool-Aufruf:

(* VERBOTEN - Command Injection möglich *)
Exec('fpc ' + UserInput);
 
(* KORREKT - Sichere Alternative *)
var
  Options: TSpawnOptions;
begin
  Options.shell := False;
  Options.cwd := ValidatedPath;
  Spawn('fpc', ['-O2', ValidatedInput], Options);
end;

Cross-Platform

[ ] Pfade sind cross-platform safe
[ ] Encodings berücksichtigt (UTF-8)
[ ] Line Endings berücksichtigt
[ ] Path-Separatoren korrekt (PathJoin verwenden)

package.json Metadata

[ ] publisher gesetzt
[ ] name korrekt (Kleinbuchstaben, Bindestriche)
[ ] version folgt SemVer
[ ] license angegeben
[ ] repository verlinkt
[ ] engines.vscode auf minimale Version gesetzt

Marketplace Assets

[ ] README.md vorhanden und aktuell
[ ] CHANGELOG.md mit Version-Historie
[ ] Icon vorhanden (128x128 PNG)
[ ] Screenshots für komplexe Features

pas2js-spezifische Prüfungen

Compilation

[ ] Kompiliert ohne Fehler mit pas2js
[ ] Keine pas2js-inkompatiblen Features verwendet
[ ] Keine class var (Unit-Level Variable statt)
[ ] Keine Int64 (Integer statt)
[ ] Keine // Kommentare in asm-Blöcken

Entry Point Pattern

[ ] extension_main.pas vorhanden
[ ] Activate/Deactivate exportiert
[ ] Initialization-Block ruft ExportActivateDeactivate auf

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
  (* Initialisierung *)
end;
 
procedure Deactivate;
begin
  (* Cleanup *)
end;
 
initialization
  ExportActivateDeactivate(@Activate, @Deactivate);
 
end.

SSOT für VSCode APIs

[ ] VSCode APIs via ~/sources/common/web/vscode/
[ ] Kein direkter require('vscode') in Extensions
[ ] WvdS.VSCode.* Wrapper verwendet

Empfohlene Prüfungen

[ ] Progress Reporting für Operationen > 1s
[ ] Cancellation Tokens implementiert
[ ] Debouncing bei File Watching
[ ] Extension-Größe minimiert
[ ] Keine unnötigen Binaries/Assets

Optionale Prüfungen

[ ] Smoke Tests (Activation + Command)
[ ] Offline-Modus wenn Remote-Services genutzt
[ ] Telemetrie dokumentiert (oder keine)

VSIX-Erstellung

Build-Prozess

# 1. Pascal zu JavaScript kompilieren
pas2js @../../common/wvds_common.pas2js.cfg @build.cfg pas/extension_main.pas
 
# 2. VSIX packen
vsce package --no-dependencies
 
# 3. Validieren
vsce ls

Vor VSIX-Erstellung prüfen

[ ] dist/extension_main.js vorhanden
[ ] package.json version erhöht
[ ] CHANGELOG.md aktualisiert
[ ] README.md aktuell
[ ] Keine Debug-Artefakte enthalten
[ ] .vscodeignore korrekt konfiguriert

Schnell-Checkliste zum Kopieren

Review-Checkliste (VSCode Extension):

Pflicht:
- [ ] Minimale Activation Events
- [ ] Keine blockierenden Operationen
- [ ] Commands mit IDs, Titeln, Kategorien
- [ ] Settings dokumentiert und validiert
- [ ] Tool-Aufrufe sanitisiert (shell: false)
- [ ] Cross-Platform safe (Pfade, Encodings)
- [ ] package.json Metadata vollständig

pas2js:
- [ ] Kompiliert ohne Fehler
- [ ] Keine pas2js-inkompatiblen Features
- [ ] Entry Point Pattern eingehalten
- [ ] SSOT für VSCode APIs

Assets:
- [ ] README.md vorhanden
- [ ] CHANGELOG.md aktuell
- [ ] Icon vorhanden

Siehe auch

Zuletzt geändert: den 29.01.2026 um 15:13