Most important link
Read everything here: Visual Studio Code with Castle Game Engine.
What is an “LSP server”
LSP (Language Server Protocol) is a protocol to define code tools functionality (e.g. code completion) in a way independent from the text editor.
- Multiple text editors can act as LSP clients, e.g. VS Code (where the LSP originated), Emacs, Neovim.
They can access any LSP server. There are lots of LSP servers, in particular there are a few suitable for Pascal.
What I did
I was having some fun exploring the options and I actually got to work 2 LSP servers targeting Pascal: Philip Zander (Isopod) LSP server and Ryan Joseph (genericptr) LSP server. They both use Lazarus CodeTools underneath.
I then modified them (both) adding some CGE-specific features and testing how to make them perfect. I wanted to have it all — support for VS Code (which I know many people like), Emacs (which is my favorite text editor), out-of-the-box support to complete code using CGE API, working everywhere (I tested both Linux and Windows).
- We had a few conversations with Philip Zander (thank you a lot for all the information how everything works and being open to my PRs!), I made our fork with Castle Game Engine enhancements, I submitted some PRs back: #1, #2, #4.
My forks add support for additional configuration using INI file and you can make LSP servers trivially aware of CGE paths this way. The details of my additions are in README files on both LSP servers.
Note: Both the above LSP servers actually come from initial Arjan Adriaanse work (though, after 3 commits, it seems he didn’t maintain it further) on github.com/arjanadriaanse/pascal-language-server.
Finally, I gathered a lot of notes and links about existing options to use LSP with Pascal.
Making it easy to use
As a last step, I made the setup as easy as possible to use:
- Our LSP server is just packaged along with CGE downloads from today. If you download CGE, then you also download an LSP server we advise.
I tested it with our bundled FPC. CodeTools need to access newly added
I documented everything about VS Code integration (LSP server and more) as a nice manual page.
This was a lot of integration work 🙂 And it’s not finished! A lot of pieces can be improved and/or it can be made to work more out-of-the-box. It is possible we’ll have our own Castle Game Engine extension for VS Code one day. It could take care of LSP, help with debugging and running CGE projects from VS Code, maybe more?
Stay tuned 🙂 Do you like this? Please support our work.