====== Checklist Extension VSCode ======
Verifiche specifiche per Extension VSCode con pas2js.
Questa checklist integra la [[.:audit-core|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..
+-- 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 =====
* [[.:qualitaetssicherung|Panoramica Garanzia Qualità]]
* [[.:audit-core|Checklist Core]]
* [[.:extension-entwicklung|Sviluppo Extension]]
* [[.:code-konventionen|Convenzioni di Codice (pas2js)]]
* [[.:build-pipeline|Pipeline Build]]