====== FPC PAS2JS Studio ====== pas2js Compiler-Integration, Web Form Designer und VSCode Extension-Entwicklung in Pascal. **Package-ID:** ''wvds.wvds-fpc-pas2js-studio'' Setzt [[.:solution-manager|FPC Solution Manager]] voraus (wird automatisch mitinstalliert). ===== Übersicht ===== PAS2JS Studio erweitert den Solution Manager um Werkzeuge für die Entwicklung mit dem **pas2js** Compiler (Pascal to JavaScript): * **VSCode Extension Entwicklung** — Pascal-basierte Extensions bauen, testen, paketieren * **Web-Anwendungen** — Browser-Apps mit pas2js kompilieren und live testen * **Web Form Designer** — Visueller WFM-Editor für Web-Formulare * **Live Server** — Automatischer Rebuild und Browser-Vorschau ===== Projekttypen ===== ==== VSCode Extension ==== Wird automatisch erkannt wenn ''package.json'' ein VSCode Extension Manifest ist (''engines.vscode'' vorhanden). Das Projekt erscheint als **virtuelles Projekt** im Solution Manager Tree View — mit allen Pascal-Units, npm Dependencies und InnoSetup-Skripten. ==== Web-Anwendung ==== pas2js Web-Apps werden über ''.wfm'' oder ''.wfmproj'' Dateien erkannt. ===== Extension Build ===== ==== Kommandos ==== | Kommando | Beschreibung | ^ Build Extension (Debug) | Kompiliert mit Debug-Infos und Source Maps | ^ Build Extension (Release) | Optimierter Build (''-O2'') + esbuild Minification | ^ Rebuild Extension | Vollständiger Neubau | ^ Clean Extension | Build-Artefakte löschen | ^ Watch & Build Extension | Automatischer Rebuild bei Datei-Änderung | ^ Run Extension Tests | Unit-Tests ausführen | ^ Minify Extension | esbuild-Minification separat ausführen | ==== Deploy ==== | Kommando | Beschreibung | ^ Package VSIX | Extension als ''.vsix'' paketieren | ^ Install Extension | VSIX in VSCode installieren | ^ Publish Extension | Extension im Marketplace veröffentlichen | ==== Build-Pipeline ==== Pascal (.pas) → pas2js → extension.pas2js.js → esbuild → extension.js - **pas2js** kompiliert Pascal zu JavaScript - **esbuild** bundelt npm-Dependencies und minimiert (Release) - Ergebnis: einzelne ''extension.js'' in ''dist/'' ==== Kontextmenü (Tree View) ==== Rechtsklick auf ein VSCode Extension-Projekt zeigt das **Extension Build** Submenü: * Build (Debug) / Build (Release) / Rebuild / Clean * Watch / Run Tests * Package VSIX / Install / Publish * Minify ==== Inline Buttons ==== Am Extension-Projekt im Tree View: * **Build** (Play-Icon) — Debug-Build * **Watch** (Eye-Icon) — Watch-Modus starten ===== Web-Anwendungen ===== ==== Kommandos ==== | Kommando | Beschreibung | ^ Build Web App (Debug) | Web-App kompilieren (Debug) | ^ Build Web App (Release) | Web-App kompilieren (Release) | ^ Watch & Preview Web App | Live-Rebuild mit Browser-Vorschau | ^ Stop Watch Mode | Watch-Modus beenden | ^ Launch Browser Preview | Browser mit Preview-URL öffnen | ==== Live Server ==== Im Watch-Modus startet ein lokaler HTTP-Server: * **Port**: konfigurierbar über ''fpc-pas2js.webApp.liveServerPort'' (Standard: 8080) * **Auto-Open**: Browser öffnet automatisch (''fpc-pas2js.webApp.autoOpenBrowser'') * **Auto-Reload**: Seite wird bei Datei-Änderungen automatisch neu geladen ===== Web Form Designer ===== Der WFM Designer öffnet sich automatisch für ''.wfm'' Dateien. ==== Kommandos ==== | Kommando | Beschreibung | ^ New Web Form | Neues Web-Formular erstellen | ^ New Frame | Neuen Frame erstellen | ^ Toggle Web Form / Code | Zwischen Designer und Code wechseln | ^ Preview Web Form | Formular im Browser anzeigen | ^ Toggle Designer View | Designer-Ansicht umschalten | ==== Dateien ==== Ein Web-Formular besteht aus: * ''.pas'' — Pascal-Unit mit Formular-Logik * ''.wfm'' — Formular-Layout (ähnlich ''.lfm'' für LCL) ===== Debugging ===== ==== Browser Debug ==== pas2js Web-Apps können im Browser debuggt werden: * **Debugger-Typ**: ''pas2js-browser'' * **Debug-Port**: konfigurierbar über ''fpc-pas2js.debug.browserDebugPort'' (Standard: 9222) ==== Source Maps ==== | Modus | Beschreibung | ^ ''external'' | Separate ''.map'' Datei (Standard) | ^ ''inline'' | Source Map eingebettet in JS | ^ ''none'' | Keine Source Maps | Konfiguration: ''fpc-pas2js.debug.sourceMapMode'' **Validate Source Maps**: Prüft ob Source Maps korrekt generiert wurden. ===== Code Formatter ===== PAS2JS Studio bringt eine eigene Formatter-Konfiguration mit: | Setting | Beschreibung | Standard | ^ ''formatter.engine'' | ''ptop'', ''jcf'', oder ''none'' | ''ptop'' | ^ ''formatter.ptopPath'' | Pfad zu ''ptop'' | Auto-Erkennung | ^ ''formatter.jcfPath'' | Pfad zu ''jcf'' | Auto-Erkennung | ^ ''formatter.configPath'' | Konfigurationsdatei | — | ^ ''formatter.formatOnSave'' | Bei Speichern formatieren | ''false'' | ===== Test Explorer ===== Der Test Explorer integriert sich in die VSCode Testing-API und erkennt FPCUnit-Tests automatisch. ==== Konfiguration ==== | Setting | Beschreibung | Standard | ^ ''test.enabled'' | Test Explorer aktivieren | ''true'' | ^ ''test.testDir'' | Test-Verzeichnis (relativ zum Workspace) | ''tests'' | ^ ''test.testPattern'' | Glob-Pattern für Test-Dateien | ''*.test.pas'' | ^ ''test.timeout'' | Timeout in Millisekunden | ''30000'' | ==== Test-Struktur ==== Tests folgen dem FPCUnit-Muster: unit MyFeature.test; interface uses fpcunit, testregistry; type TMyFeatureTest = class(TTestCase) published procedure Test_Add_ReturnsSum; procedure Test_Divide_ByZero_Raises; end; implementation procedure TMyFeatureTest.Test_Add_ReturnsSum; begin AssertEquals(4, Add(2, 2)); end; procedure TMyFeatureTest.Test_Divide_ByZero_Raises; begin AssertException(EDivByZero, @DoDivideByZero); end; initialization RegisterTest(TMyFeatureTest); end. ==== Discovery ==== * Test-Dateien werden im konfigurierten ''test.testDir'' nach ''test.testPattern'' gesucht * Klassen die von ''TTestCase'' erben werden als Test-Suites erkannt * ''published'' Methoden die mit ''Test'' beginnen werden als einzelne Tests erkannt ==== Kommandos ==== * **Run Tests** — Alle Tests kompilieren und ausführen * **Debug Tests** — Tests im Debugger ausführen (Breakpoints in Test-Code möglich) ==== Test-Ergebnisse ==== * Ergebnisse erscheinen im VSCode **Testing** Panel (Seitenleiste) * Fehlerhafte Tests zeigen die Fehlermeldung und Zeilennummer * Grün = bestanden, Rot = fehlgeschlagen, Gelb = übersprungen ===== Language Server ===== Eigene pasls-Konfiguration: * ''fpc-pas2js.pasls.enabled'' — Language Server aktivieren * ''fpc-pas2js.paslsPath'' — Pfad zu ''pasls'' * ''fpc-pas2js.lazarusSourcePath'' — Lazarus-Quellen für Referenzen ===== Einstellungen ===== Alle Einstellungen beginnen mit ''fpc-pas2js.'': ==== Compiler ==== ^ Setting ^ Beschreibung ^ Standard ^ | ''pas2jsPath'' | Pfad zu ''pas2js'' Compiler | Auto-Erkennung | | ''pas2jsRtlPath'' | Pfad zu pas2js RTL Packages | Auto-Erkennung | | ''defaultUnitSearchPaths'' | Zusätzliche Unit-Suchpfade | ''[]'' | | ''defaultCompilerFlags'' | Extra Compiler-Flags (z.B. ''-dMYDEFINE'') | — | ==== Extension Build ==== ^ Setting ^ Beschreibung ^ Standard ^ | ''extBuild.autoOnSave'' | Automatisch bei Speichern kompilieren | ''false'' | | ''extBuild.minify'' | Release-Builds minifizieren | ''true'' | | ''extBuild.logToFile'' | Build-Log in Datei schreiben | ''false'' | | ''extBuild.installAfterBuild'' | Nach Build automatisch installieren | ''false'' | | ''defaultVsixOutputPath'' | Standard-Ausgabepfad für VSIX | — | ==== Web App ==== ^ Setting ^ Beschreibung ^ Standard ^ | ''webApp.liveServerPort'' | Port für Live-Server | ''8080'' | | ''webApp.autoOpenBrowser'' | Browser automatisch öffnen | ''true'' | ==== Debug ==== ^ Setting ^ Beschreibung ^ Standard ^ | ''debug.sourceMapMode'' | Source Map Modus | ''external'' | | ''debug.browserDebugPort'' | Browser Debug-Port | ''9222'' | ===== Syntax Highlighting ===== PAS2JS Studio registriert Pascal und WFM Sprachen: * **Pascal** (''.pas'', ''.pp'', ''.inc'') — TextMate Grammar * **WFM** (''.wfm'') — Web Form Markup ===== Siehe auch ===== * [[.:start|WvdS FPC Tools Übersicht]] * [[.:installation|Installation und Konfiguration]] * [[.:solution-manager|FPC Solution Manager]] * [[.:iss-designer|FPC ISS Designer]] * [[.:faq|Häufige Fragen (FAQ)]]