Checklist Extension VSCode

Verifiche specifiche per Extension VSCode con pas2js.

Questa checklist integra la Checklist Core per Extension VSCode.

Verifiche Obbligatorie

Activation Events

[ ] Gli Activation Events sono minimali e corretti
[ ] Nessun "activate on *" tranne se giustificato
[ ] Gli Events corrispondono alla funzionalità effettiva

Esempio package.json:

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

Performance

[ ] Nessuna operazione lunga sul thread Extension Host
[ ] Il lavoro async è cancellabile (Cancellation Token)
[ ] Progress-Reporting per operazioni lunghe

Esempio: Operazione Cancellabile:

procedure LongOperation(AToken: TCancellationToken);
begin
  while not Finished do
  begin
    if AToken.IsCancellationRequested then
    begin
      Logger.Info(rsOperationCancelled);
      Exit;
    end;
    ProcessNextItem;
  end;
end;

Commands

[ ] I Commands hanno ID coerenti
[ ] Tutti i Commands hanno titolo e categoria
[ ] Il raggruppamento dei Command è logico

Convenzione Naming:

wvds.<dominio>.<azione>
  +-- wvds.build.run
  +-- wvds.build.clean
  +-- wvds.projects.create

Settings

[ ] Tutte le Settings in contributes.configuration
[ ] Le Settings sono documentate (description)
[ ] Le Settings hanno default sicuri
[ ] Le Settings vengono validate

Esempio:

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

Sicurezza

[ ] Chiamate tool esterni validate/sanificate
[ ] Percorsi workspace trattati come untrusted
[ ] Nessuna Command Injection possibile
[ ] shell: false nelle chiamate Spawn

Esempio: Chiamata Tool Sicura:

(* VIETATO - Command Injection possibile *)
Exec('fpc ' + UserInput);
 
(* CORRETTO - Alternativa sicura *)
var
  Options: TSpawnOptions;
begin
  Options.shell := False;
  Options.cwd := ValidatedPath;
  Spawn('fpc', ['-O2', ValidatedInput], Options);
end;

Cross-Platform

[ ] I percorsi sono cross-platform safe
[ ] Encoding considerato (UTF-8)
[ ] Line Endings considerati
[ ] Separatori percorso corretti (usare PathJoin)

Metadata package.json

[ ] publisher impostato
[ ] name corretto (minuscole, trattini)
[ ] version segue SemVer
[ ] license indicata
[ ] repository linkato
[ ] engines.vscode impostato sulla versione minima

Asset Marketplace

[ ] README.md presente e aggiornato
[ ] CHANGELOG.md con cronologia versioni
[ ] Icona presente (128x128 PNG)
[ ] Screenshot per funzionalità complesse

Verifiche Specifiche pas2js

Compilazione

[ ] Compila senza errori con pas2js
[ ] Nessuna funzionalità pas2js-incompatibile usata
[ ] Nessun class var (usare variabile a livello Unit)
[ ] Nessun Int64 (usare Integer)
[ ] Nessun commento // in blocchi asm

Pattern Entry Point

[ ] extension_main.pas presente
[ ] Activate/Deactivate esportati
[ ] Blocco Initialization chiama 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
  (* Inizializzazione *)
end;
 
procedure Deactivate;
begin
  (* Cleanup *)
end;
 
initialization
  ExportActivateDeactivate(@Activate, @Deactivate);
 
end.

SSOT per API VSCode

[ ] API VSCode via ~/sources/common/web/vscode/
[ ] Nessun require('vscode') diretto nelle Extension
[ ] Wrapper WvdS.VSCode.* usati

Verifiche Raccomandate

[ ] Progress Reporting per operazioni > 1s
[ ] Cancellation Tokens implementati
[ ] Debouncing nel File Watching
[ ] Dimensione Extension minimizzata
[ ] Nessun binary/asset non necessario

Verifiche Opzionali

[ ] Smoke Tests (Activation + Command)
[ ] Modalità offline se servizi remoti usati
[ ] Telemetria documentata (o nessuna)

Creazione VSIX

Processo Build

# 1. Compilare Pascal in JavaScript
pas2js @../../common/wvds_common.pas2js.cfg @build.cfg pas/extension_main.pas
 
# 2. Pacchettizzare VSIX
vsce package --no-dependencies
 
# 3. Validare
vsce ls

Verifiche Prima di Creazione VSIX

[ ] dist/extension_main.js presente
[ ] package.json versione incrementata
[ ] CHANGELOG.md aggiornato
[ ] README.md aggiornato
[ ] Nessun artefatto debug incluso
[ ] .vscodeignore configurato correttamente

Checklist Rapida da Copiare

Checklist Review (Extension VSCode):

Obbligatorio:
- [ ] Activation Events minimali
- [ ] Nessuna operazione bloccante
- [ ] Commands con ID, titoli, categorie
- [ ] Settings documentate e validate
- [ ] Chiamate tool sanificate (shell: false)
- [ ] Cross-Platform safe (percorsi, encoding)
- [ ] Metadata package.json completi

pas2js:
- [ ] Compila senza errori
- [ ] Nessuna funzionalità pas2js-incompatibile
- [ ] Pattern Entry Point rispettato
- [ ] SSOT per API VSCode

Asset:
- [ ] README.md presente
- [ ] CHANGELOG.md aggiornato
- [ ] Icona presente

Vedi anche

Zuletzt geändert: il 30/01/2026 alle 01:40