====== FPC Solution Manager ======
Upravljanje projektov, Build-System, Debugging in Form Designer za Free Pascal / Lazarus v Visual Studio Code.
**Package-ID:** ''wvds.wvds-fpc-solution-manager''
===== Pregled =====
Solution Manager je osrednja razširitev za razvoj v Free Pascalu v VSCode. Ponuja:
* **Tree View** — Hierarhični prikaz projektnih skupin, projektov, enot in obrazcev
* **Build-System** — Build, Rebuild, Clean prek ''lazbuild'' ali FPC Direct
* **Form Designer** — Vizualni LFM-urejevalnik s podporo za skine
* **Debugger** — Integrirano razhroščevanje z ''fpdserver'' / GDB
* **Language Server** — Code Completion, Go to Definition, Hover prek ''pasls''
* **Code Formatter** — ''ptop'' ali ''jcf'' integracija
===== Odkrivanje projektov =====
Razširitev samodejno odkrije projekte v odprtem Workspace:
| Datoteka | Vrsta projekta |
^ ''.lpi'' | Lazarus-projekt (konzola, GUI, knjižnica) |
^ ''.lpg'' | Projektna skupina (več projektov) |
^ ''.lpk'' | Lazarus-paket |
^ ''package.json'' | VSCode Extension (pas2js, virtualni projekt) |
^ ''.iss'' | InnoSetup Installer-skripta |
Multi-Root Workspaces so podprti — vsaka mapa Workspace se pregleda ločeno.
===== Tree View =====
Tree View se pojavi v Activity Bar (leva stran) z ikono FPC Solution Manager.
==== Hierarhija ====
Workspace Folder
├── Projektna skupina (.lpg)
│ ├── Projekt (.lpi) ← z Inline Build/Run gumbi
│ │ ├── Enote (.pas)
│ │ ├── Obrazci (.pas + .lfm)
│ │ ├── Build načini (Debug, Release, ...)
│ │ ├── Odvisnosti (Required Packages)
│ │ └── Viri (.rc)
│ └── Projekt 2 ...
├── Paket (.lpk)
│ ├── Enote
│ └── Required Packages
├── Extension (package.json) ← Virtualni pas2js-projekt
│ ├── Enote
│ └── npm Dependencies
└── Setup (.iss) ← InnoSetup projekt
└── Sekcije ([Files], [Run], ...)
==== Kontekstni meni ====
Desni klik na elemente drevesa prikaže kontekstno odvisna dejanja:
**Projekt:**
* Build / Rebuild / Clean
* Build and Run / Run / Stop
* Properties (F4)
* Select Build Mode
* Add Unit / Form / Existing File
* Navigate (Dependencies, Call Hierarchy)
**Projektna skupina:**
* Build All / Rebuild All / Clean All
* Set Active Project
* Add New/Existing Project
**Enota / Obrazec:**
* Open File (Enter)
* Reveal in File Explorer
* Copy Path / Copy Relative Path
* Remove from Project
* Show Dependencies / Call Hierarchy
==== Kontekstni meni urejevalnika ====
Desni klik v Pascal-urejevalniku (''.pas'', ''.pp'', ''.lpr'') prikaže podmeni **FPC Solution Manager**:
* Sort and Remove Unused Units
* Show Call Hierarchy
* Show Dependency Explorer
* Add Watch (le pri izbiri)
===== Build-System =====
==== Build-načini ====
Vsak projekt ima lahko več build-načinov:
| Način | Opis |
^ Debug | Informacije za razhroščevanje, brez optimizacije |
^ Release | Optimizirano, brez informacij za razhroščevanje |
^ Custom | Uporabniško definirane možnosti prevajalnika |
Zamenjava build-načina: Desni klik na projekt → **Select Build Mode** ali ''Ctrl+Shift+M''.
==== Build-ukazi ====
| Ukaz | Opis | Bližnjica |
^ Build Project | Inkrementalni build | ''Ctrl+Shift+B'' |
^ Rebuild Project | Celotna ponovna gradnja | ''Shift+F9'' |
^ Clean Project | Brisanje build-artefaktov | ''Ctrl+Shift+C'' |
^ Build and Run | Prevedi in zaženi | ''F9'' |
^ Compile (Syntax Check) | Samo preverjanje sintakse, brez povezovanja | — |
^ Build All | Prevedi vse projekte v skupini | — |
^ Build in Dependency Order | Prevedi projekte po odvisnostih | — |
==== Pre/Post-Build ukazi ====
V nastavitvah lahko definirate lupinske ukaze, ki se zaženejo pred/po vsakem buildu:
fpc-solution-manager.preBuildCommand: "echo Building {projectName} in {buildMode}"
fpc-solution-manager.postBuildCommand: "copy {outputPath} D:\\Deploy\\"
Razpoložljive spremenljivke: ''{projectName}'', ''{buildMode}'', ''{projectDir}'', ''{outputPath}''
===== Zagon projektov =====
| Ukaz | Bližnjica | Opis |
^ Run Project | ''F5'' | Zaženi prevedeni program |
^ Build and Run | ''F9'' | Prevedi in takoj zaženi |
^ Stop Process | ''Shift+F5'' / ''Ctrl+F2'' | Prekini tekoči proces |
===== Razhroščevanje =====
==== Predpogoji ====
Razhroščevalnik potrebuje ''fpdserver'' (Free Pascal Debug Server) kot zaledje.
**Pridobitev fpdserver:**
* **Lazarus-Bundle (od 3.0):** ''fpdserver'' je že vključen (''/tools/fpdserver'')
* **Ročna gradnja:** Iz izvorne kode FPC:
cd /packages/fcl-passrc/utils/fpdserver
lazbuild --bm=Release fpdserver.lpi
**Nastavitev:**
* ''fpc-solution-manager.fpdserverPath'' — Pot do ''fpdserver.exe'' (prazno = samodejna zaznava)
Brez ''fpdserver'' integracija razhroščevanja ne deluje. Razširitev samodejno išče v namestitvenem imeniku Lazarusa.
==== launch.json ====
Ustvarite ''launch.json'' v mapi ''.vscode'' delovnega prostora:
{
"type": "lazarus",
"request": "launch",
"name": "Debug MyApp",
"program": "${command:fpcse2.getExecutablePath}",
"cwd": "${workspaceFolder}",
"stopOnEntry": false,
"args": []
}
**Namig:** ''${command:fpcse2.getExecutablePath}'' samodejno določi izhodno pot iz nastavitev projekta.
==== Konfiguracijski atributi ====
| Atribut | Tip | Opis | Privzeto |
^ ''program'' | String | Pot do prevedenega programa (obvezno) | — |
^ ''cwd'' | String | Delovni imenik | ''${workspaceFolder}'' |
^ ''args'' | Array | Argumenti ukazne vrstice | ''[]'' |
^ ''stopOnEntry'' | Boolean | Ustavi se ob zagonu programa | ''false'' |
==== Funkcionalnosti ====
* **Breakpoints** v ''.pas'' in ''.inc'' datotekah
* **Step In/Out/Over** — Koračno izvajanje
* **Variables** — Pregled lokalnih in globalnih spremenljivk
* **Watches** — Spremljanje izrazov (''Ctrl+Alt+W'' pri izbiri)
* **Call Stack** — Prikaz klicne verige
* **Immediate Window** — Vrednotenje izrazov med izvajanjem
==== Točke prekinitve ====
* **Vrstične točke prekinitve** — Klik na rob vrstice v ''.pas'' in ''.inc'' datotekah
* **Pogojne točke prekinitve** — Desni klik na točko prekinitve → ''Edit Breakpoint'' → vnesite pogoj (npr. ''i > 100'')
* **Števec zadetkov** — Točka prekinitve se sproži šele po N zadetkih
* **Logpoints** — Izpis sporočila v konzolo brez prekinitve programa
==== Watches ====
Spremljanje izrazov med izvajanjem:
* **Dodajanje:** ''Ctrl+Alt+W'' pri izbranem besedilu v Pascal-urejevalniku
* **Panel:** V spodnjem delu pod **FPC Solution Manager → Watches**
* **Izrazi:** Spremenljivke, polja zapisov (''MyRecord.Field''), indeksi polj (''MyArray[0]'')
==== Immediate Window ====
Interaktivno vrednotenje med sejo razhroščevanja:
* **Odpri:** Panel **FPC Solution Manager → Immediate**
* Vnesite izraz in pritisnite ''Enter''
* Podpira: vrednosti spremenljivk, pretvorbe tipov, preproste aritmetične izraze
==== Paneli za razhroščevanje ====
V spodnjem panelu (področje FPC):
* **Immediate** — Interaktivno vrednotenje izrazov
* **Watches** — Spremljani izrazi/spremenljivke
==== Build-način za razhroščevanje ====
Za uspešno razhroščevanje mora biti projekt zgrajen v načinu **Debug**:
* Zamenjava build-načina: ''Ctrl+Shift+M'' → **Debug**
* Informacije za razhroščevanje: zastavice prevajalnika ''-g -gl -gw'' morajo biti aktivne
* Izklop optimizacije: brez ''-O2'' v načinu Debug
==== Odpravljanje težav ====
| Težava | Rešitev |
^ fpdserver ni najden | Nastavite ''fpc-solution-manager.fpdserverPath'' ali zgradite ''fpdserver'' (glejte zgoraj) |
^ Točke prekinitve se ne sprožijo | Zgradite projekt v načinu **Debug** (''Ctrl+Shift+M'' → Debug) |
^ Spremenljivke niso vidne | Preverite informacije za razhroščevanje: ''-g -gl -gw'' morajo biti nastavljene |
^ Korakanje nepričakovano skoči | Izklopite optimizacijo: ''-O2'' uporabljajte le v načinu Release |
===== Form Designer =====
Form Designer se samodejno odpre za ''.lfm'' datoteke.
==== Uporaba ====
| Dejanje | Bližnjica |
^ Toggle Form/Code | ''F12'' |
^ View Form as Text | ''Alt+F12'' |
^ Select Designer Skin | Command Palette |
==== Skini ====
Designer podpira skine za vizualni izgled:
* ''fpc-solution-manager.designer.skinName'' — Aktivni skin (npr. ''WvdS-Shell'')
* ''fpc-solution-manager.designer.skinVariant'' — Varianta (npr. ''Amber'', ''Plum'')
* ''fpc-solution-manager.designer.defaultSkinAutoDetect'' — Samodejna Light/Dark zaznava glede na VSCode-temo
===== Custom Editors =====
| Urejevalnik | Vrsta datoteke | Opis |
^ Form Designer | ''.lfm'' | Vizualni Lazarus-urejevalnik obrazcev |
^ PO Translation Editor | ''.po'' | Urejevalnik prevodov za lokalizacijo |
^ Resource Editor | ''.rc'' | Urejevalnik virov (ikone, bitne slike, nizi) |
==== PO Translation Editor ====
Odpre se za ''.po'' datoteke (GNU gettext). Ponuja:
* Tabelarični prikaz vseh prevodnih vnosov (izvirnik → prevod)
* Iskanje in filtriranje po ključu ali besedilu
* Neposredno urejanje prevodov v WebView-panelu
* Spremembe se zapišejo nazaj v ''.po'' datoteko
==== Resource Editor ====
Odpre se za ''.rc'' datoteke. Ponuja:
* Pregled vseh virov (ikone, bitne slike, kazalci, tabele nizov, informacije o različici)
* Dodajanje in odstranjevanje vnosov virov
* Urejanje poti do datotek virov
===== Language Server (pasls) =====
Opcijska integracija Pascal Language Serverja za napredne funkcije kode.
==== Aktivacija ====
* ''fpc-solution-manager.pasls.enabled'' — ''true'' (privzeto)
* ''fpc-solution-manager.paslsPath'' — Pot do ''pasls.exe'' (prazno = samodejna zaznava)
* ''fpc-solution-manager.lazarusSourcePath'' — Lazarus-izvorna koda za razreševanje simbolov
==== Funkcionalnosti ====
| Funkcionalnost | Tipka | Opis |
^ Code Completion | ''Ctrl+Space'' | Dopolnjevanje identifikatorjev, metod, enot |
^ Signature Help | samodejno | Seznam parametrov ob tipkanju ''('' |
^ Go to Definition | ''F12'' | Skok na definicijo/implementacijo simbola |
^ Go to Declaration | ''Ctrl+Click'' na vmesnik | Skok na deklaracijo v vmesniku (ne na implementacijo) |
^ Go to Implementation | ''Ctrl+Shift+F12'' | Skok na implementacijo (interno delegira na Definition) |
^ Document Symbols | ''Ctrl+Shift+O'' | Seznam simbolov trenutne datoteke — metode in procedure (Outline) |
^ Workspace Symbols | ''Ctrl+T'' | Iskanje simbolov v vseh datotekah delovnega prostora |
^ Find All References | ''Shift+F12'' | Iskanje vseh uporab simbola v delovnem prostoru |
^ Document Highlight | samodejno | Poudarjanje vseh pojavitev identifikatorja v trenutni datoteki |
^ Hover s tipsko informacijo | miškin kazalec | Signatura + PasDoc-dokumentacija + izvorna pozicija (glej spodaj) |
==== Hover s tipsko informacijo in PasDoc ====
Ko se z miško pomaknete nad simbol, hover-tooltip prikaže do tri ravni informacij:
- **Signatura** — Popolna deklaracija kot sintaktično poudarjen Pascal blok kode, pridobljena iz CodeTools ''FindSmartHint'' (npr. ''private procedure TMyClass.DoSomething(const A: Integer): Boolean'') — vključno z vidnostjo, imenom razreda, modifikatorji parametrov in tipom vrnitve
- **PasDoc-dokumentacija** — Komentarji v obliki ''(** @abstract(...) @param(...) @returns(...) *)'' neposredno iz izvorne kode, oblikovani kot Markdown
- **Izvorna pozicija** — Ime datoteke in vrstična pozicija deklaracije (npr. ''MyUnit.pas(42,5)'')
pasls zagotavlja ''textDocument/hover'' in interno uporablja CodeTools ''FindSmartHint'' (enak mehanizem kot Lazarus IDE) za ekstrakcijo signatur. PasDoc-komentarji se preberejo prek ''GetPasDocComments'' in se na strežniški strani oblikujejo v Markdown. Če pasls ni na voljo, razširitev uporabi ''textDocument/definition'' kot nadomestek s klientskim večvrstičnim izločevanjem.
**Primer hover-a:**
┌───────────────────────────────────────────────────────────┐
│ private procedure TMyClass.DoSomething(const A: Integer); │ ← Signatura (FindSmartHint)
│ ───────────────────────────────────────────────────────── │
│ Izvede akcijo. │ ← @abstract
│ │
│ Parameters: │
│ - A — Vrednost │ ← @param
│ ───────────────────────────────────────────────────────── │
│ Source: MyUnit.pas(42,5) │ ← Izvorna pozicija
└───────────────────────────────────────────────────────────┘
**Podprte PasDoc-oznake:**
| Oznaka | Opis | Primer |
^ ''@abstract'' | Kratek opis | ''@abstract(Izračuna kontrolno vsoto)'' |
^ ''@param'' | Dokumentacija parametra | ''@param(Buffer Podatki za preverjanje)'' |
^ ''@returns'' | Vrnjena vrednost | ''@returns(CRC32-vrednost kot Cardinal)'' |
^ ''@raises'' | Izjeme | ''@raises(EInvalidOperation Ob praznem bufferju)'' |
PasDoc-komentarji se začnejo z ''(**'' (dvojna zvezdica). Navadni ''(*'' komentarji se ne prikažejo kot dokumentacija.
==== Načrtovane funkcionalnosti ====
Naslednje funkcionalnosti zahtevajo strežniško podporo pasls in trenutno še **niso na voljo**:
* **Rename Symbol** (''F2'') — Preimenovanje simbola v vseh datotekah. Zahteva ''textDocument/rename'' v pasls.
* **Live Diagnostics** — Napake in opozorila med tipkanjem. Zahteva globlje vključevanje CodeTools v pasls.
Razširitev že registrira ponudnika za Rename. Ko bo pasls podprl ''textDocument/rename'', bo funkcionalnost samodejno delovala.
==== Workspace Symbols ====
''Ctrl+T'' odpre iskalnik simbolov delovnega prostora. Tu je mogoče iskati procedure, funkcije, tipe in spremenljivke v vseh datotekah delovnega prostora.
* Vtipkajte iskalni izraz → pasls vrne ustrezne simbole
* ''Enter'' navigira neposredno na mesto definicije
* Prazno iskanje → prazen seznam (brez napake)
===== Code Formatter =====
| Nastavitev | Opis | Privzeto |
^ ''formatter.engine'' | ''ptop'', ''jcf'' ali ''none'' | ''ptop'' |
^ ''formatter.formatOnSave'' | Samodejno oblikovanje ob shranjevanju | ''false'' |
===== Cross-Compilation (WSL) =====
Linux-buildi na Windows prek WSL (Windows Subsystem for Linux).
==== Predpogoji ====
- **Namestitev WSL:** ''wsl --install'' v PowerShell (skrbnik)
- **Izbira distribucije:** npr. ''Ubuntu'' (privzeto) ali ''Debian''
- **Namestitev FPC v WSL:**
# V WSL:
sudo apt install fpc lazarus
==== Aktivacija ====
* ''fpc-solution-manager.wslEnabled'' — ''true''
* ''fpc-solution-manager.wslActiveDistro'' — WSL-distribucija (npr. ''Ubuntu'')
* ''fpc-solution-manager.wslLazbuildPath'' — Linux-pot do ''lazbuild'' (npr. ''/usr/bin/lazbuild'')
* ''fpc-solution-manager.wslFpcPath'' — Linux-pot do ''fpc''
==== Ukazi ====
* **Select Cross-Compile Target** — Izberi ciljno platformo (x86_64-linux, i386-linux, aarch64-linux)
* **Configure WSL** — Odpri nastavitve WSL
* **Build for Linux (WSL)** — Zaženi Linux-build
==== Potek ====
- Izbira ciljne platforme: Desni klik na projekt → **Select Cross-Compile Target**
- Zagon builda: **Build for Linux (WSL)** ali ''Ctrl+Shift+B'' (ko je WSL-cilj aktiven)
- Razširitev preda build ''lazbuild'' / ''fpc'' znotraj WSL-instance
- Izhodne datoteke pristanejo v nastavljeni izhodni poti
===== Raziskovalec odvisnosti =====
**Show Dependencies** — na voljo v Tree View in v kontekstnem meniju urejevalnika:
* Prikaže odvisnosti enot kot drevo
* Zazna krožne reference
* Pomaga pri refaktoriranju
| Klic | Vedenje |
^ Desni klik na projekt v Tree | Prikaže odvisnosti projekta (vse enote in pakete) |
^ Desni klik na paket v Tree | Prikaže odvisnosti paketa |
^ Desni klik na enoto v Tree | Prikaže odvisnosti enote (''uses'' klavzule) |
^ Kontekstni meni urejevalnika → Show Dependencies | Prikaže odvisnosti trenutno odprte datoteke |
==== Hierarhija klicev ====
**Show Call Hierarchy** — na voljo v Tree View in v kontekstnem meniju urejevalnika:
=== Iz Tree View ===
Desni klik na enoto → **Show Call Hierarchy** odpre WebView-panel z:
* **Incoming** — Katere funkcije kličejo ta simbol (klicatelji)
* **Outgoing** — Katere funkcije kliče ta simbol (klicanci)
* Klikljivi vnosi navigirajo neposredno do mesta klica
=== Iz urejevalnika (Peek-prikaz) ===
Desni klik v Pascal-urejevalniku → **FPC Solution Manager** → **Show Call Hierarchy** prikaže hierarhijo klicev kot **vgrajeni Peek-pripomoček** neposredno v urejevalniku (podobno kot ''Peek Definition''). Kazalec mora biti na imenu funkcije ali metode.
Hierarhija klicev (odhodne klice) deluje prek analize razširitve. Dohodne klice (klicatelji) zahtevajo pasls-podporo za ''textDocument/references'', ki trenutno še ni na voljo.
===== Bližnjice na tipkovnici =====
| Bližnjica | Dejanje | Kontekst |
^ ''Ctrl+Shift+B'' | Build Project | Tree View: Projekt |
^ ''F5'' | Run Project | Tree View: Projekt |
^ ''F9'' | Build and Run | Tree View: Projekt |
^ ''Shift+F9'' | Rebuild Project | Tree View: Projekt |
^ ''Ctrl+Shift+C'' | Clean Project | Tree View: Projekt |
^ ''F4'' | Properties | Tree View: Projekt/Paket |
^ ''F12'' | Toggle Form/Code | Pascal-urejevalnik / Form Designer |
^ ''Alt+F12'' | View Form as Text | Form Designer |
^ ''Ctrl+Shift+A'' | Add Unit | Tree View: Projekt/Mapa |
^ ''Ctrl+Shift+M'' | Select Build Mode | Tree View: Projekt |
^ ''Ctrl+Shift+R'' | Refresh Tree | Tree View fokusiran |
^ ''Shift+F5'' / ''Ctrl+F2'' | Stop Process | Tree View |
^ ''Alt+Shift+R'' | Reveal in Explorer | Tree View: Enota/Obrazec |
^ ''Enter'' | Open File | Tree View: Enota/Obrazec |
^ ''Ctrl+Alt+W'' | Add Watch | Pascal-urejevalnik z izbiro |
===== Glej tudi =====
* [[.:start|WvdS FPC Tools pregled]]
* [[.:installation|Namestitev in nastavitev]]
* [[.:pas2js-studio|FPC PAS2JS Studio]]
* [[.:iss-designer|FPC ISS Designer]]
* [[.:faq|Pogosta vprašanja (FAQ)]]